Работа (запись/чтение) с I2C EEPROM типа at24c32 и 24lc32 в страничном режиме

Нет ответов
123ksn
Offline
Зарегистрирован: 24.11.2014
Сразу оговорюсь, что вопрос для профессионалов. Здесь не надо пробовать - надо просто знать. 
 
До сих пор я работал с памятью только в байтовом режиме и не задумывался как и что. Но вот пришлось прибегнуть к страничному режиму записи/чтения и появилось много вопросов. Как всегда почитал даташиты и посмотрел примеры из библиотек. Вот такую для себя сделал шпаргалку из даташитов:
 
/************Страничная организация памяти AT24Cxxx  I2C EEPROM************
AT24C02B,  2K,   32 pages of 8 bytes each,  8-bit data word address for random word addressing.
AT24C04B,  4K,   32 pages of 16 bytes each, 9-bit data word address for random word addressing
AT24C08B,  8K,   64 pages of 16 bytes each, 10-bit data word address for random word addressing.
AT24C16B,  16K,  128 pages of 16 bytes each, 11-bit data word address for random word addressing.
AT24C32C,  32K,  128 pages of 32 bytes each. 12-bit data word address for random word addressing.
AT24C64C,  64K,  256 pages of 32 bytes each. 13-bit data word address for random word addressing.
AT24C128B, 128K, 256 pages of 64 bytes each. 14-bit data word address for random word addressing.
AT24C256B, 256K, 512 pages of 64 bytes each. 15-bit data word address for random word addressing.
AT24C512C, 512K, 512 pages of 128 bytes each.16-bit data word address for random word addressing.
AT24C1024, 1024K,1024 pages of 256 bytes each.17-bit data word address for random word addressing.
 
24LC256 64-Byte Page Write Buffer (?????)
 
 если во время последовательной записи упираемся в конец страницы то все что дальше просто игнорируется
 
SDA - Вывод используется для двунаправленной последовательной передачи данных. Он является выводом
с открытым стоком и может быть соединен с несколькими аналогичными выводами (с открытым стоком или коллектором).
 
SCL - Вход используется для ввода данных нарастающим фронтом и вывода данных падающим фронтом
 
А2, A1, A0 - входы задания адреса AT24Cxxx. Притянуты внутренними резисторами к земле
"Ключ", который надо вставить в AT24Cxxx, что бы она "подчинилась" состоит из 8 бит(А2, A1, A0 не подключены, поэтому нули): 
1010000? - младший разряд обозначен "?" так как зависит от режима - чтение/запись
76543210-разряды байта
1010AAA?
после завершения всех записей ОБЯЗАТЕЛЬНО почитать / записать ЛЮБУЮ другую НЕНУЖНУЮ ячейку еепрома...с вероятностью 70% последняя прочитанная или записанная ячейка ПОРТИТСЯ при выключении питания !!!
*/
Но! в библиотечном примере (AH_24CXX) читаю:
 
//Address is a page address,6-bit(63),More and end will wrap around
//But data can be maximum of 28 bytes,because the Wire library has a buffer of 32 bytes
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data1, byte length )
 
читаю 1й аргумент так и оставляем, 2й - наша переменная с инфрмациаей, 3й - "длина" нашей переменной,
но переменных 4?????????
 
Исходя из вышеперечисленного у меня возникли следующие вопросы:
1)Программно-совместимы ЛИ микросхемы от Microchip (24LCxxx) и Atmel (at24cxxx) ?
2)Страницы занимают строго определенное адресное пространство, например: 0-31, 32-63, 64-95 или "плавают" относительно некого текущего адреса, например: 100+ (0-31, 32-63, 64-95), т.е. размер страницы памяти определяется вместимостью буфера?
3)Почему используется понятие "страница", а не "банк"?
4)Действительно ЛИ нельзя полностью заполнять всю страницу памяти информацией и если "да", то почему?
 
Обратите внимание, что я не прошу код. Код у меня есть. Я не понимаю "мелочей", т.е.  принципа.
Но если кто-то представит код, который будет демонстрировать "фишки" в контексте поставленных вопросов, то конечно буду очень признателен за профессиональный подход.
 
Заранее спасибо.