У вас же datasheet есть, там все написано! Хочу только сразу обратить ваше внимание, на тот факт, что запись в EEPROM производится через буфер, который имеет ограниченную длину (для 24C16 его размер 16 байт). Запись в буфер происходит с автоинкрементом адреса, но инкрементируются только биты адреса соответствующие его размеру. Для 8ми байтного буфера младшие 3 бита адреса, для 16-и байтного буфера младшие 4 бита адреса. Поэтому всегда следует это иметь в виду и при записи выравнивать адреса на длину буфера. Пример.
Допустим вам нужно записать в EEPROM последовательность из 26 байт (0x00, 0x01, 0x02, .... 0x18, 0x19), начиная с адреса 0x00С8=200.
Поскольку буфер 16 байт, то первая запись будет меньше этого размера на остаток от деления 200 на 16 (выражение в языке Си - 200%16), т.е. на 8 байт. Пишем, начиная с адреса 0x00C8 (16-8)=
8 байт. Затем делаем запись, начиная с адреса 0x00D0 длиной на весь буфер -
16 байт. И последнюю запись с адреса 0x00E0 оставшиеся
2 байта.
Если бы выравнивание на длину буфера не сделали и писали целиком весь буфер, то запись в EEPROM имела бы такой вид.
Код
-----------------------------------------------
Адрес С выравниванием Без выравнивания
правильно не правильно!
-----------------------------------------------
Первая запись
-----------------------------------------------
0x00С8 0x00 0x00
0x00С9 0x01 0x01
0x00СA 0x02 0x02
0x00СB 0x03 0x03
0x00СC 0x04 0x04
0x00СD 0x05 0x05
0x00СE 0x06 0x06
0x00СF 0x07 0x07
0x00С0 0x08 <-- здесь произошло переполнение счетчика адреса буфера
0x00С1 0x09
0x00С2 0x0A
0x00С3 0x0B
0x00С4 0x0C
0x00С5 0x0D
0x00С6 0x0E
0x00С7 0x0F
-----------------------------------------------
Вторая запись
-----------------------------------------------
0x00D0 0x08 0x10
0x00D1 0x09 0x11
0x00D2 0x0A 0x12
0x00D3 0x0B 0x13
0x00D4 0x0C 0x14
0x00D5 0x0D 0x15
0x00D6 0x0E 0x16
0x00D7 0x0F 0x17
0x00D8 0x10 0x18
0x00D9 0x11 0x19
0x00DA 0x12
0x00DB 0x13
0x00DC 0x14
0x00DD 0x15
0x00DE 0x16
0x00DF 0x17
-----------------------------------------------
Третья запись
-----------------------------------------------
0x00E0 0x18
0x00E1 0x19
Надеюсь мои пояснения все же позволят избежать вам типичных граблей при программировании EEPROM