Найти в Дзене
Электроника и жизнь

Последовательное соединение модулей памяти EEPROM. Увеличиваем объем EEPROM памяти до 512 КБ

Здравствуйте, уважаемые читатели! В данной статье поговорим о том как можно последовательно соединять модули внешней EEPROM памяти, записывать на них и считывать с них информацию при помощи Ардуино. На момент написания статьи, чип 24LC512, с объемом памяти 64 КБ, является самой старшей моделью в линейке чипов последовательной энергонезависимой памяти от компании Microchip (https://www.microchip.com/wwwproducts/en/24LC512). И объединить мы можем до 8 таких чипов. Таким образом, максимальный размер EEPROM памяти, который мы можем получить в результате такого соединения, составляет 64 * 8 = 512 КБ, т.е. целых полмегабайта энергонезависимой памяти. Почему именно 8 максимальное число чипов для объединения? Это связано с методом задания адреса каждого чипа. Для обращения к нему со стороны микроконтроллера, адрес каждого чипа должен быть уникальным. И этот адрес чипа мы задаем подключая пины A0, A1 и A2 к земле или к питании. Если пин подключен к земле, то в соответствующей пину позиции адрес

Здравствуйте, уважаемые читатели! В данной статье поговорим о том как можно последовательно соединять модули внешней EEPROM памяти, записывать на них и считывать с них информацию при помощи Ардуино. На момент написания статьи, чип 24LC512, с объемом памяти 64 КБ, является самой старшей моделью в линейке чипов последовательной энергонезависимой памяти от компании Microchip (https://www.microchip.com/wwwproducts/en/24LC512). И объединить мы можем до 8 таких чипов. Таким образом, максимальный размер EEPROM памяти, который мы можем получить в результате такого соединения, составляет 64 * 8 = 512 КБ, т.е. целых полмегабайта энергонезависимой памяти.

Характеристики чипа 24LC512
Характеристики чипа 24LC512

Почему именно 8 максимальное число чипов для объединения? Это связано с методом задания адреса каждого чипа. Для обращения к нему со стороны микроконтроллера, адрес каждого чипа должен быть уникальным. И этот адрес чипа мы задаем подключая пины A0, A1 и A2 к земле или к питании. Если пин подключен к земле, то в соответствующей пину позиции адреса появляется 0, а если к , то единица. И так как пинов у нас всего 3, то различных вариантов адресов может быть всего 8.

Пины модуля памяти для задания адреса чипа
Пины модуля памяти для задания адреса чипа

Для примера возьмем 3 модуля памяти разного номинала. Первый чип 24LC02 имеет объем памяти 256 байт. Второй чип 24LC32 объемом памяти 4 килобайта. И третий чип 24LC512 объемом памяти 64 КБ.

Размещаем чипы на макетной плате по следующей схеме:

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

Первый чип, 24LC02 объемом 256 байт, подключаем так же как мы разбирали в статье (Подключение внешней памяти EEPROM к Ардуино). Т.е. пины с 1 по 3 к земле, что дает нам привычный адрес чипа 0x50 в 16-ричной системе. Пин 5 (SDA) и 6 (SCL) подключаем к пинам A4 и A5 Arduino UNO, соответственно.

У второго чипа 24LC16 к земле подключим пины 2 и 3. А пин 1 подключим к плюсу макетной платы. Это даст нам адрес 0x51.

А у третьего чипа 24LC512 к земле подключим только пины 1 и 3, а пин 2 подключим к плюсу макетной платы. Это даст нам адрес 0x52.

Как влияет подключение модуля памяти на его адрес
Как влияет подключение модуля памяти на его адрес

Естественно пин 4 у нас во всех случаях подключен к земле, т.к. этот пин адрес не задает и всегда подключается к земле. Равно как и пин номер 8 всегда подключается к питанию или в данном случае к плюсу макетной платы.

Отдельно подключать пины передачи данных SDA и SCL каждого модуля памяти к пинам микроконтроллера не нужно. Т.к. у нас последовательный интерфейс, и благодаря тому, что у нас каждый модуль памяти имеет уникальный адрес, микроконтроллер разберется куда что писать. Так что к 4 и 5 аналоговому пину Ардуино мы подключаем только пины первого модуля памяти. А далее последовательно соединяем одинаковые пины модулей памяти. SDA одного с SDA другого и так же с SCL.

Для проверки записи данных воспользуемся следующим скетчем (ссылка на скетч в конце статьи):

Функция записи одного байта в выбранный чип EEPROM
Функция записи одного байта в выбранный чип EEPROM

После подключения библиотеки Wire, определим константы с адресами каждого из модулей, соответствующие схеме его подключения. И далее идет функция, в которой мы записываем 1 байт данных, в указанный адрес памяти выбранного чипа. Важным моментом является проверка, что речь идет о первом чипе, с адресом 0x50. Т.к. у модулей объемом памяти 256 байт и менее, адрес ячейки памяти, в которую мы будем производить запись (и последующее чтение), задается при помощи всего одного байта. Т.е. в этом случае, у нас будет всего одна строка Wire.write().

Далее идет функция чтения одного байта из выбранного модуля памяти.

Функция чтения одного байта из выбранного чипа EEPROM
Функция чтения одного байта из выбранного чипа EEPROM

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

Запись и чтение из EEPROM
Запись и чтение из EEPROM

Загружаем скетч, открываем Монитор порта, и видим, что правильно выводятся записанные в каждый из модулей EEPROM значения:

Монитор порта
Монитор порта

А значит всё мы подключили правильно и запись прошла успешно.

Ссылка на скетч - https://disk.yandex.ru/d/rCKleLca-jw72w

Продолжение статьи >>>>>> Запись больших объемов данных в несколько чипов EEPROM

_________________________________________________________

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

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