Всем привет

Недавно мы добавили в открытую ОСРВ Embox поддержку российского микроконтроллера на RISC-V, о чем я и хочу рассказать в данной статье. Речь пойдет о микроконтроллере MDR1206FI от компании “Миландр”.


На этом коротком видео можно видеть работу Embox на отладочном комплекте для микросхемы MDR1206FI, который нам любезно предоставила компания “Миландр”.

Ниже я расскажу, как это воспроизвести и немного потрохов для любителей. И на закуску покажу работу программы, разработанной в среде Beremiz (по стандарту МЭК-61131 для программирования ПЛК).

Сборка и запуск на плате

Подготовка окружения

Для запуска и отладки, нам как всегда потребуется открытый gdb сервер openocd. 

Подробную статью как собирать 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/

Комментарии (1)


  1. rukhi7
    06.10.2025 15:39

    получается, что можно исполняемые файлы в микроконтроллер добавлять и потом их запускать на выполнение, если я правильно понял. Это наверно главный признак настоящей Операционной Системы. По мне, так это прям реально круто, из этого можно столько всего сделать! Но подача материала у вас конечно очень специфичная (на мой, конечно, очень субъективный взгляд), как будто должна вызвать ностальгию у Стива Джобса, которого к сожалению уже нет.