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

Atmel AT24C01 - Two-wire Automotive Serial EEPROM 1K (128 x 8)

Features:

- Internally Organized 128 x 8 (1K)
- 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 (1K) 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

***


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

***

За тестови програми с Arduino, като за лесен монтаж върху breadboard-а, съм си сглобил модулчета с EEPROM 24C01, 24C02, 24C04, част от непотребна платка (комп. IDE шина) и контактни рейки.

В тази си конфигурация смяната при необходимост на модулчетата EEPROM считам за скоростна и ефективна, а и не на последно място за нивото на удоволствие при сглобяването и удовлетвореност от самоделните ни устройства: намирам приложение на електронни компоненти - втора употреба, свалени от отдавна излезли от експлоатация устройства .


LZ2WSG, модулче EEPROM 24LC01B - тестова схема

***

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

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

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

***

Library constructor:

at24c01(uint8_t);
При 24C01: I2C address = 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57 в зависимост от лог. ниво на адресните изводи A2, A1, A0
Напр. при A2(GND), A1(GND), A0(GND) -> I2C address = 0x50

При 24LC01B: I2C address = 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57 (EEPROM отговаря на осемте адреса едновременно)
Напр. I2C address = 0x50

EEPROM 24LC01B: 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 може да се увеличи.

***

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

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

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

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

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

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

Препратки и материали:
1. AT24C01, Atmel - Two-wire Automotive Serial EEPROM 1K (128 x 8) [pdf][621kb]
2. 24AA01/24LC01B, Microchip - 1K I2C Serial EEPROM [pdf][339kb]
3. Arduino I2C Scanner [zip,ino][1kb]

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