
Микросхема AT24C04BN – это энергонезависимая память EEPROM с интерфейсом I²C, объёмом 4 Кбит (512 байт) и организацией 512×8. Работает в диапазоне напряжений от 1.7 В до 5.5 В, что делает её совместимой с большинством микроконтроллеров, включая AVR, STM32 и ESP8266/ESP32. Максимальная тактовая частота шины I²C – 400 кГц в стандартном режиме и 1 МГц в быстром. Для корректной работы требуется подтяжка линий SDA и SCL к питанию через резисторы 4.7 кОм (при напряжении 5 В) или 2.2 кОм (при 3.3 В).
Перед началом работы убедитесь, что линии I²C не нагружены паразитными ёмкостями свыше 400 пФ – это критично для стабильной передачи данных. При подключении к микроконтроллеру используйте короткие провода (до 20 см) и экранирование при необходимости. Для инициализации шины на Arduino достаточно библиотеки Wire.h, а на STM32 – HAL_I2C. Пример кода для записи байта по адресу 0x10:
Wire.beginTransmission(0x50);
Wire.write(0x10);
Wire.write(0xAA);
Wire.endTransmission();
При чтении данных не забывайте о задержке между операциями записи и чтения – микросхема требует 5 мс на внутреннее программирование. Для проверки подключения используйте сканер I²C-устройств или осциллограф для анализа сигналов на линиях SDA/SCL. В случае ошибок проверьте питание, подтягивающие резисторы и правильность адресации.
Необходимые компоненты и инструменты для работы с At24c04bn

Схема подключения микросхемы к Arduino или другому микроконтроллеру

Настройка питания и подтягивающих резисторов для шины I2C

Микросхема AT24C04BN работает при напряжении питания от 1.7 В до 5.5 В, но для стабильной работы шины I2C рекомендуется использовать диапазон 3.3–5 В. При питании 5 В подтягивающие резисторы на линиях SDA и SCL выбираются в пределах 2.2–10 кОм, оптимальное значение – 4.7 кОм. Для 3.3 В сопротивление снижается до 1.5–4.7 кОм (рекомендуется 2.2 кОм), чтобы компенсировать меньший логический уровень. Превышение 10 кОм увеличивает время нарастания сигнала, что может вызвать ошибки передачи, особенно при высоких скоростях (400 кГц и выше).
При подключении нескольких устройств на шине суммарная емкость линий не должна превышать 400 пФ. Для длинных проводов (>30 см) или большого количества устройств (>5) сопротивление резисторов уменьшают до 1–2.2 кОм, а при необходимости используют активные подтяжки (например, на транзисторах) или буферные микросхемы (PCA9615). Избегайте параллельного подключения резисторов на разных устройствах – это приводит к неравномерному распределению тока и сбоям. Проверяйте осциллографом форму сигнала на SDA/SCL: время нарастания не должно превышать 300 нс для стандартного режима (100 кГц) и 120 нс для быстрого (400 кГц).
Инициализация библиотеки Wire и проверка связи с микросхемой
Библиотека Wire в Arduino IDE обеспечивает работу с I²C-интерфейсом, необходимым для взаимодействия с AT24C04BN. Подключите её в начале скетча директивой #include <Wire.h>. Инициализация выполняется в функции setup() вызовом Wire.begin() без параметров, если микроконтроллер выступает мастером. Для устройств с аппаратной поддержкой I²C (например, Arduino Uno на пинах A4/SDA и A5/SCL) дополнительная настройка не требуется.
Тестовый скетч для проверки связи может выглядеть так: отправка одного байта на произвольный адрес памяти (например, 0x00) с последующим чтением. Используйте Wire.write(0x00) для указания адреса и Wire.requestFrom(0x50, 1) для запроса данных. Если Wire.available() возвращает 1, связь работает. В противном случае проверьте логические уровни сигналов осциллографом или логическим анализатором.
При работе с AT24C04BN учитывайте особенности адресации: микросхема имеет 512 байт памяти, разделённых на два блока по 256 байт. Для доступа ко второму блоку установите старший бит адреса (например, 0x0100 вместо 0x00). Это реализуется через отправку двух байт адреса: первый байт – 0x00 или 0x01 (номер блока), второй – смещение внутри блока. Неправильная адресация приведёт к записи/чтению неверных данных.
Если связь не устанавливается даже при корректном подключении, попробуйте снизить тактовую частоту I²C. По умолчанию Wire использует 100 кГц, но для длинных линий или зашумлённой среды установите Wire.setClock(50000) в setup(). Также проверьте совместимость уровней напряжения: AT24C04BN работает с логикой 5 В, но при подключении к 3.3-вольтовым устройствам (например, ESP8266) используйте преобразователь уровней или подтягивающие резисторы к 3.3 В.
Запись данных в EEPROM: адресация и формат команд
Формат команды записи включает:
- Стартовый бит (START condition).
- Управляющий байт:
1 0 1 0 A2 A1 A0 R/W, гдеA2иA1– аппаратные адреса (для AT24C04BNA2игнорируется,A1определяет старший бит адреса),R/W=0. - Байт адреса ячейки (0x00–0xFF для страниц 0–255, 0x00–0xFF для страниц 256–511 с учетом A1).
- Данные для записи (1 байт или до 16 байт для страничной записи).
- Стоповый бит (STOP condition) после завершения передачи.
При страничной записи микросхема требует паузы не менее 5 мс между командами для внутренней обработки. Для проверки успешности записи используйте команду чтения с верификацией.
Чтение данных из памяти At24c04bn с примерами кода

