Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кто нибудь работал с памятью at24с16a?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
JonnyDeep
Кто нибудь работал с at24c16a at24c16a? Подскажите, пожалуйста, как передаётся адрес данных? Например, хочу записать один байт по адресу 0х30, как это сделать?
Dima_Ag
Цитата(JonnyDeep @ Sep 20 2007, 14:32) *
Подскажите, пожалуйста, как передаётся адрес данных? Например, хочу записать один байт по адресу 0х30, как это сделать?



На стр. 11 Вашего даташита есть Figure 2, там всё нарисовано.
Для микросхемы с16 три старших бита адреса передаются в "device address".(см. Figure 1 на стр. 10)
rezident
У вас же 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 wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.