- STM32MP1 — ядра + Linux = идеальный микроконтроллер
- Идеальный контроллер
- Первое знакомство
- Память
- Организация рабочего места
- Engineering & Production mode
- Ядро М4. Загрузка и запуск программ
- Ядро М4. SW4STM32
- Ядро А7. Кросс-компилятор
- Ядро А7. Загрузка и запуск программ
- Обмен данными между ядрами
- Дальнейшие планы
- ПЛК нового поколения WirenBoard на базе Linux
- Ваши преимущества
- Новости
- Связаться с нами
- +7 961 421-03-07
- В России выпустили линейку FRONT Control PLC-контроллеров для сбора и обработки данных с открытой ОС (Bare metal PLC)
STM32MP1 — ядра + Linux = идеальный микроконтроллер
По роду своей деятельности занимаюсь разработкой различных приборов: измерительных, управляющих, контролирующих и т.п. В подавляющем большинстве устройство делится на 2 части:
- Требующий больших ресурсов микроконтроллера и не требующий жесткого реального времени графический интерфейс пользователя (GUI).
- Потребляющая немного ресурсов и работающая в жестком реальном времени аппаратная часть прибора.
Но с появлением у STM новой линейки микроконтроллеров STM32MP1 мои терзания закончились и вот что пока получилось.
Идеальный контроллер
Идеальный контроллер для меня должен обладать следующими характеристиками:
- иметь приличные графические возможности, такие как простая поддержка различных графических форматов, поддержка векторных шрифтов
- большой объем памяти для графики
- поддержка USB клавиатуры и мышей
- поддержка Ethernet
- большое количество аппаратных таймеров
- генерация ШИМ
- большое количество GPIO
- 16 разрядный АЦП
И поэтому я очень обрадовался увидев новый серию от STM: STM32MP1.
Первое знакомство
Для ознакомления с новым чипом была приобретена плата STM32MP157C-DK2. Вот такая (фото из инета):
Демоплата построена на кристалле STM32MP157CAC, который имеет в своем составе:
Память
Самое первое отличие, которое бросается в глаза — это отсутствие флеш памяти на кристалле. Для ядра А7, которое по сути микропроцессор, это нормальная ситуация и код всегда выполняется из DRAM. Микроконтроллеры на основе М4, обычно имеют в своем составе флеш память, в которой хранится исполняемый код.
В этом кристалле у ядра М4 есть только оперативная память и код выполняется из нее (из даташита):
708 Kbytes of internal SRAM: 256 Kbytes of
AXI SYSRAM + 384 Kbytes of AHB SRAM +
64 Kbytes of AHB SRAM in Backup domain
and 4 Kbytes of SRAM in Backup domain
The STM32MP157C/F devices embed a controller for external SDRAM which support the
following devices:
- LPDDR2 or LPDDR3, 16- or 32-bit data, up to 1 Gbyte, up to 533 MHz clock.
- DDR3 or DDR3L, 16- or 32-bit data, up to 1 Gbyte, up to 533 MHz clock.
С одной стороны памяти у ядра M4 вроде бы меньше, чем у версии в флеш памятью, но с другой стороны RAM память работает на частоте ядра. Флеш память так не может, и там приходится использовать делитель частоты.
Организация рабочего места
Поскольку для работы с платой необходим Линукс, то пришлось установить дополнительный жесткий диск в свой комп и развернуть на нем Ubuntu 16.04. Эту ОС рекомендует STM.
Engineering & Production mode
Плата может стартовать в одном из двух режимов (определяется дип-свитчем). В режиме Engineering, ядро М4 работает обособленно. В Production mode ядро М4 работает под управлением ядра А7. Я не использовал режим Engineering, работал только в режиме Production. В этом режиме можно не заботиться о настройке тактирования ядер. Тактирование настраивается в процессе загрузки по максимальным величинам. Я проверил несколько регистров в отладчике, вывел часть частот на MCO и посмотрел осциллографом. A7 работает на частоте 650 МГц, М4 на частоте 208 МГц.
Ядро М4. Загрузка и запуск программ
Поскольку ядро М4 работает под управлением А7, значит под управлением OpenSTLinux. Для управления ядром М4 используется Linux remoteproc framework (RPROC). Этот фреймворк позволяет включать и отключать ядра, загружать и отлаживать программное обеспечение(ELF файлы).
Для загрузки программы в ядро M4 служит следующая команда:
echo -n > /sys/class/remoteproc/remoteproc0/firmware
echo start >/sys/class/remoteproc/remoteproc0/state
echo stop >/sys/class/remoteproc/remoteprocX/state
Ядро М4. SW4STM32
Выше упомянутые команды были опробованы, все работает 🙂 Но для работы нужна какая-нибудь нормальная IDE. STM рекомендует для этого использовать софт компании AC6 SW4STM32. При этом на сайте OpenSTM32 есть очень классный заголовок:
With System Workbench for Linux, Embedded Linux on the STM32MP1 family of MPUs from ST was never as simple to build and maintain, even for newcomers in the Linux world.
And, if you install System Workbench for Linux in System Workbench for STM32 you can seamlessly develop and debug asymmetric applications running partly on Linux, partly on the Cortex-M4.
То есть можно писать код как для ядра м4, так и для А7. Но это платная версия. А бесплатная, которая доступна для скачивания, позволяет писать и отлаживать код только для ядра М4.
IDE SW4STM32 была скачана, установлена и попробована. Все работает, процесс написания и компиляции не отличается от версии в Windows.
Отличается только загрузка кода и отладка, поскольку для записи софта используется Ethenet и соединение по SSH. Для отладки и остановки по точкам используется встроенный на плате ST LINK.
Ядро А7. Кросс-компилятор
Для компиляции программ на ПК STM предлагает кросс-компилятор. Процесс загрузки и запуска скрипта кросс-компилятора подробно описан в Вики STM32MP1, ссылка ниже. Все было сделано согласно инструкции, все работает как надо. 🙂
Запуск кросс-компилятора для экосистемы v1.1.0:
source SDK/environment-setup-cortexa7t2hf-neon-vfpv4-openstlinux_weston-linux-gnueabi
ну далее команда
make
и исходный код, в соответствии с makefile, скомпилируется в коды ARM 🙂
Ядро А7. Загрузка и запуск программ
Чтобы загрузить программу в демо плату используется команда:
scp gtk_hello_world root@192.168.1.18:/usr/local
Эта команда загружает файл gtk_hello_world в раздел /usr/local, который находится на плате с IP адресом: 192.168.1.18. Root — пароль, который стоит на плате по умолчанию.
Обмен данными между ядрами
Больше всего времени ушло на понимание работы механизма обмена данными между ядрами. В примерах, которые поставляются STM, есть несколько вариантов реализации подобного обмена. Можно работать напрямик с драйвером из OpenSTLinux или использовать механизм виртуальных UARTов. Я решил сделать обмен через виртуальные порты, как более простой.
Со стороны Линукс это выглядит так:
fd = open(«/dev/ttyRPMSG0», O_RDWR);
Потом пишем в него или читаем:
write(fd, «LED_Toggle\r\0», 10);
len = read( fd, buf, sizeof(buf));
Все достаточно просто, но есть маленький нюанс. Чтобы появилось устройство ttyRPMSG0, нужно чтобы ядро М4 обратилось к ядру А7 в таком виде:
VIRT_UART_Init(&huart0); //регистрация виртуального порта VIRT_UART_RegisterCallback(&huart0, VIRT_UART_RXCPLT_CB_ID, VIRT_UART0_RxCpltCallback) //регистрация и выделение памяти для приемного буфера.
Прием данных из виртуального порта ядром М4:
Запись данных в виртуальный порт:
Все работает, но есть небольшой нюанс, который пока не могу понять. Прием данных ядром А7, которые передает ядро М4, не начинается, если предварительно ядро А7 не запишет в порт какие-либо данные.
Весь этот механизм реализуется набором сторонних библиотек OpenAMP. Эта библиотека должна быть включена в проект ядра М4 и соответственно проинициализирована.
Дальнейшие планы
Установить и настроить Eclipse для написания и отладки кода для А7.
Написать нормальное графическое демо, типа осцилоскопа из АЦП М4.
И наконец, сделать свою плату контроллера на основе этого чипа. 🙂
ПЛК нового поколения WirenBoard на базе Linux
Контроллер автоматизации WirenBoard от наших партнеров ООО «Бесконтактные устройства»— очень гибкое решение для автоматизации, предназначенное для широкого круга задач. Контроллер представляет собой одноплатный компьютер с большим количеством как проводных так и беспроводных интерфейсов, заменяя собой множество устройств! Работает ПЛК под управлением широкого распространенной операционной системой Linux семейства Debian, что открывает перед инженерами большие возможности.
Контроллер нового поколения для автоматизации WirenBoard
Среди проводных интерфейсов следует отметить широко распространенный интерфейс 1-wire, RS-485 с поддержкой modbus «из коробки», релейные выходы и многое другое.
Порты контроллера WirenBoard
Контроллер имеет встроенный веб интерфейс, через который можно настраивать датчики, помещения, выводить информацию в реальном времени без установки какого-либо клиентского ПО на компьютер пользователя. На базе WirenBoard совместно и инженерами ООО «Бесконтактные устройства» были разработаны полезные дополнения, такие как уведомления через SMS и email при выходе за пределы показаний на датчиках и система сбора данных с буфером на случай разрыва связи с сервером. Таким образом данные с датчиков, никогда не будут потеряны, даже если произойдет долговременный разрыв связи с сервером (программным обеспечением верхнего уровня). При восстановлении связи контроллер передаст накопленную архивную информацию по всем датчикам.
На базе WirenBoard можно легко строить беспроводные системы мониторинга температуры и влажности, т.к. прибор поддерживает работу с датчикам OREGON Scientific. После доработки датчиков OREGON Scientific нашими инженерами, дальность связи может быть увеличена до 100м. (Стандартная дальность, заявленная производителем 30м).
На базе WirenBoard нами построены несколько проектов по распределенному мониторингу температуры и влажности в сети магазинов и на складах. Данные с объектов передаются через интернет в сервис телеметрии. Сервис предоставляет клиентам доступ к личным кабинетам с данными, отчетами по каждому контролируемому объекту.
Мы будем рады ответить на вопросы по этому замечательному контроллеру. Телефон +7 961 421-03-07.
Ваши преимущества
- Круглосуточный контроль
- Вы спокойны за то, что для Вас важно
- Предупреждение аварийных ситуаций
- Отсутствие человеческого фактора
- Строим уникальное решение для Вас
- Сопровождение проектов и поддержка
Новости
- Поверка датчиков (преобразователей) температуры и влажности в кратчайшие сроки 01.03.2020
- Температурное картирование по приказу 646н. Сертифицированные специалисты. 22.07.2017
- Мониторинг температуры и влажности для больших складов класса А 14.05.2017
- Готовое решение для мониторинга температурного режима по приказу 646н и СП 3.3.2.3332–16 11.05.2017
- Надежная система мониторинга температуры и влажности для лабораторий 10.05.2017
- Термокартирование мест хранения лекарственных средств по Приказу 646н Минздрава РФ 17.04.2017
- Правила надлежащей практики хранения и перевозки лекарственных препаратов. Приказ 646н. 23.01.2017
Связаться с нами
+7 961 421-03-07
В России выпустили линейку FRONT Control PLC-контроллеров для сбора и обработки данных с открытой ОС (Bare metal PLC)
В линейке ПЛК FRONT Control PLC реализована оригинальная сборка Linux (NAPI Linux), обеспечивающая функцию полного резервирования с возможностью апдейта системы и отката версии. Возможна установка вариантов дистрибутивов Linux, таких как Debian, Ubuntu, DietPi, что позволяет назвать эти устройства Bare Metal ПЛК с открытой ОС.
В отличие от многих «импортозамещенных» контроллеров, по факту изготовленных в Поднебесной, эта разработка выполнена в Санкт-Петербурге, там же налажено производство изделий.
В составе линейки — управляющие ПЛК-контроллеры, имеющие связь с системой SCADA и модули ввода-вывода . Есть IoT ПЛК «Сборщик» с беспроводной связью и ПЛК с функциональностью токо-сборщика. Эта линейка отечественных контроллеров предназначена для АСУ ТП уровня производственной линии, цеха, а также промпредприятий малого и среднего бизнеса.
Во всех устройствах на основе NAPI нет блокировок на замену программного обеспечения или загрузчика. Это позволяет разработчикам и интеграторам устанавливать любые ОС, поддерживающие архитектуру ARMv8. Поставляемая по умолчанию NAPI Linux собрана из исходных кодов, поставляется с открытой архитектурой сборки образов и возможностью делать кастомные сборки, а также разрабатывать собственное ПО.
Присутствуют интерфейс RS-485 c протоколом Modbus RTU и модифицированный DCON, что позволяет добавлять в систему модули сбора данных других производителей (например, ICP DAS). Модули I/O “Наутилус” можно добавлять в комплексы с оборудованием и ПЛК любых производителей.
На заглавном фото пример демо-бокса, в которые входит управляющий ПЛК, два модуля I/O и набор сопутствующих комплектующих. Все ПО разработано российскими программистами и может быть кастомизировано под проект. Подробнее о характеристиках этих ПЛК можно прочесть в отраслевом издании для промышленников Control Engineering RU.
Разработчик готовит статью на Хабр о NAPI Linux для ПЛК, с инструкцией как собирать такую систему, и преимуществах NAPI в сетевых драйверах Linux.