
Всем привет
Недавно мы добавили в открытую ОСРВ Embox поддержку российского микроконтроллера на RISC-V, о чем я и хочу рассказать в данной статье. Речь пойдет о микроконтроллере MDR1206FI от компании “Миландр”.
На этом коротком видео можно видеть работу Embox на отладочном комплекте для микросхемы MDR1206FI, который нам любезно предоставила компания “Миландр”.
Ниже я расскажу, как это воспроизвести и немного потрохов для любителей. И на закуску покажу работу программы, разработанной в среде Beremiz (по стандарту МЭК-61131 для программирования ПЛК).
Сборка и запуск на плате
Подготовка окружения
Для запуска и отладки, нам как всегда потребуется открытый gdb сервер openocd.
Компания “Миландр” разработала специальные патчи. Их можно скачать с сайта технической поддержки компании “Миландр”.
Скачиваем патчи
wget -O milandr_openocd.zip https://support.milandr.ru/upload/iblock/039/m3ba46bnbtm4dvhudaxgbt64x4d2dmyh/OpenOCD%20%D0%B4%D0%BB%D1%8F%20M%D0%9A%20%D0%9A1986%D0%92%D0%9A025,%20MDR1206,%20%D0%9A1986%D0%92%D0%9A01%20v0.2.1.zip
При выпуске новых версий патчей ссылка может "сломаться" (будет уже другая), поэтому в общем случае лучше скачивать патчи с сайта https://ic.milandr.ru/soft/ вручную.
Распаковываем патчи
unzip milandr_openocd.zip -d milandr_openocd
Устанавливаем необходимые пакеты для сборки openocd
sudo apt-get install automake libtool libusb-1.0-0 libusb-1.0-0-dev
sudo apt install pkg-config autoconf automake
Клонируем оригинальный openocd
git clone https://github.com/openocd-org/openocd.git
Переходим в папку с исходниками
cd openocd
Переключаемся на версию v0.12.0
git checkout tags/v0.12.0
Накладываем распакованные патчи
git apply --verbose ../milandr_openocd/openocd_mdr_patch/openocd_mdr.patch
Конфигурируем и собираем
./bootstrap
./configure --disable-werror
make
Запускаем
Переходим в папку tcl. (скрипт, собранный openocd, нужно запускать из этой папки, чтобы не указывать полный путь к скрипту)
cd tcl
Подсоединяем плату по USB. И включаем питание.
sudo ../src/openocd -f interface/ftdi/mdr-ft2232hl.cfg -f target/MDR1206FI.cfg

Embox
Собираем и запускаем
Скачиваем Embox
git clone git@github.com:embox/embox.git
Переходим в корневую папку проекта
cd embox
Конфигурируем проект для работы с демо образом для отладочной платы на MDR1206FI
make confload-platform/milandr/mdr1206fi
Собираем образ
make

Подсоединяемся помощью gdb
gdb-multiarch build/base/bin/embox
в консоли gdb указываем, что хотим подключиться к запущенному openocd (порт 3333)
target extended-remote :3333
указываем, что хотим сбросить МК и остановить его (для записи образа)
monitor reset halt
загружаем образ
load
Запускаем на выполнение
continue
Естественно, в консоли gdb можно: отлаживать, ставить, точки останова, смотреть значение регистров и переменных, ходить по шагам, все как в обычном gdb..
Кроме того, вы можете подключить любую удобную IDE. Например, компания “Миландр” предлагает использовать Eclipse-CDT .
Открываем консоль
На отладочной плате через разъем USB, кроме JTAG- отладчика, доступен терминал, подключенный к UART0 на микроконтроллере. Открываем программу терминала, например, minicom. У меня порт терминала видится как /dev/USB1. Частота по умолчанию заданная в образе - 115200. Следовательно, запускаем со следующими параметрами:
sudo minicom -D /dev/ttyUSB1 -b 115200
Для проверки работы можно выполнить команды в консоли embox, например, команду ‘uname -a’ или ‘version’

