Статья описывает настройку среды разработки под Windows 10 и Windows 11 для платы БАГЕТ-ПЛК1-01 на микроконтроллере Комдив-МК. Из неё можно узнать, как подготовить инструменты для работы со встроенной ОС Debian и для режима baremetal, включая установку драйверов, WSL, Debian, flashrom и компиляцию примера.
- Плата БАГЕТ-ПЛК1-01 может работать в двух режимах: со встроенной ОС Debian с SD-карты или без ОС (baremetal) с исполнением кода из внешнего ПЗУ.
- Для связи с платой в Windows требуется драйвер FTDI FT2232HL, после установки появляются два USB serial-конвертера A и B.
- Консольным приложением для связи с платой рекомендуется teraterm с параметрами порта 115200, 8, none, 1, none.
- Для режима baremetal среда разработки организуется в WSL 2 с ОС Debian, пакетом поддержки программирования микроконтроллера Комдив-МК и редактором VS Code.
- Доступ из Debian к USB-порту компьютера обеспечивается утилитой usbipd-win командами usbipd bind и usbipd attach.
- Для программирования ПЗУ используется утилита flashrom, собираемая из исходного кода kmk_flashrom, и командный файл kmk.sh для создания образа размером 4 Мбайт.
- БАГЕТ-ПЛК1-01
- Комдив-МК
- ОС РВ Багет
- Debian
- baremetal
- WSL 2
- FTDI FT2232HL
- flashrom
- usbipd
- teraterm
- minicom
- VS Code
- ППП МК
Кому полезно: Инженеры АСУ ТП, разрабатывающие ПО для платы БАГЕТ-ПЛК1-01 на Windows.
Первоисточник: controlengrussia.com
Выжимка составлена редакцией сайта с помощью ИИ по тексту статьи.
В 2021 г. Научно-исследовательский институт системных исследований РАН (с 2025 г. НИЦ «Курчатовский институт» — НИИСИ) начал производство микроконтроллера широкого применения собственной разработки Комдив-МК (К5500ВК018) [1]. Этот микроконтроллер внесен в Реестр промышленной продукции, произведенной на территории Российской Федерации. Он создан по технологии 65 нм, обладает сравнительно широкими возможностями и включает ядро с архитектурой КОМДИВ64, совместимой с MIPS64, контроллер внешней динамической памяти DDR3L, два контроллера Ethernet, контроллер USB и другую периферию. НИИСИ также является разработчиком собственной операционной системы реального времени — ОС РВ Багет. Пример ее использования — в модулях ПЛК, построенных на микроконтроллере Комдив-МК. Рассмотрим особенности установки среды разработки для этой ОС.
|
Режим использования |
Комдив-МК |
БАГЕТ-ПЛК1-01 | |||||
|
встроен. |
встроен. |
внеш. ОЗУ |
внеш. систем. флеш-ПЗУ |
внеш. польз. флеш-ПЗУ |
внеш. польз. ПЗУ EEPROM |
SD-карта |
|
|
Debian |
– |
– |
+ |
+ |
+ |
– |
+ |
|
baremetal |
– |
+ |
+ |
+ |
+ |
+ |
– |
Устройство может работать в одном из двух режимов.
- Режим 1 — со встроенной операционной системой Debian, загружаемой с SD-карты и исполняемой с использованием внешних ПЗУ и ОЗУ, размещенных на плате БАГЕТ-ПЛК1-01.
- Режим 2 (baremetal) — без операционной системы, с исполнением кода из внешнего системного ПЗУ без использования внешнего ОЗУ (используется только оперативная память 512 кбайт, встроенная в микроконтроллер).
В режиме 1 взаимодействие с внешними устройствами и другой периферией на плате БАГЕТ-ПЛК1-01 осуществляется посредством драйверов операционной системы и прикладных программ, созданных, например, на языке Python. В этом режиме можно использовать достаточно большое количество скриптов и утилит, свободно распространяемых для платформы Raspberry.
Для создания встроенного программного обеспечения для режима 2 существует два альтернативных подхода: разработка программ в стиле Arduino на Си-подобном языке с компоновкой программы в блоках setup() и loop() и разработка программ на стандартизованном языке Си.
НИИСИ рекомендует использовать свободно распространяемые программные продукты в качестве среды разработки ПО для платы БАГЕТ-ПЛК1-01, в основном под дистрибутивы операционной системы Linux. Однако зачастую занятия в вузах проводятся на компьютерах с предустановленной ОС Windows, поэтому статья посвящена настройке среды разработки именно под эту операционную систему.
Проверка работоспособности платы БАГЕТ-ПЛК1-01 со встроенной ОС Debian
Плата БАГЕТ-ПЛК1-01 поставляется с предустановленной ОС Debian на SD-карте. ОС Debian — это операционная система общего применения, один из самых популярных дистрибутивов Linux.
Перемычки SA4-SA7 на плате должны быть установлены, как показано на рис. 1 (все перемычки в левое положение). Установку и снятие перемычек требуется выполнять в обесточенном состоянии.
Перед проведением всех работ рекомендуется создать образ SD-карты, поставляемой с платой, поскольку в ходе экспериментов у пользователей иногда возникают ситуации непреднамеренной порчи содержимого SD-карты.
Плату БАГЕТ-ПЛК1-01 необходимо подключить к USB-порту компьютера, а также подать электропитание 7–18 В через коаксиальный разъем X7. При запитывании платы только через USB-порт возможна ее нестабильная работа.
Если при подключении платы БАГЕТ-ПЛК1-01 к компьютеру с ОС Windows в «Диспетчере устройств» (вызов Win+x с клавиатуры) возникает неизвестное устройство (рис. 2), необходимо установить драйвер микросхемы FTDI FT2232HL (VCP driver — драйвер виртуального com-порта).
Драйвер можно скачать с сайта производителя чипа:
- https://ftdichip.com/drivers/vcp-drivers/;
- https://ftdichip.com/wp-content/uploads/2021/11/CDM-v2.12.36.4.U-WHQL-Certified.zip (для Windows 10).
Рекомендуется использовать качественный USB-кабель, а также подключать плату в USB-разъем, установленный на материнской плате компьютера, а не в USB-разъем на передней панели корпуса компьютера.
В результате корректной установки драйверов и подключения платы БАГЕТ-ПЛК1-01 в «Диспетчере устройств» должны появиться два USB serial-конвертера А и В, а также один или два последовательных USB-порта. Например, на рис. 3 показаны появившиеся в системе порты 7 и 8.
В плате БАГЕТ-ПЛК1-01 USB-кон-вертер А (и привязанный к нему виртуальный com-порт) применяется для загрузки программ и для отладки с помощью интерфейса JTAG, а USB-конвертер В — как консоль (например, для вывода диагностических сообщений в компьютер).
Если в «Диспетчере устройств» возникает не два USB-порта, а один, то в обоих конвертерах USB Serial Converter A и USB Serial Converter B необходимо активировать виртуальный COM-порт. Для этого нужно кликнуть правой кнопкой мыши (ПКМ) на конвертере, далее в контекстном меню выбрать «Свойства», в открывшемся окне выбрать вкладку «Дополнительно» и установить галочку «Загрузить VCP», как показано на рис. 4.
Если по какой-то причине не удается активировать VCP, то рекомендуется установить более новый драйвер FTDI, а затем для каждого конвертера вручную через контекстное меню по ПКМ выбрать требуемый драйвер. В редких случаях для связи с платой через консольное приложение (конвертер В), возможно, потребуется на время отключить конвертер А: нажать на клавиатуре Win+x, в «Диспетчере устройств» кликнуть ПКМ на USB Serial Converter A и выбрать «Отключить».
В качестве консольного Windows-приложения для связи с платой БАГЕТ-ПЛК1-01 рекомендуется установить teraterm: https://github.com/TeraTermProject/teraterm/releases/download/v5.3/teraterm-5.3.exe.
Необходимо настроить величину шрифта в меню Setup / Font и выбрать параметры com-порта в меню Setup/Serial port: указать выбранный порт и параметры 115200, 8, none, 1, none. Пример конфигурации приведен на рис. 5.
Для связи с платой с помощью teraterm необходимо использовать USB-конвертер В.
После нажатия кнопки RESET на плате БАГЕТ-ПЛК1-01 должен замигать светодиод RX0, а на экран компьютера в приложении teraterm поступят диагностические сообщения о процессе загрузки программного обеспечения.
После загрузки операционной системы Debian с SD-карты в окне терминала появится приглашение командной оболочки bash к авторизации. С использованием привилегий root (или с помощью sudo) пользователь может самостоятельно создавать других пользователей, ставить новые пакеты программного обеспечения, запускать утилиты, компилировать исходный код, исполнять скрипты и т. д. Таким образом, ему доступны все средства и методы работы в ОС Debian.
Необходимо отметить, что при подключении к локальной сети Ethernet кабелем в разъем X3 (RJ-45) в момент загрузки плата пытается получить IP-адрес по протоколу DHCP. Полученный IP-адрес указан в одном из диагностических сообщений. MAC-адрес сетевого интерфейса по умолчанию генерируется случайным образом. Соответственно, после каждой перезагрузки выделяемый IP-адрес может быть иной.
Подготовка среды разработки по для режима baremetal
Установка WSL и Debian под Windows
Для работы без встроенной ОС Debian (режим baremetal) перемычки SA4-SA7 на плате БАГЕТ-ПЛК1-01 должны быть установлены, как показано на рис. 6 (перемычки SA5-7 устанавливаются в левое положение, перемычка SA4 — в правое положение INT RAM). Установку и снятие перемычек требуется выполнять в обесточенном состоянии.
В качестве среды разработки используется пакет поддержки программирования микроконтроллера Комдив-МК (ППП МК) от НИИСИ и редактор Visual Studio Code (VS Code), запускаемые в среде Windows Subsystem for Linux (WSL).
НИИСИ рекомендует создавать новое программное обеспечение, используя настроенную среду разработки под Debian. Для того чтобы пользоваться этой рекомендацией на компьютерах с Windows, необходимо в ОС Windows установить WSL 2. Затем в виртуальной машине установить и запустить ОС Debian и далее организовать среду разработки на основе ППП МК.
Для того чтобы установить и настроить это программное обеспечение, необходимо выполнить следующие действия.
- Включить виртуализацию процессора.
Технология для процессоров Intel называется Intel Virtualization Technology, для процессоров AMD — AMD-V. Для включения виртуализации необходимо при старте компьютера (по клавише Del, Esc, F1 или F2) войти в BIOS и установить соответствующий параметр AMD-V, SVM Mode, Virtualization или SVM Support в значение Enable (искать в секциях установки конфигурации процессора в Advanced, System Configuration, или Security; на разных компьютерах в разных секциях).
Проверить статус виртуализации (включена или нет) можно в Диспетчере задач, как показано на рис. 7.
- Установить VS Code для Windows: https://code.visualstudio.com/download
- Включить службы сервера виртуализации Hyper-V и подсистему Windows для Linux (WSL).
В «Панели управления/Программы/Включение или отключение компонентов Windows» установить галочки у Hyper-V и «Подсистема Windows для Linux».
- Установить Windows terminal.
В строке поиска в Microsoft Store найдите Terminal и установите. По умолчанию Windows Terminal открывает консоль PowerShell, но можно выбрать и другие через выпадающее меню.
- Организовать доступ из Debian (WSL) к USB-порту компьютера.
Установить утилиту для подключения USB-устройства к дистрибутиву Linux, работающему в WSL. Для этого в окне Windows terminal выполнить:
winget install —interactive —exact dorssel.usbipd-win
Подать питание на плату БАГЕТ-ПЛК1-01 и подключить ее USB-кабелем к компьютеру.
Кликнуть ПКМ на иконку установленного Windows terminal, выбрать «Дополнительно»/«Запуск от имени администратора».
От имени администратора в окне Windows terminal посмотреть список USB-устройств:
usbipd list
Пример списка приведен на рис. 8.
В списке найти строку с USB Serial Converter A, USB Serial Converter B, запомнить BUSID этого порта (на рисунке номер BUSID = 3-9).
Провести связывание и подключение этого устройства, выполнив команды (в обоих строчках заменить BUSID 3-9 на другой):
usbipd bind —busid 3-9
usbipd attach —wsl —busid 3-9
В результате при повторном выводе списка устройств командой usbipd list у требуемого устройства появится статус Shared, как показано на рис. 9.
Необходимо отметить, что статус Shared не изменяется после перезагрузки компьютера, поэтому команду usbipd bind необходимо выполнить однократно. Однако, команду подключения интерфейса usbipd attach необходимо выполнять каждый раз после перезагрузки.
- Установить ядро WSL 2.
Процедура и нюансы установки WSL 2 описаны в https://learn.microsoft.com/ru-ru/windows/wsl/install
В консоли PowerShell в Windows terminal с правами администратора выполнить (предварительно, скорее всего, потребуется перезагрузить компьютер):
wsl.exe —update
wsl —set-default-version 2
- Установить Debian в Windows с помощью WSL.
В консоли PowerShell в Windows terminal выполнить:
wsl —install —distribution Debian
В ходе установки Debian после установки VirtualMachine Platform необходимо перезагрузить компьютер.
После установки в PowerShell необходимо выполнить команду запуска Debian:
wsl –d Debian
Создать пользователя и придумать пароль, войти в систему. Например, user/password.
Установить обновления ОС Debian.
sudo apt update
sudo apt upgrade
Консоль с правами администратора можно закрыть.
В новой консоли Windows terminal в выпадающем меню появилась консоль Debian, как показано на рис. 10.
Кроме этого, в проводнике Windows появилось новое устройство Linux.
Установка утилиты flashrom и резервирование образа ПЗУ
ПЗУ платы БАГЕТ-ПЛК1-01 объемом 4 Мбайт (микросхема D31 на принципиальной схеме) содержит загрузчик barebox, отвечающий за загрузку ОС Debian c SD-карты. При использовании платы в режиме 2 (baremetal, без операционной системы) в ПЗУ помещается код исполняемой программы.
В составе пакета поддержки программирования микроконтроллера разработчики поставляют исходный код kmk_flashrom — программатора ПЗУ.
Все действия в командной строке по установке kmk_flashrom выполняются в установленной консоли Debian (Windows terminal).
С помощью проводника Windows скопировать файл kmk_flashrom.tar в домашний каталог пользователя user (\wsl.localhostDebianhomeuser) и разархивировать:
tar -xf kmk_flashrom.tar
Установить необходимые библиотеки, компиляторы и средства разработки:
sudo apt install libpci-dev libgusb-dev libftdi1-dev
sudo apt install make gcc g++ vim mc screen
Перейти в каталог ~/flashrom и собрать утилиту.
cd flashrom
make
sudo make install
В результате на компьютере под операционной системой Windows в каталогах подсистемы Linux появился исполняемый файл ~/flashrom/flashrom
Перед работой с платой рекомендуется сохранить образ ПЗУ с загрузчиком barebox в файл.
Подать питание на плату БАГЕТ-ПЛК1-01 и подключить ее USB-кабелем к компьютеру.
Выполнить проброс USB-порта между Debian и Windows (в командной строке заменить BUSID 3-9 на другой), набрать в консоли PowerShell (внимание, до этого использовалась консоль Debian):
usbipd attach —wsl —busid 3-9
Если в этот момент в PowerShell выполнить команду dmesg –w, то можно заметить, что оба USB-конвертера A и B связаны с портами ttyUSB. Пример вывода dmesg приведен на рис. 11.
Следующая команда в консоли Debian сохраняет образ ПЗУ в файл barebox_299.bin:
sudo flashrom -p ft2232_spi:type=kmk -c W25Q32BV/W25Q32CV/W25Q32DV -r ~/barebox_299.bin
Для загрузки образа в ПЗУ используется команда:
sudo flashrom -p ft2232_spi:type=kmk -c W25Q32BV/W25Q32CV/W25Q32DV -w ~/barebox_299.bin
Компиляция программы из примера
В составе пакета поддержки программирования микроконтроллера поставляется исходный код программ, созданных в стиле Arduino на Cи-подобном языке.
Для демонстрации процесса создания приложений необходимо проделать следующее.
С помощью проводника Windows скопировать файл 20250226_pppmk.tar.bz2 в домашний каталог пользователя pcuser (\wsl.localhostDebianhomeuser) и разархивировать:
tar -xf 20250226_pppmk.tar.bz2
В результате появятся каталоги ~/arduino/ (с проектами Arduino) и ~/psp_mc/ (с проектами на стандартизованном языке Си).
В консоли Debian установить кросс-компиляторы gcc и g++.
sudo apt install gcc-mips-linux-gnu g++-mips-linux-gnu
Перейти в папку ~/arduino/ и запустить редактор VS Code:
cd arduino/
code .
VS Code будет запрашивать разрешение на инсталляцию дополнительных пакетов, а также разрешение на переоткрытие проекта в WSL. На все запросы следует отвечать Yes.
Если в VS Code окно терминала автоматически не открылось, то выбрать в меню View/Terminal.
Для демонстрации процесса создания программ и загрузки бинарного кода в ПЗУ платы можно использовать один из примеров в каталоге ~/arduino/apps/. Программа i2c_scanner выполняет поиск устройств на шине i2c и выводит их список на экран.
В окне терминала перейти в каталог одного из примеров и скомпилировать подготовленный исходный код проекта.
cd apps/i2c_scanner
make
В результате в каталоге ~/arduino/apps/i2c_scanner появятся файлы ram.bin, ram.dis и ram.elf.
Размер бинарного файла ram.bin меньше 4 Мбайт. Для того чтобы запрограммировать ПЗУ, необходимо создать образ ПЗУ, совпадающий по размеру с объемом ПЗУ и включающий ram.bin. Это можно сделать с помощью командного файла kmk.sh, который необходимо создать в каталоге ~/arduino/apps/i2c_scanner, например, с помощью проводника Windows. Файл kmk.sh должен содержать следующий текст.
#!/bin/sh
BAREBOXIMG=$1
if [ ! -e «$BAREBOXIMG» ]; then
echo «usage:»
echo » $0 <barebox-image>»
exit 1
fi
cat > /tmp/layout <<EOF
00000000:0007ffff barebox
EOF
dd if=/dev/zero ibs=1M count=4 | tr «