Установка среды разработки в Windows 10 и Windows 11 для БАГЕТ-ПЛК1-01

Опубликовано в номере:
PDF версия
В 2021 г. Научно-исследовательский институт системных исследований РАН (с 2025 г. НИЦ «Курчатовский институт» — НИИСИ) начал производство микроконтроллера широкого применения собственной разработки Комдив-МК (К5500ВК018) [1]. Этот микроконтроллер внесен в Реестр промышленной продукции, произведенной на территории Российской Федерации. Он создан по технологии 65 нм, обладает сравнительно широкими возможностями и включает ядро с архитектурой КОМДИВ64, совместимой с MIPS64, контроллер внешней динамической памяти DDR3L, два контроллера Ethernet, контроллер USB и другую периферию. НИИСИ также является разработчиком собственной операционной системы реального времени — ОС РВ Багет. Пример ее использования — в модулях ПЛК, построенных на микроконтроллере Комдив-МК. Рассмотрим особенности установки среды разработки для этой ОС.

В 2024 г. НИИСИ начал поставки одноплатного микрокомпьютера БАГЕТ-ПЛК1-01 с Комдив-МК на борту. В Петрозаводском государственном университете организован учебный класс по освоению этой продукции.

В микроконтроллере Комдив-МК предусмотрено 16 кбайт встроенного ПЗУ и 512 кбайт встроенного ОЗУ. Кроме этого, на плате БАГЕТ-ПЛК1-01 установлены микросхемы внешнего ОЗУ на 512 Мбайт, системного ПЗУ (flash-память) на 4 Мбайт (содержит загрузчик barebox или ПО пользователя), пользовательского ПЗУ на 4 Мбайт (flash-память), пользовательского ПЗУ на 4 кбайт (память EEPROM) и SD-карта 32 Гбайт для хранения образа ОС Debian.

Возможность использования той или иной аппаратной конфигурации определяется перемычками SA4 и SA9 на плате. Режимы работы платы БАГЕТ-ПЛК1-01 приведены в таблице.

Таблица. Режимы работы платы БАГЕТ-ПЛК1-01

Режим использования

Комдив-МК

БАГЕТ-ПЛК1-01

встроен.
ПЗУ
16 кбайт

встроен.
ОЗУ
512 кбайт

внеш. ОЗУ
DDR3
512 Мбайт

внеш. систем. флеш-ПЗУ
D30, W25Q32, QSPI
4 Мбайт

внеш. польз. флеш-ПЗУ
D31, W25Q32, SPI0
4 Мбайт

внеш. польз. ПЗУ EEPROM
D8, M24C32, I2C0
4 кбайт

SD-карта
32 Гбайт

Debian

+
SA4 (1-2)

+
загрузчик barebox

+


SA9 OFF

+
SA9 OFF

baremetal

+
SA4 (2-3)

+
*SA4 (1-2)

+
ПО пользователя

+

+
SA9 ON

Устройство может работать в одном из двух режимов.

  • Режим 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 (все перемычки в левое положение). Установку и снятие перемычек требуется выполнять в обесточенном состоянии.

Положение перемычек SA4-SA7 для работы со встроенной ОС Debian (Ethernet, EXT ROM, EXT RAM, LITTLE ENDIAN)

Рис. 1. Положение перемычек SA4-SA7 для работы со встроенной ОС Debian (Ethernet, EXT ROM, EXT RAM, LITTLE ENDIAN)

Перед проведением всех работ рекомендуется создать образ SD-карты, поставляемой с платой, поскольку в ходе экспериментов у пользователей иногда возникают ситуации непреднамеренной порчи содержимого SD-карты.

Плату БАГЕТ-ПЛК1-01 необходимо подключить к USB-порту компьютера, а также подать электропитание 7–18 В через коаксиальный разъем X7. При запитывании платы только через USB-порт возможна ее нестабильная работа.

Если при подключении платы БАГЕТ-ПЛК1-01 к компьютеру с ОС Windows в «Диспетчере устройств» (вызов Win+x с клавиатуры) возникает неизвестное устройство (рис. 2), необходимо установить драйвер микросхемы FTDI FT2232HL (VCP driver — драйвер виртуального com-порта).

Неизвестное USB-устройство

Рис. 2. Неизвестное USB-устройство

Драйвер можно скачать с сайта производителя чипа:

Рекомендуется использовать качественный USB-кабель, а также подключать плату в USB-разъем, установленный на материнской плате компьютера, а не в USB-разъем на передней панели корпуса компьютера.

