This address splitting seems logical and I tried it, but unfortunately it didn't change the result. Anyways it remains in my code.

Also I was adding to data line pull up resistor as it was said in datasheet. Now the "val2" value is 16.

In datasheet it is said, that each data byte in the memory has a 16-bit address. The Most Significant Byte should be send first and then Least significant. As I understand the address must be word type variable.
I was checking the routing of reading process. This sequence is a bit different than in writing process.

Read sequence:
Start => Control => Address.HighByte => Address.HighByte => Start => Control => Data Out

Here the Control byte and Start condition has to be send twice. In writing it is without second Start and Control. I don't know how the I2C protocol is set. Perhaps for reading it should be also done something different.