Перейти к содержанию

EEPROM с шиной I²C на примере 24LC256 и BR24G256

Микросхемы EEPROM серии 24 — 24C02, 24LC256 и их аналоги — хранят настройки, калибровки и счётчики и подключаются к микроконтроллеру двумя линиями шины I²C. Разбираем по даташитам Microchip 24AA256/24LC256/24FC256 и ROHM BR24G256, как задать адрес микросхемы, записать байт и страницу, дождаться конца записи и прочитать данные.

Обновлено Редакция GAW

EEPROM серии 24 — последовательная электрически стираемая память с шиной I²C. Её выпускают многие производители: 24AA, 24LC и 24FC у Microchip, BR24 у ROHM и другие; у 24LC256 и BR24G256 число 256 в названии — объём в килобитах. В отличие от SPI-флеш-памяти, EEPROM не требует отдельной команды стирания: байт или страница перезаписываются сразу, поэтому в ней удобно хранить настройки и калибровки. Ниже — по даташитам 256-килобитных 24AA256/24LC256/24FC256 (Microchip) и BR24G256 (ROHM).

Варианты и питание

Объём всех трёх — 256 Кбит, то есть 32 768 байт; различаются они напряжением питания и частотой шины:

МикросхемаПитаниеЧастота SCLТемпература
24LC2562,5–5,5 Вдо 400 кГц−40…85 °C или −40…125 °C
24AA2561,7–5,5 Вдо 400 кГц, при питании ниже 2,5 В — 100 кГц−40…85 °C или −40…125 °C
24FC2561,7–5,5 Вдо 1 МГц, при питании ниже 2,5 В — 400 кГц−40…85 °C
BR24G256xxx-51,6–5,5 Вдо 1 МГц−40…85 °C

Широкий диапазон питания позволяет подключать эти микросхемы и к 5-вольтовым, и к 3,3-вольтовым микроконтроллерам без согласования уровней — при условии, что EEPROM питается от того же напряжения, что и микроконтроллер.

Выводы

У корпусов SOIC-8, TSSOP-8 и других 8-выводных корпусов назначение выводов одинаковое (24LC256, табл. 2-1):

ВыводНазначение
1, 2, 3A0, A1, A2 — адрес микросхемы на шине
4VSS — общий
5SDA — данные
6SCL — тактовый сигнал
7WP — защита от записи
8VCC — питание

SDA — выход с открытым стоком, поэтому шине нужен подтягивающий резистор к питанию. Microchip приводит типичные значения: 10 кОм для 100 кГц и 2 кОм для 400 кГц и 1 МГц (24LC256, 2.2); точное значение для своей ёмкости шины можно рассчитать в калькуляторе подтяжки I²C. Выводы A0–A2 у Microchip нужно соединить с землёй или питанием, а у ROHM BR24G256 они подтянуты к земле внутри, и неподключённый вывод считается нулём. Вывод WP соединяют с землёй, если запись нужна, и с питанием, если память должна работать только на чтение. У Microchip в корпусе MSOP выводов A0 и A1 нет, и на одной шине можно поставить только две такие микросхемы.

Адрес на шине

Первый байт после условия Start — управляющий (control byte, у ROHM — slave address):

1  0  1  0  A2 A1 A0 R/W

Код 1010 у EEPROM серии 24 постоянный, A2–A1–A0 должны совпадать с уровнями на одноимённых выводах, а бит R/W выбирает запись (0) или чтение (1). Три бита адреса позволяют поставить на одну шину до восьми микросхем — для 24XX256 это до 2 Мбит общего адресного пространства (24LC256, 5.0 и 5.1). В 7-битной записи адреса, которую используют библиотеки I²C, получаются значения от 0x50 (все выводы A — на земле) до 0x57.

После управляющего байта записи передаётся адрес ячейки — два байта, старший первым. Из 16 бит используются 15 (A14–A0), старший бит игнорируется. Разложить транзакцию на биты и подтверждения можно в конструкторе транзакции I²C.

Запись байта и страницы

Запись байта: Start, управляющий байт с R/W = 0, старший и младший байт адреса, байт данных, Stop. По условию Stop микросхема начинает внутренний цикл записи длительностью до 5 мс и всё это время не отвечает ACK (24LC256, 6.1; BR24G256, Write Command).

Запись страницы: после первого байта данных можно передать ещё до 63 — всего 64 байта, — и все они запишутся одним циклом по Stop, тоже не дольше 5 мс. ROHM специально оговаривает: страница из 64 байт записывается за те же 5 мс, а не за 64 · 5 = 320 мс. При этом увеличиваются только шесть младших битов адреса, и если данные выходят за конец страницы, адрес возвращается к её началу — например, после 3Fh идёт 00h, а не 40h (BR24G256, Internal Address Increment; 24LC256, 6.2). Поэтому запись нужно делить по границам страниц: адресам, кратным 64.