В результате корректной установки драйверов и подключения платы БАГЕТ-ПЛК1-01 в «Диспетчере устройств» должны появиться два USB serial-конвертера А и В, а также один или два последовательных USB-порта. Например, на рис. 3 показаны появившиеся в системе порты 7 и 8.

Обновленный список устройств: два USB-serial конвертера А и В и два последовательных USB-порта 7 и 8

Рис. 3. Обновленный список устройств: два USB-serial конвертера А и В и два последовательных USB-порта 7 и 8

В плате БАГЕТ-ПЛК1-01 USB-кон-вертер А (и привязанный к нему виртуальный com-порт) применяется для загрузки программ и для отладки с помощью интерфейса JTAG, а USB-конвертер В — как консоль (например, для вывода диагностических сообщений в компьютер).

Если в «Диспетчере устройств» возникает не два USB-порта, а один, то в обоих конвертерах USB Serial Converter A и USB Serial Converter B необходимо активировать виртуальный COM-порт. Для этого нужно кликнуть правой кнопкой мыши (ПКМ) на конвертере, далее в контекстном меню выбрать «Свойства», в открывшемся окне выбрать вкладку «Дополнительно» и установить галочку «Загрузить VCP», как показано на рис. 4.

Активация VCP в USB-конвертере А

Рис. 4. Активация VCP в USB-конвертере А

Если по какой-то причине не удается активировать 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

Рис. 5. Конфигурация teraterm

Для связи с платой с помощью 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). Установку и снятие перемычек требуется выполнять в обесточенном состоянии.

Положение перемычек SA4-SA7 для работы без встроенной ОС Debian (Ethernet, EXT ROM, INT RAM, LITTLE ENDIAN)

Рис. 6. Положение перемычек SA4-SA7 для работы без встроенной ОС Debian (Ethernet, EXT ROM, INT RAM, LITTLE ENDIAN)

В качестве среды разработки используется пакет поддержки программирования микроконтроллера Комдив-МК (ППП МК) от НИИСИ и редактор Visual Studio Code (VS Code), запускаемые в среде Windows Subsystem for Linux (WSL).

НИИСИ рекомендует создавать новое программное обеспечение, используя настроенную среду разработки под Debian. Для того чтобы пользоваться этой рекомендацией на компьютерах с Windows, необходимо в ОС Windows установить WSL 2. Затем в виртуальной машине установить и запустить ОС Debian и далее организовать среду разработки на основе ППП МК.

Для того чтобы установить и настроить это программное обеспечение, необходимо выполнить следующие действия.

  1. Включить виртуализацию процессора.

Технология для процессоров 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.

Проверка включения виртуализации процессора

Рис. 7. Проверка включения виртуализации процессора

  1. Установить VS Code для Windows: https://code.visualstudio.com/download
  2. Включить службы сервера виртуализации Hyper-V и подсистему Windows для Linux (WSL).

В «Панели управления/Программы/Включение или отключение компонентов Windows» установить галочки у Hyper-V и «Подсистема Windows для Linux».

  1. Установить Windows terminal.

В строке поиска в Microsoft Store найдите Terminal и установите. По умолчанию Windows Terminal открывает консоль PowerShell, но можно выбрать и другие через выпадающее меню.

  1. Организовать доступ из 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-устройств, выдаваемый по команде usbipd list

Рис. 8. Список USB-устройств, выдаваемый по команде usbipd list

В списке найти строку с 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.

Обновленный список USB-устройств

Рис. 9. Обновленный список USB-устройств

Необходимо отметить, что статус Shared не изменяется после перезагрузки компьютера, поэтому команду usbipd bind необходимо выполнить однократно. Однако, команду подключения интерфейса usbipd attach необходимо выполнять каждый раз после перезагрузки.

  1. Установить ядро WSL 2.

Процедура и нюансы установки WSL 2 описаны в https://learn.microsoft.com/ru-ru/windows/wsl/install

В консоли PowerShell в Windows terminal с правами администратора выполнить (предварительно, скорее всего, потребуется перезагрузить компьютер):

wsl.exe --update
wsl --set-default-version 2
  1. Установить 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.

Консоль Debian в Windows terminal

Рис. 10. Консоль Debian в Windows terminal

Кроме этого, в проводнике 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.localhost\Debian\home\user) и разархивировать:

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.

Вывод dmesg после подключения USB-порта в WSL

Рис. 11. Вывод dmesg после подключения USB-порта в WSL

