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 | Температура |
|---|---|---|---|
| 24LC256 | 2,5–5,5 В | до 400 кГц | −40…85 °C или −40…125 °C |
| 24AA256 | 1,7–5,5 В | до 400 кГц, при питании ниже 2,5 В — 100 кГц | −40…85 °C или −40…125 °C |
| 24FC256 | 1,7–5,5 В | до 1 МГц, при питании ниже 2,5 В — 400 кГц | −40…85 °C |
| BR24G256xxx-5 | 1,6–5,5 В | до 1 МГц | −40…85 °C |
Широкий диапазон питания позволяет подключать эти микросхемы и к 5-вольтовым, и к 3,3-вольтовым микроконтроллерам без согласования уровней — при условии, что EEPROM питается от того же напряжения, что и микроконтроллер.
Выводы
У корпусов SOIC-8, TSSOP-8 и других 8-выводных корпусов назначение выводов одинаковое (24LC256, табл. 2-1):
| Вывод | Назначение |
|---|---|
| 1, 2, 3 | A0, A1, A2 — адрес микросхемы на шине |
| 4 | VSS — общий |
| 5 | SDA — данные |
| 6 | SCL — тактовый сигнал |
| 7 | WP — защита от записи |
| 8 | VCC — питание |
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 байта, поэтому ресурс считается на страницу: часто меняющиеся значения, например счётчики, разносят по разным страницам.
Источники
- 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 (чтение по текущему адресу, произвольное и последовательное)
- 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
Нашли ошибку?
Смотрите также
- Микросхемы памятиSPI-флеш и EEPROM: устройство, команды, выбор
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- Подтягивающие резисторы I²CДиапазон Rp по напряжению, скорости и ёмкости шины
- Транзакция I²C по байтамБайт адреса, ACK и NACK, повторный START, диаграмма и код
- SPI-флеш-памятьВыводы, страницы и секторы, команды, статус BUSY, время записи и стирания