Запись всей микросхемы — 32 768 / 64 = 512 страниц — занимает не больше 512 · 5 мс ≈ 2,6 с. Microchip отмечает, что при записи меньше 64 байт перезаписывается вся страница, и ресурс поэтому указан на страницу: более 1 000 000 циклов у 24LC256 и 4 млн у BR24G256, хранение данных — 200 лет.

Ожидание конца записи

Чтобы не ждать 5 мс вслепую, используют опрос ACK (acknowledge polling): сразу после Stop мастер посылает Start и управляющий байт записи. Пока идёт внутренний цикл, микросхема не отвечает ACK — тогда Start и управляющий байт повторяют; как только запись закончилась, приходит ACK, и можно продолжать (24LC256, разд. 7; BR24G256, Acknowledge Polling).

Защита от записи

Высокий уровень на выводе WP запрещает запись во весь массив, низкий — разрешает. Microchip уточняет, что при WP = 1 микросхема подтверждает команду записи, но не записывает данные, а сам вывод проверяется в момент Stop (24LC256, 6.3). У ROHM неподключённый WP считается низким уровнем, то есть запись разрешена; ROHM рекомендует держать WP в высоком уровне при включении и выключении питания, чтобы избежать ошибочной записи при низком напряжении (BR24G256, Write Protect).

Чтение

Чтение бывает трёх видов (24LC256, разд. 8):

  • По текущему адресу — Start и управляющий байт с R/W = 1: микросхема выдаёт байт по адресу, следующему за последним прочитанным или записанным.
  • Произвольное — сначала «записывают» только адрес (управляющий байт с R/W = 0 и два байта адреса), затем без Stop повторяют Start и управляющий байт с R/W = 1 и читают байт. Мастер не подтверждает последний байт и завершает обмен условием Stop.
  • Последовательное — как произвольное, но мастер подтверждает каждый принятый байт, и микросхема выдаёт следующие подряд; после адреса 7FFFh счётчик переходит к 0000h.

Последовательным чтением можно за одну транзакцию прочитать всю память: на 400 кГц каждый байт занимает 9 тактов, и 32 768 байт читаются примерно за 32 768 · 9 / 400 кГц ≈ 0,74 с. С завода память ROHM BR24G256 заполнена байтами FFh.

Частые вопросы

Какой адрес I²C у 24LC256 и 24C256?

Старшие четыре бита адреса всегда 1010, следующие три — уровни на выводах A2, A1, A0. В 7-битной записи, которую используют библиотеки вроде Wire в Arduino, это 0x50, если все три вывода соединены с землёй, и до 0x57, если все с питанием. Так на одну шину можно поставить до восьми таких микросхем. У ROHM BR24G256 выводы A0–A2 внутри подтянуты к земле и в неподключённом состоянии считаются нулями, у Microchip 24LC256 их нужно соединить с землёй или питанием.

Почему после записи в EEPROM микросхема не отвечает?

Она занята внутренним циклом записи: после условия Stop микросхема до 5 мс программирует ячейки и на это время перестаёт отвечать подтверждением ACK на свой адрес. Можно просто выждать 5 мс, а быстрее — опрашивать: посылать Start и управляющий байт записи, пока микросхема не ответит ACK (опрос ACK, или ACK polling).

Почему при записи больше 64 байт данные портятся?

Запись страницы ограничена одной физической страницей 64 байта: при каждом байте увеличиваются только шесть младших битов адреса. Если данные доходят до конца страницы, адрес возвращается к её началу и затирает то, что было записано в начале этой же команды. Поэтому длинные данные режут на части по границам страниц — адресам, кратным 64.

Сколько раз можно перезаписать EEPROM 24LC256?

По даташиту Microchip — более миллиона циклов записи, у ROHM BR24G256 — 4 миллиона, данные хранятся 200 лет. Microchip уточняет, что при записи даже одного байта перезаписывается вся страница 64 байта, поэтому ресурс считается на страницу: часто меняющиеся значения, например счётчики, разносят по разным страницам.

Источники

  1. Microchip. 24AA256/24LC256/24FC256 256K I2C Serial EEPROM. Data Sheet DS20001203W, 2019 — Features и Device Selection Table (питание и частота трёх вариантов, страница 64 байта, запись до 5 мс, более 1 000 000 циклов, хранение более 200 лет), табл. 1-2 (TWC), разд. 2 (выводы, подтягивающие резисторы SDA), 5 (управляющий байт 1010 A2 A1 A0 R/W, двухбайтовый адрес), 6 (запись байта и страницы, переход через границу страницы, WP), 7 (опрос ACK), 8 (чтение по текущему адресу, произвольное и последовательное)
  2. ROHM. BR24G256xxx-5 Series, I2C BUS EEPROM (2-Wire). Datasheet TSZ02201-0GGG0G100890-1-2, Rev.009, 01.04.2026 — Features и Key Specifications (1,6–5,5 В, 1 МГц, страница 64 байта, запись до 5 мс, 4 млн циклов, 200 лет, заводское состояние FFh), Device Addressing (код 1010), Write Command (запись страницы, инкремент шести младших битов адреса), Write Protect, Acknowledge Polling

Нашли ошибку?