Мигаем светодиодом
После реализации драйвера GPIO в embox можно использовать удобное прикладное API, и сразу из консоли поуправлять GPIO с помощью команды 'pin'.
На отладочной плате есть 4 светодиода, которые подключены к порту GPIOD выводы 5, 6, 7, 8. Для того чтобы включить светодиод, нужно просто подать на вывод 0 (reset), для того чтобы выключить соответственно - 1 (set)
Включить светодиод на выводе GPIOD5:
pin GPIOD 5 reset
Выключить:
pin GPIOD 5 set

Немного об LCD на плате
На отладочной плате для микросхем MDR1206FI есть LCD. Это MT-12864J-3FLW-3V0 , российский аналог KS0108. Он монохромный, имеет два контроллера по 64x64 бита, то есть 128x64. И управляется с помощью GPIO. Мы написали небольшой драйвер, чтобы продемонстрировать работоспособность, а описание контактов вынесли в board_config (наш аналог device tree) .
struct lcd_conf lcds[] = {
[0] = {
.status = ENABLED,
.dev = {
.name = "LCD",
.pins = {
PIN("DB0", GPIO_PORT_B, 6, 0),
PIN("DB1", GPIO_PORT_B, 7, 0),
PIN("DB2", GPIO_PORT_B, 8, 0),
PIN("DB3", GPIO_PORT_B, 9, 0),
PIN("DB4", GPIO_PORT_B, 10, 0),
PIN("DB5", GPIO_PORT_B, 11, 0),
PIN("DB6", GPIO_PORT_B, 12, 0),
PIN("DB7", GPIO_PORT_B, 13, 0),
PIN("CS1", GPIO_PORT_B, 4, 0),
PIN("CS2", GPIO_PORT_B, 5, 0),
PIN("RST", GPIO_PORT_A, 4, 0),
PIN("RW", GPIO_PORT_B, 14, 0),
PIN("RS", GPIO_PORT_B, 2, 0),
PIN("EN", GPIO_PORT_B, 3, 0),
},
},
.width = 128,
.height = 64,
.bits_per_pixel = 1,
},
};
МЭК 61131
И в завершении покажем видео, которое демонстрирует, как работает программа разработанная в среде Beremiz (МЭК 61131).
Пояснения
конфигурировать нужно командой:
make confload-project/plc/milandr_mdr1206fi
Для того чтобы узнать какие ST программы есть в системе, нужно вызвать
plc_info
Для того чтобы запустить какую-нибудь программу, нужно вызвать
plc_start <config_name>
Заключение
Все, как всегда, открыто, выложено в основную ветку проекта (https://github.com/embox/embox ). И вы можете воспроизвести самостоятельно. Короткая инструкция есть на нашем вики.
Отладочный комплект для микросхемы MDR1206FI ТСКЯ.468998.140 можно приобрести у компании “Миландр”. По вопросам приобретения необходимо обращаться на otm@milandr.ru или на ic@milandr.ru.
Ну и не могу не отметить, что в российском и открытом проекте Embox появляется поддержка все большего числа отечественных платформ, что позволяет говорить о развитии экосистемы в целом.
Полезные ссылки
Короткая инструкция на wiki https://github.com/embox/embox/wiki/Milandr_MDR1206FI_DEV
Описание микросхемы MDR1206FI https://ic.milandr.ru/products/mikrokontrollery_i_protsessory/32_razryadnye_mikrokontrollery/mdr1206fi/
Среда разработки Eclipse https://support.milandr.ru/base/primenenie/programmirovanie-32-razryadnykh-mk/nachalo-raboty/52433/
Отладочный комплект https://support.milandr.ru/products/programmno_otladochnye_sredstva/otladochnyy-komplekt-dlya-mikroskhemy-mdr1206fi/
rukhi7
получается, что можно исполняемые файлы в микроконтроллер добавлять и потом их запускать на выполнение, если я правильно понял. Это наверно главный признак настоящей Операционной Системы. По мне, так это прям реально круто, из этого можно столько всего сделать! Но подача материала у вас конечно очень специфичная (на мой, конечно, очень субъективный взгляд), как будто должна вызвать ностальгию у Стива Джобса, которого к сожалению уже нет.