В статье описана организация дополнительной энергонезависимой памяти с интерфейсом I2C для 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics.
Память для любого микроконтроллера является важным обязательным компонентом. От объёма оперативной памяти зависит количество организуемых в программе переменных, массивов данных и стека подпрограмм. Однако оперативная память не способна хранить информацию без питания, т.е. при выключении устройства все данные теряются. Для постоянного хранения данных применяется энергонезависимая память. В качестве неё может выступать память программ, память внешних носителей или электрически перепрограммируемая постоянная память EEPROM. Микроконтроллеры серии STM32 [1] не имеют встроенной памяти EEPROM, тем не менее её можно организовать с помощью подключения внешней микросхемы энергонезависимой памяти.
В настоящее время наиболее распространёнными компонентами дополнительной памяти EEPROM являются микросхемы серии 24Cхх с последовательным интерфейсом I2C, которые выпускаются многими производителями. Рассмотрим линейку таких микросхем из семейства AT24Cхх от компании Atmel [2]. В таблице 1 приведена информация об объёме памяти микросхем данной серии. Доступ к памяти микросхем организован побайтно.
Структурная схема чипа памяти с описанием назначения внутренних узлов и связей между ними приведена на рисунке 1.
Данные микросхемы памяти EEPROM оптимизированы для использования во многих промышленных и коммерческих приложениях, где важны малая потребляемая мощность и работа при низком напряжении питания. Ниже приведены основные технические характеристики описываемых микросхем:
Расположение выводов микросхем для всех типов корпусов показано на рисунке 2.
В таблице 2 приведено описание выводов микросхем.
Микросхема содержит адресные входы, позволяющие назначать её адрес для интерфейса I2C. Таким образом, к одной последовательной шине можно подключить до 8 микросхем. Адресация микросхем памяти для интерфейса I2C приведена в таблице 3.
Младший разряд адреса микросхемы R/W является битом выбора операции чтения/записи. Операция чтения инициируется, когда данный разряд имеет высокий уровень; если же этот разряд имеет низкий уровень, то инициируется операция записи.
Вывод SDA используется для двунаправленной последовательной передачи данных. Он является выводом с открытым стоком и может быть соединён с несколькими аналогичными выводами с открытым стоком или коллектором.
Вход SCL используется для синхронизации последовательных данных посредством интерфейса I2C.
Линии SDA и SCL необходимо обязательно согласовать с напряжением источника питания с помощью резисторов. На частоте тактирования 100 кГц используются резисторы номиналом 10 кОм, а на частоте тактирования 400 кГц и выше – 2 кОм.
Вход WP позволяет блокировать запись данных при подключении этого входа к цепи питания VCC. При этом все команды записи в память игнорируются. Если данный вывод подключить к линии GND, то операции записи будут разрешены.
Схема подключения чипа памяти к микроконтроллеру типа STM32 приведена на рисунке 3.
Для выполнения операции записи данных в микросхему памяти предварительно передаются адрес микросхемы и два 8-разрядных слова адреса, приём которых подтверждается нулевым потенциалом на линии SDA со стороны микросхемы памяти. Затем при поступлении импульсов синхронизации микросхема принимает первый байт данных, после чего вновь формирует нулевой потенциал на SDA. Далее микроконтроллер прерывает последовательность записи передачей условия «СТОП», как показано на рисунке 4.
В этот момент в микросхеме EEPROM активизируется внутренний синхронизируемый цикл записи данных в энергонезависимую память. В процессе выполнения цикла записи и до её завершения все входы микросхемы памяти отключаются и она не реагирует на внешние запросы.
Микросхемы EEPROM с объёмом памяти более 128 Кбит поддерживают запись 64-байтных страниц. Страничная запись инициируется таким же способом, что и побайтная, за исключением того, что микроконтроллер не отправляет условие останова после записи первого байта – вместо этого он может передавать дополнительно до 63 байт данных. После приёма каждого последующего байта данных микросхема подтверждает операцию нулевым потенциалом на линии SDA. Микроконтроллер прекращает последовательность страничной записи передачей условия останова, как показано на рисунке 5.
После приёма каждого байта данных в микросхеме памяти инкрементируются младшие 6 бит слова адреса. Старшие биты слова адреса не инкрементируются. Если в результате внутреннего инкрементирования слова адреса достигается его граничное значение, то следующий байт будет приниматься в начало текущей страницы. Если в микросхему EEPROM передаётся более 64 байт данных, то ранее переданные данные будут заменены вновь поступившими. При выполнении инкрементирования в процессе записи последнего байта текущей страницы устанавливается адрес первого байта этой же страницы.
Сразу после инициирования внутреннего синхронизируемого цикла записи и отключения входов микросхемы EEPROM можно начать опрос подтверждения. Для этого необходимо отправить условие старта после адресного слова. Бит чтения/записи определяет выполнение желаемой операции. Микросхема EEPROM отвечает нулевым потенциалом на SDA только при завершении внутреннего цикла записи, тем самым позволяя продолжить последовательность записи данных.
Операции чтения инициируются тем же способом, что и операции записи, за исключением того, что бит выбора операции чтения/записи в адресном слове равен единице. Поддерживаются три вида операций чтения: чтение по текущему адресу, чтение по произвольному адресу и упорядоченное чтение.
При чтении по текущему адресу внутренний счётчик адреса слова данных хранит адрес, который использовался при последней операции чтения или записи, увеличенный на 1. Данный адрес остаётся действительным до тех пор, пока на микросхему подано питание. После чтения последнего байта последней страницы и автоматического инкрементирования адреса устанавливается адрес первого байта первой страницы.
Сразу после приёма адреса микросхемы с битом выбора чтения/записи, равным 1, и подтверждения приёма со стороны микросхемы EEPROM передаётся байт данных по текущему адресу. При этом микроконтроллер не отвечает микросхеме нулевым потенциалом на SDA, а передаёт условие останова, как показано на рисунке 6.
Для чтения по произвольному адресу необходимо выполнить «холостую» процедуру загрузки адреса микросхемы и данных. Как только микросхема примет адресное слово микросхемы, адресное слово данных и отправит подтверждение, микроконтроллер должен сгенерировать новое условие старта. После этого необходимо инициировать операцию чтения по текущему адресу путём отправки адреса микросхемы с установленным в единичное состояние битом выбора чтения/записи. Микросхема памяти подтвердит адрес микросхемы и последовательно передаст слово данных. При этом микроконтроллер не ответит нулевым потенциалом на SDA, а должен будет сгенерировать условие останова, как показано на рисунке 7.
Упорядоченное чтение инициируется после операции чтения по текущему адресу или после операции чтения по произвольному адресу. После приёма микроконтроллером байта данных он отвечает соответствующим подтверждением. Когда микросхема памяти принимает подтверждение, выполняется инкрементирование адреса слова данных и передаётся очередной байт данных. При достижении границы адресного пространства адрес данных переходит в начальное состояние и упорядоченное чтение продолжается. Упорядоченное чтение прекратится, когда микроконтроллер не ответит нулевым потенциалом на линии SDA и сгенерирует условие останова, как показано на рисунке 8.
Создать программу для организации дополнительной энергонезависимой памяти на микросхеме EEPROM посредством интерфейса I2C можно с помощью генератора кода STM32CubeMX компании STMicroelectronics [1]. После запуска генератора кода STM32CubeMX необходимо создать в нём новый проект и выбрать тип микроконтроллера, например STM32F030K6Tx, как показано на рисунке 9.
На вкладке Pinout в разделе Peripherals раздела I2C1 необходимо выбрать режим шины I2C, при этом генератор кода STM32CubeMX автоматически задействует порт PA9 для сигнала SCL и порт PA10 для сигнала SDA согласно внутренней организации микроконтроллера. Далее следует настроить один порт, например PA15, как GPIO_Output для подключения к нему светодиода, индицирующего процессы обращения к микросхеме памяти. Делается это одиночным кликом по изображению вывода порта и соответствующему режиму из разворачиваемого списка, как показано на рисунке 10. Перейдя на вкладку Configuration, можно проверить параметры модуля I2C1.
Режим скорости выбран стандартным (Standard Mode) с частотой 100 кГц, что соответствует номиналу подключённых резисторов 10 кОм. Генератор кода STM32CubeMX позволяет также выбрать режим Fast Mode с частотой 400 кГц – в этом случае нужно применять резисторы номиналом 2 кОм. Микросхема памяти допускает работу на такой частоте при напряжении питания выше 2,5 В.
Остальные настройки можно оставить без изменений и сохранить проект в каталог с новым именем. Далее следует сгенерировать код программы, например для MDK-ARM KEIL [3], с помощью меню Project. После завершения процесса генератор кода STM32CubeMX предложит открыть полученный код в среде разработки KEIL, после чего запустится среда разработки с файлами проекта (см. рис. 11).
Все сгенерированные с помощью STM32CubeMX файлы записываются и хранятся в каталоге Src созданного проекта. Основной файл main.c содержит в себе функции инициализации и основное тело программы. Вспомогательный файл stm32f0xx_it.c служит для обработки прерываний. В файле stm32f0xx_hal_msp.c можно увидеть инициализацию портов PA9 и PA10 интерфейса I2C с помощью функций HAL.
Чтобы дополнить сгенерированный файл программы main.c некоторыми переменными и командами для организации обмена данными с микросхемой памяти EEPROM, в разделе пользовательских переменных следует инициализировать однобайтный буфер обмена buf, адрес микросхемы EEPROM I2C1_DEV_ADR со значением 0x50 для интерфейса I2C и ячейку памяти EEPROM_ADR с адресом 0x01 (см. листинг 1).
Запись новых строк программы всегда нужно осуществлять в строго отведённых местах между строками /* USER CODE BEGIN…*/ и /* USER CODE END…*/. Это позволит сохранить новые строки программы при повторной генерации кода с помощью STM32CubeMX.
Для записи и чтения одного байта памяти EEPROM в бесконечном цикле необходимо ввести в главную функцию main строки из листинга 2.
В результате работы написанной программы будет произведена запись одного байта в ячейку памяти EEPROM с последующим чтением этой же ячейки памяти через 5 с. Если прочитанный байт совпадёт с записанным байтом, будет произведено включение светодиода, подключённого к выводу PA15.
Функции HAL_I2C_Mem_Write и HAL_I2C_Mem_Read предназначены для работы с памятью, поэтому нет необходимости использовать общие функции работы с шиной I2C HAL_I2C_Master_Transmit и HAL_I2C_Master_Receive. Адрес EEPROM передаётся в программе функции со смещением влево на 1 разряд I2C1_DEVICE_ADDRESS<<1, т.к. он является 7-битным, а младший разряд адреса устройства по спецификации I2C отвечает за операцию записи/чтения.
В функциях HAL_I2C_Mem_Write и HAL_I2C_Mem_Read последним аргументом является время ожидания, за которое микроконтроллер стабильно будет получать реакцию от EEPROM на его запросы. Задержка в 10 мс osDelay(10) после функции HAL_I2C_Mem_Write необходима для совершения операции записи в EEPROM. Несмотря на то что в описании этой микросхемы указано время записи 5 мс, его лучше увеличить, чтобы гарантировать стабильность операции.
Описанные выше функции записи и чтения данных в память EEPROM можно использовать для написания других программ.
В качестве готового устройства для проверки и отработки программ подойдёт любая отладочная плата, например из семейства Discovery.
Биометрические системы, информационные киоски (БИК), турникеты и шлюзы с АСО. Обзор оборудования, компонентов и особенностей установки
Повсеместно биометрическую идентификацию рассматривают как перспективный инструмент для быстрых и безопасных операций почти универсального (в самых различных сферах) применения. Несколько лет назад появились биометрические информационные киоски, турникеты и шлюзы. Эти модели постоянно совершенствуются. О новинках, связанных с расширением функционала и защиты современного оборудования, ставших возможными профессиональными усилиями разработчиков РЭА и производителей оборудования, предлагаем ознакомиться в нашем обзоре. Основной акцент в формате импортозамещения современной электроники сделан на серийные модели отечественных производителей. 04.09.2024 СЭ №6/2024 321 0 0Аккумулятор 18650 для радиоканала
Аккумуляторы 18650 имеют рабочие напряжения 3…4,2 В, что не позволяет использовать их непосредственно в схемах с 5-вольтовым питанием. В статье предложено схемное решение формирования требуемого значения напряжения методом накопления импульсов самоиндукции от дросселя. С целью уменьшения потребления энергии формируется режим «сна» для используемого микроконтроллера 12F675 и радиомодуля HC12 в комбинации с отключением общего провода других потребителей энергии электронным ключом на полевом транзисторе. Приведена методика расчёта длительности работы на аккумуляторе в режиме «измерение-сон». 02.09.2024 СЭ №6/2024 228 0 0Усовершенствованный двухканальный индикатор уровня звука на базе цветного 1,3” TFT дисплея и микроконтроллера EFM8LB10F16
В статье приведены принципиальная схема, разводка и внешний вид платы, а также программные средства двухканального индикатора уровня звука на базе цветного 1,3″ TFT-дисплея с разрешением 240×240 пикселей (с контроллером ST7789), сопряжённого с микроконтроллером EFM8LB10F16 по параллельному интерфейсу. Показаны результаты работы устройства в составе УМЗЧ. 02.09.2024 СЭ №6/2024 223 0 0Сверхпроводимость при высоких температурах реальность и фальсификации. Часть 2
Одним из последних ярких примеров несостоявшегося открытия сверхпроводимости при нормальных условиях стала история с веществом LK-99, названным так по первым буквам фамилий руководителей проекта Сукбэ Ли и Джи-Хун Кима. Группа южнокорейских учёных летом 2023 года разместила на сайте arXiv подробные результаты своих исследований, подтверждающих сверхпроводимость при температуре 127°С и атмосферном давлении синтезированного ими вещества LK-99. Детальное описание экспериментов не вызывало сомнений у мировой научной общественности. Однако попытки объяснить эти результаты поставили в тупик многих экспертов в области сверхпроводимости. Эта информация привела к взрыву в сетях комментариев и вопросов к авторам. Десятки лабораторий во всём мире попытались повторить эксперимент группы Ли Сукбэ. Однако никому не удалось получить точно такие же результаты, какие были опубликованы в южнокорейских препринтах. Только совместные усилия лучших специалистов в области сверхпроводимости позволили установить, что LK-99 не является сверхпроводником. При этом резкий скачок удельного сопротивления объясняется фазовым переходом кристаллической структуры сульфида серы, содержащегося в виде примеси в образцах LK-99. 04.09.2024 СЭ №6/2024 249 0 0