Сегодня мы рассмотри пример использования EEPROM 24LC256 совместно с Ардуино. Подключив этот чип к Ардуино, мы с легкостью можем увеличить доступную память на 32 КБ.
Технические характеристики 24LC256
Ниже представлены характеристики микросхемы внешней памяти 24LC256 от Microchip:
- Тип памяти: EEPROM
- Объем памяти: 256Kбит (32K x 8)
- Максимальная частота: 400kHz
- Время доступа: 900нс
- Ток потребления: чтение 3мА / режим ожидания 1 мкА
- Интерфейс подключения: I2C, 2-Wire Serial
- Защита от электростатического разряда: > 4000 В
- Выносливость: 1000000 циклов запись / стирание
- Напряжение питания: 2,5 В…5,5 В
- Рабочая температура: -40°C… 85°C
Распиновка 24LC256
Назначение выводов
- A0…A2 — установка адреса устройства. В большинстве случаев используется 000.
- Vss — земля
- SDA — Serial Address/Data I/O
- SCL — Serial Clock Input
- WP — вход защиты от записи
- Vcc — источник питания
В нашем случае мы подключим выводы A0, A1 и A2 к земле, таким образом, на них будет низкий логический уровень. Это означает, что адресные выводы будут иметь значение 000, а адрес I2C будет равен 0x50.
Если на выводы A0, A1 и A2 подать высокий уровень (111), то адрес I2C будет равен 0x57. Соответственно перебрав все комбинации, мы можем получить 8 адресов I2C.
Подключение 24LC256 к Ардуино
- Контакт SDA (вывод 5) EEPROM подключим к аналоговому выводу 4 Arduino.
- Контакт SCL (вывод 6) EEPROM подключим к аналоговому выводу 5 Arduino.
- Контакт WP — это вывод защиты от записи. Подав на этот вывод высокий уровень, вы запретите запись в EEPROM. В нашем случае мы соединим его с GND.
- К линиям SDA и SCL подключим подтягивающие резисторы сопротивлением по 10 кОм.
Вся схема подключения должна выглядеть следующим образом:
Можно использовать следующий модуль, у которого есть перемычки для установки адреса I2C и линии WP. Он также имеет подтягивающие резисторы по шине I2C.
Вот, можете взглянуть на принципиальную схему данного модуля, возможно, кто-то захочет собрать нечто подобное:
Давайте посмотрим на простой пример кода, который будет записывать некоторые данные в EEPROM и считывать их снова. В процессе выполнения кода вы можете увидеть считанные данные в мониторе последовательного порта.
#include <Wire.h> // для I2C #define eeprom_address 0x50 // адрес устройства byte d=0; void setup() { Serial.begin(115200); // Инициализация последовательного порта Wire.begin(); // запись данные Serial.println("Writing data."); for (int i=0; i<10; i++) { writeData(i,i); } Serial.println("Complete"); // чтение данных Serial.println("Reading data."); for (int i=0; i<10; i++) { Serial.print(i); Serial.print(" : "); d=readData(i); Serial.println(d, DEC); } Serial.println("Complete"); } // запись байта данных в адрес ячейки памяти void writeData(unsigned int eaddress, byte data) { Wire.beginTransmission(eeprom_address); // установить положение указателя Wire.write((int)(eaddress >> 8)); Wire.write((int)(eaddress & 0xFF)); Wire.write(data); Wire.endTransmission(); delay(10); } // чтение байт данных из адреса ячейки памяти byte readData(unsigned int eaddress) { byte result; Wire.beginTransmission(eeprom_address); // установить положение указателя Wire.write((int)(eaddress >> 8)); Wire.write((int)(eaddress & 0xFF)); Wire.endTransmission(); Wire.requestFrom(eeprom_address,1); // получить байт данных result = Wire.read(); return result; } void loop() { }
После загрузки скетча вы должны увидеть в мониторе последовательного порта следующее: