Найти тему
Электроника и жизнь

Подключение внешней памяти EEPROM к Ардуино

Оглавление

Здравствуйте, уважаемые читатели! В прошлой статье «Работа с энергонезависимой памятью EEPROM на Ардуино» я на примере Arduino UNO рассказывал, как работать с памятью EEPROM. А в этой статье хочу рассказать, как подключить к Ардуино и работать с внешней памятью EEPROM, представленной в виде чипа 24LC512 в DIP-корпусе. Цифра 512 означает, что размер памяти модуля 512 килобит, т.е. 64 килобайта. Что в 64 раза превосходит объем встроенной EEPROM-памяти Arduino UNO. Это старшая модель в линейке чипов последовательной энергонезависимой памяти от компании Microchip (https://www.microchip.com/wwwproducts/en/24LC512). Есть модели с объемом памяти 256 килобит (32 килобайта), 64 килобита (8 килобайт) и менее.

Модуль памяти EEPROM 24LC512
Модуль памяти EEPROM 24LC512

Подобный модуль будет полезен, когда не хватает встроенной EEPROM памяти микроконтроллера. Либо она вовсе отсутствует (как у многих микроконтроллеров семейства PIC, о которых мы поговорим в дальнейших статьях). Внешнюю память большого объема, такую как 24LC512, можно использовать в качестве замены SD-карты. Когда подключение кардридера к микроконтроллеру не целесообразно (или не возможно, вследствие его характеристик).

Например, можно хранить достаточно большую статистику от различных датчиков и ее основе выбирать оптимальный режим работы устройства. Или хранить массивы шрифтов, иконок, картинок для дисплеев и светодиодных матриц.

Характеристики модуля памяти 24LC512

Характеристики модуля памяти 24LC512
Характеристики модуля памяти 24LC512

Из характеристик с сайта производителя видно, что модуль поддерживает питание от 2,5 до 5,5 В, до миллиона циклов записи/удаления и до 200 лет хранения записанных данных!!!

Более подробно со всеми характеристиками модуля памяти можно ознакомиться в описании к нему на сайте производителя - http://ww1.microchip.com/downloads/en/DeviceDoc/21754M.pdf.

Далее по тексту я буду приводить выдержки из этого PDF-файла.

Распиновка модуля памяти 24LC512

Распиновка модуля памяти 24LC512 выглядит следующим образом:

Распиновка модуля памяти 24LC512
Распиновка модуля памяти 24LC512

A0, A1 и A2 – служат для задания адреса модуля, по которому к нему будут обращаться подключенные устройства. Подача высокого уровня сигнала (3,3 – 5 В) на любой из входов соответствует логической единице, низкого уровня сигнала (подключение к земле) – нулю.

4-я ножка (GND) и 8-я ножка (VCC) подключаются к земле и к плюсу питания соответственно.

WP – защита от записи. При подаче питания на данный вход, запись в память не производится, а только чтение. Для работы режима чтение/запись данный вход должен быть подключен к земле.

SCL и SDA – для обмена данными.

Подключение внешней памяти EEPROM к Ардуино

Подключение модуля внешней памяти осуществляется согласно следующей схеме:

Схема подключения внешней памяти EEPROM к Ардуино
Схема подключения внешней памяти EEPROM к Ардуино

Как уже отмечалось выше пины A0, A1 и A2 отвечают за задание адреса чипа, по которому будет обращаться микроконтроллер.

Как задать адрес чипа памяти
Как задать адрес чипа памяти

Первые 4 бита постоянные, а значение следующих 3-х как раз и соответствует уровню сигнала на пинах А2, А1 и А0.

Таким образом, соединяя все три пина с землей, получаем адрес 10100000, что соответствует 0x50 в шестнадцатеричной системе исчисления.

Соединяя пин A0 с питанием, а остальные с землей, получаем адрес 10100001 (0x51). A1 с питанием, остальные с землей, адрес 10100010(0x52). И так далее.

Зависимость адреса чипа от варианта подключения
Зависимость адреса чипа от варианта подключения

Таким образом, можно последовательно соединить до 8 модулей памяти, у каждого из которых будет свой адрес, по которому к нему будет обращаться микроконтроллер. И при использовании чипа 24LC512 получить в сумме полмегабайта памяти EEPROM!

В частном случае, при подключении только одного модуля памяти EEPROM к микроконтроллеру, будем использовать схему подключения всех контактов A0, A1 и A2 к земле.

4-й и 8-й контакт модуля памяти подключаем к минусу и плюсу макетной платы соответственно. А 5-й (SDA) и 6 пин (SCL) к пинам A4 и A5 Arduino UNO.

Подключение внешней памяти к Arduino UNO на макетной плате
Подключение внешней памяти к Arduino UNO на макетной плате

Пины, которые отвечают за работу с интерфейсом I2C у различных моделей семейства Ардуино, представлены в таблице расположенной ниже.

Пины I2C у различных моделей Ардуино
Пины I2C у различных моделей Ардуино

Либо можно использовать специальные пины, отмеченные на плате как SDA или SCL. У Arduino UNO это пины, ближайшие к кнопке RESET.

Пины SDA и SCL у Arduino UNO
Пины SDA и SCL у Arduino UNO

Пины передачи данных SCL и SDA должны быть соединены подтягивающим резистором на 10 кОм с питанием.

Чтение и запись данных во внешнюю память EEPROM

Для записи и чтения данных во внешнюю память EEPROM будем использовать интерфейс I2C, который позволяет по двум проводам обмениваться данными с различными датчиками, модулями и устройствами. На схемах линии обозначаются следующим образом: SDA (данные) и SCL (тактовые импульсы).

Для работы будем использовать библиотеку Wire.h. Она как раз и предназначена для передачи данных, с использованием I2C-интерфейса. Дополнительно устанавливать ее не нужно, она присутствует в стандартных библиотеках Arduino IDE.

Библиотека Wire.h в Arduino IDE
Библиотека Wire.h в Arduino IDE

Ниже размещен скетч с примером записи данных во внешнюю энергонезависимую память. Ссылка, по которой можно скачать этот скетч, размещена в конце статьи.

Скетч записи и чтения во внешнюю энергонезависимую память EEPROM
Скетч записи и чтения во внешнюю энергонезависимую память EEPROM

Вначале, подключаем библиотеку Wire.h. Далее определяем константу EEPROM_ADDRESS, в которую записываем адрес модуля памяти. Как мы определили выше, в соответствие с нашим подключением, это будет адрес 0x50. Потом задаем адрес ячейки, в которую будем производить запись. В нашем случае значение может быть от 0 до 65536. И значение переменной (от 0 до 255), которое будет записано по данному адресу.

После этого проводим инициализацию библиотеки Wire.h и Монитора порта.

Теперь переходим к блоку записи данных в память EEPROM.

Начинаем передачу данных, указывая в качестве аргумента функции Wire.beginTransmission(EEPROM_ADDRESS)адрес внешней памяти.

Далее, для записи 1 байта данных, нам фактически нужно передать в подключенный чип памяти 3 байта: 2 из которых будут задавать адрес(номер ячейки), куда будет размещен байт данных, а третий байт – сами данные.

С учетом того, что размер памяти чипа 24LC512 составляет 64 килобайта, т.е. 64 * 1024 = 65536 байт, адрес нужной ячейки памяти можно задать только с помощью 2 байт.

Собственно, эта информация присутствует в сопроводительной документации к модулю памяти:

Адресные байты модуля памяти
Адресные байты модуля памяти

И завершаем передачу с использованием функции Wire.endTransmission().

Перед началом следующей записи или чтения, с помощью функции delay(5), устанавливаем рекомендуемою производителем задержку в 5 мс.

Пятисекундная задержка записи
Пятисекундная задержка записи

Чтение осуществляется схожим образом, только после передачи 3-х контрольных байт (адреса чипа и адреса ячейки для чтения), мы завершаем передачу данных. После этого отправляем запрос на получение 1 байта от подключенного модуля памяти Wire.requestFrom(EEPROM_ADDRESS, 1) и записываем это значение в переменную data. После этого выводим значение адреса и записанных в него данных в Монитор порта.

Результат работы скетча в Мониторе порта
Результат работы скетча в Мониторе порта

В следующей статье продолжим работу с внешней памятью EEPROM и будем использовать функции для более удобной работы при чтении и записи в энергонезависимую память больших объемов информации.

А в дальнейшем разберем подключение внешней памяти EEPROM к микроконтроллерам семейства ATtiny. Там есть свои особенности. Т.к. у этого семейства очень маленький размер внутренней энергонезависимой памяти, то подключение внешней памяти будет еще более актуально, чем для микроконтроллеров семейства Ардуино.

Ссылка на скетч для работы с внешней памятью EEPROM - https://yadi.sk/d/xrJqKHBNFVHjZg.

Даташит модуля памяти 24LC512 - http://ww1.microchip.com/downloads/en/DeviceDoc/21754M.pdf.

_________________________________________________________

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

Другие публикации по теме: