Цитата(Xenom0rph @ Oct 2 2008, 18:34)

так вот делал я по примерам, и вот как там вызывалась функция
write_byte_eeprom(0xaa,0Ч55)
Вот всё работает, а стоит поменб переменную address, и не пишеться, тыкал пальцем в небо проверял, разные аддреса то пишет то не пишет. Вот что нужно писать в эту переменную address
Первым байтом передается адрес самого устройства (Device address). Первые четыре бита (старший полубайт) уникальны для данного типа I2C-устройств (EEPROM) - 1010xxxx. Самый младший бит определяет тип операции 0- запись, 1 - чтение. А оставшиеся три бита являются аппаратным адресом EEPROM. У AT24C256 только два бита аппаратного адреса, поэтому bit3 (счет с нуля) всегда как 0 передается.
Далее при записи передается логический адрес первой из адресуемых ячеек памяти. Два байта. Сначала
младшийстарший, а затем
старшиймладший. Если после передачи
адреса устройства не передавать весь
логический адрес ячейки целиком, а сформировать лишь повторное старт-условие, то логическим адресом ячейки памяти будет тот, который был при предыдущем обращении к EEPROM. Правда инкрементированный на 1.
В общем в даташите все в картинках написано. И чего может быть непонятно?
Хотя... Самый важный нюанс состоит в том, что у EEPROM есть кольцевой буфер, для которого часть логического адреса автоинкрементируется при каждом последующем считанным или записанным байтом. Поэтому при записи нужно всегда делать выравнивание на границу этого буфера. Обращаю внимание, что инкрементируется
не весь логический адрес, а только лишь
часть его (6 младших разрядов адреса для 24C256).