Arduino библиотека за управление на 24C02 / 24C02 Arduino Library
/kn34pc.com/справочник/...

Atmel AT24C02 - Two-wire Serial EEPROM 2K (256 x 8)

Features:

- Internally Organized 256 x 8 (2K)
- Two-wire Serial Interface
- Bi-directional Data Transfer Protocol
- 100 kHz (2,7V) and 400 kHz (5V) Compatibility
- Write Protect Pin for Hardware Data Protection
- 8-byte Page (2K) Write Modes
- Partial Page Writes are Allowed
- Self-timed Write Cycle (5 ms max)
- Endurance: 1 Million Write Cycles
- Data Retention: 100 Years

I2C address = 0x50 или 0x51 или 0x52 или 0x53 или 0x54 или 0x55 или 0x56 или 0x57 в зависимост от лог. ниво на адресните изводи A2, A1, A0

***


EEPROM 24C02 - тестова схема

***

Библиотека за управление на EEPROM 24C02 под Arduino / EEPROM 24C02 Arduino Library:
at24c02_lib_v0.2.zip

Библиотеката записва данни САМО побитово (BYTE WRITE). Режим PAGE WRITE не е реализиран.

В тестовата схема към I2C шината са свързани (Arduino TWI) вътрешните pull-up резистори на микроконтролера (20..50 kΩ). При друга конфигурация (физическа дължина на шината, скорост, брой устройства, паразитен капацитет) при необходимост да се монтират външни 1..10 kΩ pull-up резистори към Vcc.

***

Library constructor:

at24c02(uint8_t);

I2C address, в зависимост от лог. ниво на адресните изводи A2, A1, A0

Напр. при A2(GND), A1(GND), A0(GND) -> I2C address = 0x50

EEPROM 24C02: Arduino I2C Scanner

***

Публични функции и процедури:

void init();
инициализация на библиотеката

I2C шината може да работи на честота 100 kHz (по подразбиране) и на 400 kHz.

За работа на 400 kHz е необходимо след инициализацията да се добави стандартната Arduino функция за управление на TWI:
Wire.setClock(400000L);


uint8_t
read(uint8_t m_addr);
чете съдържанието на клетка с адрес m_addr

void write(uint8_t m_addr, uint8_t m_data);
записва клетка на адрес m_addr с данни m_data

void update(uint8_t m_addr, uint8_t m_data);
чете клетка и записва върху нея данни само при разлика (виж EEPROM endurance)

***

След запис I2C шината трябва да остане в технологично време на покой преди началото на следващата операция. В документацията това време twr (Write Cycle Time, табл. 5, стр. 5 от [1]) варира от 5..10 ms в зависимост от конкретния производител (при по-стари EEPROM интегрални схеми съм срещал 10 ms).

В библиотеката съм добавил 5 ms, като досега не съм имал проблем с реакцията на ИС. За конкретни случаи (напр. при друг производител) twr може да се увеличи.

(Друг е въпроса какво се случва при липса на такова време в покой: По време на тестовете си понякога небрежно пропусках delay(5). При последователен запис на данни в няколко съседни клетки запис просто не се извършваше!).


EEPROM разполага с ограничен ресурс по отношение броя записи (EEPROM endurance), който варира в зависимост от производителя (100K ... 4M) и пряко зависи от начина на експлоатация: захранващо напрежение, температура и др. На реална, стайна температура и при нормални експлоатационни условия (съобразени с работните режими по спецификация) броят на записите в EEPROM е x5 .. x10 (и повече).

Реално времето до първи отказ на EEPROM надхвърля това на устройството като цяло, но би трябвало още при проектиране да се избегнат някои неблагоприятни действия като многократни записи на данни (напр. през кратки интервали от време).

Оптимизация на алгоритмите на устройството при запис на данни в EEPROM е добре да се извърши предварително с цел удължаване живота на паметта (напр. архивен запис на данни да се извършва само при смяна на режими, обхвати, състояния, при изключване на устройството и др.). Не, че цената на ИС е висока, а понякога подмяната на самата интегрална схема по печатната платка е възпрепятствано от непреодолими пречки (напр. SMD корпус, запоен на основна платка, намираща се на неподходящо място в корпуса на устройството).

Темата за EEPROM endurance ми е интересна и е повод за разглеждане в друга, отделна статия.

***

Пример 1: Четене, изтриване и запис (със случайни данни) на клетки в EEPROM 24C02
at24c02_rbx.zip

Пример-1 използвам за бърз тест на работоспособността на интегралната схема и контрол на съдържанието в паметта.

Функциите са достъпни през Arduino Serial Monitor. Скорост: 57 600 бода.

***
r - четене на данни от цялото адресно пространство

***
b - изтриване (запис с 0xFF) на клетките в EEPROM (и последващо автоматично четене за визуална проверка на състоянието)

***
x - запис на всички клетки в адресното пространство с псевдо-случайни данни (и последващо автоматично четене за визуална проверка на състоянието)

Забележка: Програмният код (или части от него) е за некомерсиално използване!

Препратки и материали:
1. AT24C02, Atmel - Two-wire Serial EEPROM 2K (256 x 8 bits) [pdf][393kb]
2. M24C02-W, ST - 2-Kbit serial I²C bus EEPROM [pdf][570kb]
3. X24C02, Xicor - Serial E2PROM [pdf][66kb]
4. Arduino I2C Scanner [zip,ino][1kb]

LZ2WSG, Силистра
25 октомври 2018 година