Микросхема At24c04bn поддерживает чтение данных в двух режимах: последовательном и произвольном. Для последовательного чтения достаточно отправить стартовый бит, адрес устройства (0xA0 для записи, 0xA1 для чтения) и принимать байты до отправки стоп-бита. Произвольное чтение требует предварительной записи адреса ячейки памяти: сначала отправляется адрес устройства (0xA0), затем адрес ячейки (1 байт для At24c04bn), после чего повторяется стартовый бит и адрес устройства в режиме чтения (0xA1).
Пример кода для Arduino (используя библиотеку Wire):
- Последовательное чтение 8 байт с адреса 0x00:
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); } void loop() { Wire.beginTransmission(0x50); // Адрес устройства (0xA0 >> 1) Wire.write(0x00); // Начальный адрес Wire.endTransmission(); Wire.requestFrom(0x50, 8); // Запрос 8 байт while (Wire.available()) { Serial.print(Wire.read(), HEX); Serial.print(" "); } delay(1000); } - Произвольное чтение одного байта с адреса 0x1F:
byte readByte(uint8_t addr) { Wire.beginTransmission(0x50); Wire.write(addr); Wire.endTransmission(); Wire.requestFrom(0x50, 1); return Wire.read(); }
Убедитесь, что тактовая частота I²C не превышает 400 кГц для стабильной работы. При ошибках проверьте подтягивающие резисторы на линиях SDA/SCL (рекомендуемое значение – 4.7 кОм).
Обработка ошибок и диагностика неисправностей при работе
При работе с AT24C04BN частые ошибки связаны с нарушением протокола I²C или некорректным подключением. Если микросхема не отвечает на запросы, проверьте следующие параметры: уровень напряжения питания (должен быть в пределах 1.7–5.5 В), правильность подключения линий SDA и SCL (включая подтягивающие резисторы 4.7–10 кОм), а также отсутствие коротких замыканий. Используйте логический анализатор или осциллограф для проверки сигналов: на SDA и SCL должны быть четкие фронты без дребезга. Если микросхема игнорирует команды записи, убедитесь, что бит ACK возвращается после каждого байта – его отсутствие указывает на проблемы с адресацией или физическим подключением.
Для диагностики неисправностей выполните следующие шаги:
- Проверьте адрес устройства: AT24C04BN использует 7-битный адрес
0x50(или0x51, если старший бит A2=1). Убедитесь, что мастер отправляет корректный адрес с битом чтения/записи. - При сбоях чтения проверьте тайминги: задержка между операциями должна составлять не менее 5 мс для AT24C04BN. Используйте команду
i2cdetect(Linux) или аналоги для проверки видимости устройства на шине. - Если микросхема перегревается, отключите питание и проверьте отсутствие обратной полярности или превышения напряжения.
При повторяющихся ошибках замените микросхему – AT24C04BN не имеет встроенной защиты от статического электричества и чувствительна к неправильному обращению.