Следующая команда в консоли 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.localhost\Debian\home\user) и разархивировать:

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 "\000" "\377" > /tmp/padded.img
dd if=$BAREBOXIMG of=/tmp/padded.img conv=notrunc
flashrom -p ft2232_spi:type=kmk -c W25Q32BV/W25Q32CV/W25Q32DV -w /tmp/padded.img

В этом командном файле сначала создается 4 Мбайт образ padded.img в каталоге /tmp/, а затем в этот образ встраивается скомпилированный файл ram.bin. Последняя строка в файле запускает утилиту программирования ПЗУ.

Для того чтобы файл kmk.sh был исполняемым, необходимо выполнить:

chmod +x kmk.sh

Собрать и загрузить образ в ПЗУ одной командой (из папки проекта apps/i2c_scanner):

make && sudo ./kmk.sh ram.bin

Если возникает ошибка доступа к каталогу /tmp/, необходимо выполнить:

sudo chown root:root /tmp/*

Для того чтобы увидеть вывод программы i2c_scanner, исполняемой в плате БАГЕТ-ПЛК1-01, необходимо отключить USB-порт компьютера от виртуальной машины с Debian и передать его обратно «во владение» операционной системе Windows (в командной строке заменить BUSID 3-9 на другой):

usbipd detach --busid 3-9

Далее необходимо запустить Windows-терминал (например, teraterm), выбрать требуемый com-порт и наблюдать вывод. Пример ожидаемого вывода приведен на рис. 12.

Вывод программы i2c_scanner

Рис. 12. Вывод программы i2c_scanner

Вывод программы i2c_scanner можно наблюдать и в ОС Debian с помощью утилиты minicom. В этом случае выполнять команду usbipd detach —busid 3-9 не надо, то есть USB-порт должен быть виден из Debian.

Убедиться в этом можно, выполнив:

ls /dev/tt*

В списке устройств должны быть /dev/ttyUSB0 и /dev/ttyUSB1, как показано в примере на рис. 13 (см. правый столбик).

Пример списка устройств в Debian, содержащий /dev/ttyUSB0 и /dev/ ttyUSB1

Рис. 13. Пример списка устройств в Debian, содержащий /dev/ttyUSB0 и /dev/ ttyUSB1

Установить утилиту minicom из командной строки в Debian:

sudo apt install minicom

Запустить терминал из командной строки Debian:

sudo minicom -D /dev/ttyUSB1

Если параметры порта не соответствуют 115200 8N1, в утилите minicom нажать Ctrl-A + O, выбрать Serial port setup и установить необходимое.

Выход из терминала minicom — по нажатию Ctrl-A + Q.

Пример вывода программы i2c_scanner в терминал minicom приведен на рис. 14.

Вывод программы i2c_scanner в терминал minicom

Рис. 14. Вывод программы i2c_scanner в терминал minicom

 

Заключение

Резюмировать сделанное можно с использованием блок-схемы, представленной на рис. 15.

 Блок-схема комплекса программирования платы БАГЕТ-ПЛК1-01

Рис. 15. Блок-схема комплекса программирования платы БАГЕТ-ПЛК1-01

Для программирования платы БАГЕТ-ПЛК1-01 в режиме baremetal в Windows устанавливается виртуальная машина, в которой запускается ОС Debian. Файл образа прошивки микроконтроллера Комдив-МК создается с помощью пакета поддержки программирования и редактора VS Code, запускаемых в Debian-среде. Для того чтобы загрузить файл образа прошивки в ПЗУ на плате БАГЕТ-ПЛК1-01, используется Debian-утилита flashrom. Исходный код свободно распространяемой утилиты flashrom немного изменен (для стыковки с платой БАГЕТ-ПЛК1-01), поэтому предварительно ее необходимо скомпилировать и собрать.

Непосредственно перед загрузкой образа требуется запустить Windows-утилиту usbipd, которая пробрасывает USB-порт в Debian и делает возможной связь из Debian c платой БАГЕТ-ПЛК1-01.

Результат работы программы, исполняемой в микроконтроллере Комдив-МК, можно наблюдать на компьютере, подключившись терминалом к USB-порту, связанном с USB-конвертером В. Для этого используется либо Windows-terminal (teraterm), либо терминал в Debian (minicom). Во втором случае USB-порт должен быть проброшен внутрь виртуальной машины.

Литература
  1. ПЛК «БАГЕТ-ПЛК1-01» Руководство по эксплуатации ЮКСУ.421457.002-01РЭ. niisi.ru/БАГЕТ-ПЛК1-01_РЭ_v3.3.pdf.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *