Работа (запись/чтение) с I2C EEPROM типа at24c32 и 24lc32 в страничном режиме
- Войдите на сайт для отправки комментариев
Сб, 28/02/2015 - 12:19
Сразу оговорюсь, что вопрос для профессионалов. Здесь не надо пробовать - надо просто знать.
До сих пор я работал с памятью только в байтовом режиме и не задумывался как и что. Но вот пришлось прибегнуть к страничному режиму записи/чтения и появилось много вопросов. Как всегда почитал даташиты и посмотрел примеры из библиотек. Вот такую для себя сделал шпаргалку из даташитов:
/************Страничная организация памяти 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)Действительно ЛИ нельзя полностью заполнять всю страницу памяти информацией и если "да", то почему?
Обратите внимание, что я не прошу код. Код у меня есть. Я не понимаю "мелочей", т.е. принципа.
Но если кто-то представит код, который будет демонстрировать "фишки" в контексте поставленных вопросов, то конечно буду очень признателен за профессиональный подход.
Заранее спасибо.