Микросхема памяти EEPROM AT24C32N
Микросхема памяти AT24C32N — запись и чтение данных
AT24C32 имеет 32768 бит последовательной электрически стираемой и программируемой постоянной памяти (EEPROM), организованной в виде 4096 слов по 8 бит каждое. Функция выбора адреса устройства позволяет использовать до 8 устройств на общей 2-проводной линии. Микросхема является ведомым устройством и управляется ведущим по протоколу I2C.
Адресация устройства:
Это устройство имеет 3 настраиваемых адресных вывода: A0, A1 и A2. Эти выводы можно настроить на высокий или низкий уровень, чтобы изменить фактический адрес устройства. На рисунке ниже показана структура адресного байта для микросхем серии 24XX08, согласно спецификации на AT24C32.
Контакты A0, A1 и A2 подключаются к Vcc или Vdd через резисторы 4,7 Ком. Хотя в китайских модулях часов, в состав которых входят часы реального времени DS1307 и микросхема памяти AT24C32N, адресные вывода у памяти припаяны к выводу Gnd непосредственно без резисторов. Таким образом, имея три адресных вывода, мы можем сконфигурировать семь адресов, а это значит, что к одному выводу ведущего, мы можем присоединить восемь микросхем памяти AT24C32N.
И так, старшая тетрада байта адреса, это код 1010. Первый, второй и третий биты байта, это выбранный пользователем адрес ведомого. Нулевой бит, это бит чтения/записи. В общем виде байт адреса ведомого будет иметь следующий вид – 1010 АААR/W. Где А это значения адресных битов, а R/W — бит чтения/записи . Нулевой адрес для записи в шестнадцатеричном коде — А0. Так, с адресом ведомого закончили.
Адресация и организация памяти.
AT24C32 может хранить до 4096 байт данных и имеет 12-битную систему адресации памяти. Для записи / чтения из определенной ячейки памяти нам потребуется отправить 12-битный адрес. Почему 12 бит. Потому что последняя ячейка памяти имеет адрес 4095 или В'1111 1111 1111’. Поскольку I2C передает только 1 байт за один раз, нам придется разделить этот 12-битный адрес на два разных байта. Микросхема AT24C32 имеет свою структуру памяти. А именно, весь массив байтов разбит на страницы. Каждая страница состоит из 32 ячеек памяти. На странице с нулевым адресом ячейки имеют адреса от 0… до 1F. Количество страниц равно 4096/32 = 128. Обозначим биты адреса ячеек в странице синим цветом, а адреса страниц– красным.
Например, адрес 17 ячейки на 2 странице (начиная с нуля) будет иметь вид – 0000 0000 0101 0000 или 0×0050. Внизу скриншот с записью буквы S (код 0×53) в ячейку с адресом 50h.
Теперь запишем данные в последнюю ячейку на странице по адресу 0x01df или 0000 0001 1101 1111
При записи данных в микросхеме AT24C32 имеется счетчик адреса, который после записи в ячейку инкрементируется на единицу. Счетчик может иметь значения от 0… до 1 1111 или 31 или 1F. После значения 31 счетчик обнуляется. Т.е., если вы хотите записать данные с большим количеством байт, чем количество ячеек на странице, то счетчик не переключит страницу на следующую, а лишние байты перезапишутся в начальные ячейки этой же страницы. Счетчик считает по кругу. Вот технический перевод из документации:
Младшие 5 бит адреса слова данных увеличиваются внутренне после получения каждого слова данных. Старшие биты адреса слова данных не увеличиваются, сохраняя расположение строки страницы памяти. Когда адрес слова, сгенерированный внутри, достигает границы страницы, следующий байт помещается в начало той же страницы. Если в EEPROM передается более 32 слов данных, адрес слова данных «перевернется», и предыдущие данные будут перезаписаны.
Теперь давайте разберемся, что именно нам нужно отправить для записи 1 байта в AT24C32. Ниже приведена картинка из документации показывающая принцип записи одного байта данных.
Классический I2C. Сначала передаем адрес ведомого, затем следуют два байта адреса данных, далее идет байт информации. Для записи данных в ячейку, показанную на скриншоте 2, картинка записи примет следующий вид.
На фигуре 3 из документов показана запись пакета данных.
Мы уже знаем, что на страницу можно записать только 32 байта данных, поэтому в коде программы должен быть организован счетчик записываемых байт. Иначе произойдет перезапись уже записанной информации.
Алгоритм чтения данных практически такой же, как записи. Добавлен код повторной передачи адреса ведомого с единичным битом чтения. Бит выделен красным цветом на фигуре 4. На этой фигуре показано считывание данных из одной ячейки памяти.
Последовательное чтение:
Последовательное чтение инициируется либо чтением текущего адреса, либо чтением специально выбранного адреса. После того как микроконтроллер получает байт данных, он отвечает подтверждением. Пока EEPROM получает подтверждение, он будет продолжать увеличивать адрес ячеек памяти и последовательно считывать данные последующих ячеек. Когда будет достигнут предел адреса памяти, счетчик адреса обнулится и последовательное чтение продолжится опять с нулевых ячеек. Операция последовательного чтения завершается, когда микроконтроллер не прижимает шину, а генерирует условие STOP (см. фигуру 6).
Таким образом, в режиме записи ячейки памяти организованы в 128 страниц — строк по 32 байта в каждой. И автоматически увеличиваемый счетчик адреса функционирует только в области строк, а при функции чтения счетчик функционирует, начиная с нулевой ячейки и до последней с адресом 0FFF или D’4095’.
На этом все. Успехов во всем К.В.Ю.