Arduino библиотека за управление на 24C32 / 24C32 Arduino Library
/kn34pc.com/справочник/...
Atmel AT24C32 - Two-wire Serial EEPROM 32K (4096 x 8)
Features:
- Internally Organized 4096 x 8 (32K)
- 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 (32K) 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 24C32, а с китайски модул, изпълнен с RTC (serial Real-Time Clock) DS1307, EEPROM 24C32 и температурен сензор DS18B20.
![]() |
China module RTC DS1307 + EEPROM 24C32 + temp. sensor DS18B20 |
DS1307, 24C32 и DS18B20 са свързани на една захранваща шина, а DS1307 и 24C32: на обща I2C шина. Акумулаторът/батерията BAT1 (CR2032) са необходими само за RTC DS1307.
LZ2WSG: принципна ел . схема ("свалена" от печатната платка) на модул RTC
DS1307 + EEPROM 24C32 + DS18B20
(възможни са грешки и неточности!)
Arduino Nano и модул RTC DS1307 + EEPROM 24C32 +
DS18B20
***
Библиотека за управление на EEPROM 24C32 под Arduino / EEPROM 24C32 Arduino Library:
at24c32_lib_v0.2.zip
Библиотеката записва данни САМО побитово (BYTE WRITE). Режим PAGE WRITE не е
реализиран.
В тестовата схема с китайския модул към I2C шината са свързани вътрешните pull-up резистори на микроконтролера (Arduino TWI, 20..50 kΩ)
и съответно двата резистора R2, R3 в паралел. При
схема с ИС
24C32 външни pull-up резистори може
да не се свързват, а да се разчита на вътрешните резистори в микроконтролера.
***
Library constructor:
at24c32(uint8_t);
I2C address, в зависимост от лог. ниво на адресните изводи A2, A1, A0
Напр. при A2(GND), A1(GND), A0(GND) -> I2C address = 0x50 (при използвания
китайски модул: на I2C адрес 0x68 отговаря DS1307).
***
Публични функции и процедури:
void init();
инициализация на библиотеката
I2C шината може да работи на честота 100 kHz (по подразбиране) и на
400 kHz.
За работа на 400 kHz
е необходимо след инициализацията да се добави стандартната
Arduino функция за управление на TWI:
Wire.setClock(400000L);
uint8_t read(uint16_t m_addr);
чете съдържанието на клетка с адрес m_addr
void write(uint16_t
m_addr, uint8_t m_data);
записва клетка на адрес m_addr с данни m_data
void update(uint16_t
m_addr, uint8_t m_data);
чете клетка и записва върху нея данни само при разлика (виж EEPROM endurance)
***
След запис I2C шината трябва да остане в технологично време на покой преди
началото на следващата операция. В документацията това време twr
(Write Cycle Time, табл. 5, стр. 5 от
[1]) варира от 5..10
ms в зависимост от конкретния производител.
В библиотеката съм добавил 5 ms, като досега не съм имал проблем с
реакцията на ИС. За конкретни случаи (напр. при друг производител) twr
може да се увеличи.
***
Пример 1: Четене, изтриване и запис (със случайни данни) на клетки в EEPROM
24C32
at24c32_rbx.zip
Пример-1 използвам за бърз тест на работоспособността на интегралната схема и контрол
на съдържанието в паметта.
Функциите са достъпни през Arduino Serial Monitor. Скорост: 57 600 бода.
***
r - четене на данни от цялото адресно пространство
***
b - изтриване (запис с 0xFF) на клетките в EEPROM (и последващо автоматично
четене за визуална проверка на състоянието). Процесът е сравнително бавен поради
относително големия брой клетки за обработка.
***
x - запис на всички клетки в адресното пространство с псевдо-случайни данни (и
последващо автоматично четене за визуална проверка на състоянието). Процесът е
сравнително бавен поради относително големия брой клетки за обработка.
Забележка: Програмният код (или части от него) е за некомерсиално използване!
Препратки и материали:
1. AT24C32, Atmel - Two-wire
Serial EEPROM 32K (4096 x 8) [pdf][210kb]
2. Arduino I2C Scanner [zip,ino][1kb]
LZ2WSG, Силистра
31 октомври 2018 година