README.md

Проект изменений и дополнений оригинального кода OpenOCD (Open On-Chip Debugger) для поддержки российских микроконтроллеров RISC-V

Полностью открытый исходный код позволяет всем желающим быстрее осваивать проектирование и программирование устройств электроники на отечественных микроконтроллерах с процессорами открытой архитектуры RISC-V. Поэтому тестирование сборок данного ПО выполняется нами в первую очередь на доступных отладочных платах с открытыми проектами BluePill-MIK32 и BlueBird-VG015, с программаторами из открытых проектов BlueProg, DAPLink и DirtyJTAG.

 

Текущими модификациями решены следующие задачи:

 

1) Исправлена некорректная конфигурация инициализации доступа к отладочному порту микроконтроллера К1948ВК015/8 (MIK32 Amur), из-за которой становились бесполезными любые попытки загрузки прошивки без ручного переключения перемычек на запуск программы из ОЗУ (очищенного отключением питания), когда программа ранее загруженной прошивки назначала выводам с JTAG другие функции. Ниже изображены осциллограммы сигналов интерфейса JTAG при загрузке прошивки размером 2 Кбайта в ОЗУ микроконтроллера К1948ВК015/8 (MIK32 Amur) программатором на основе FT2232HL до и после добавления команды предварительного сброса init_reset run:

Осциллограммы сигналов интерфейса JTAG при загрузке прошивки размером 2 Кбайта в ОЗУ микроконтроллера К1948ВК015/8 (MIK32 Amur) программатором на основе FT2232HL до и после добавления команды предварительного сброса «init_reset run» Значит у большинства пользователей и разработчиков устройств с К1948ВК015/8 (MIK32 Amur) не было начального сброса этих микроконтроллеров при прошивке и отладке стандартными JTAG-программаторами с OpenOCD. Больше подробностей можно найти среди описаний и настроек опций в обновлённом файле конфигурации mik32.cfg для микроконтроллера К1948ВК015/8 (MIK32 Amur).

2) Поддержка программирования флеш-памяти 32-разрядных микроконтроллеров производства АО «НИИЭТ» и их отладки;

3) Отображение нестандартного CSR-регистра mcounten RISC-V ядра SCR1 микроконтроллера К1948ВК015/8 (MIK32 Amur) без использования опции riscv expose_csrs 2016=mcounten, которая выводит имя регистра с приставкой csr_;

4) Скрытие отображения диапазонов адресов CSR-регистров процессоров RISC-V при помощи опции riscv hide_csrs n[-m][...]. Это особенно полезно для несуществующих регистров, когда попытки чтения/записи их значений в режиме отладки вызывают исключение с кодом 2 (недопустимая инструкция) и могут приводить к нарушению логики отлаживаемой программы, что и было обнаружено при работе с микроконтроллером К1948ВК015/8 (MIK32 Amur). Примеры параметров опции скрытия несуществующих CSR-регистров RISC-V:

Из файла конфигурации mik32.cfg для микроконтроллера К1948ВК015/8 (MIK32 Amur):

riscv hide_csrs 1-767,770,771,774-831,837-1951,1955,1957-1967,1971-2015,2017-2815,2817,2819-2943,2945,2947-3071,3075-3199,3203-3856,3861-4095

Из файла конфигурации k1921vg015.cfg для микроконтроллера К1921ВГ015:

riscv hide_csrs 4-767,775-802,807-831,837-927,930-943,952-1826,1831-1951,1957-1967,1971-2815,2817,2823-2943,2945,2951-3071,3075-3199,3203-3856,3862-4095

5) Поддержка JTAG-программатора открытого проекта BlueProg, для которого добавлен соответствующий файл конфигурации blueprog.cfg, а также прописаны права доступа в Linux-файле 60-openocd.rules.

6) Поддержка недорогих высокоскоростных JTAG-программаторов на основе микросхемы CH347T китайской марки WinChipHead (WCH), одним из которых является модуль USB-HS-Bridge Board. В доработанном драйвере ch347.c добавлено управление линией SRST (System Reset — внешний аппаратный сигнал системного сброса микроконтроллера), для которой можно менять режим работы выхода с Open-Drain (по умолчанию) на Push-Pull при помощи соответствующей опции конфигурации. Подробности назначения всех выводов и доступные опции настроек программатора описаны в файле конфигурации ch347t.cfg;

7) Поддержка JTAG-программаторов открытого проекта DirtyJTAG на основе дешёвых адаптеров и отладочных плат с популярными микроконтроллерами серий STM32F101, STM32F103 и RP2040.

8) Скрытие сообщений о неверных идентификаторах отладочного интерфейса и ядра RISC-V микроконтроллера К1948ВК015/8 (MIK32 Amur);

9) Скрытие предупреждений об устаревших псевдонимах некоторых команд (при использовании в том числе Eclipse IDE), которые продолжают поддерживаться в самых свежих модификациях OpenOCD;

 

Пошаговая инструкция сборки OpenOCD для Windows

(проверено под Windows 10 x86_64 в MSYS2 2025-12-13 с MINGW64)

 

Установка сборочных зависимостей:

 

1) Скачать MSYS2 — ссылка на репозиторий с установочными файлами: Releases · msys2/msys2-installer, запустить и установить в папку по умолчанию C:\msys64;

2) В меню Пуск выбрать папку MSYS2 и запустить из неё консоль MSYS2 MINGW64;

3) Удовлетворить сборочные зависимости при помощи команды pacman -S для MINGW64:

pacman -S base-devel mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb mingw-w64-x86_64-libtool mingw-w64-x86_64-pkg-config mingw-w64-x86_64-libusb mingw-w64-x86_64-libftdi mingw-w64-x86_64-libjaylink mingw-w64-x86_64-hidapi mingw-w64-x86_64-capstone git autoconf automake

 

Загрузка файлов проекта

 

Используя команду git clone загрузить файлы проекта из репозитория в локальную папку:

git clone https://gitflic.ru/project/rus_mcu/openocd.git

Перейти в корневую папку проекта:

cd openocd

 

Команды конфигурации и сборки

 

Команды запускаются в корневой папке проекта. Особенности сборки выбираются опциями команды configure, которые можно изучить, запустив конфигуратор с ключом --help. Опция --enable-internal-jimtcl добавлена для использования свежего встроенного пакета библиотек jimtcl, иначе конфигуратор использует по умолчанию внешнюю библиотеку, которой нет в MSYS2. Более новый встроенный пакет библиотек libjaylink включён опцией --enable-internal-libjaylink. Для ускорения сборки используется опция --jobs 8, которая увеличивает количество параллельных сборочных процессов до 8-ми (настройте её по-своему). На время сборки попробуйте отключить антивирус и/или свернуть окно терминала MSYS2, чтобы немного освободить процессор компьютера от решения бесполезных задач по проверке большого количества файлов и отображению непрерывного потока выводимого текста. Команда strip -s уменьшает размер исполняемого файла openocd.exe удалением из него отладочной информации и прочих ненужных для его работы данных.

./bootstrap
./configure --prefix="${PWD}/out" --disable-werror --enable-internal-jimtcl --enable-internal-libjaylink
make --jobs 8
strip -s src/openocd.exe
make install --jobs 8

В завершении сборки необходимо выполнить команду копирования файлов библиотек из системной папки mingw64:

cp C:/msys64/mingw64/bin/{libftdi1.dll,libhidapi-0.dll,libjaylink-0.dll,libusb-1.0.dll,libcapstone.dll} out/bin

Собранный после успешного выполнения всех команд пакет OpenOCD будет располагаться в папке out, а его исполняемый файл openocd.exe — в подпапке bin вместе c файлами библиотек, которые копируются из системной папки последними.

Чтобы при повторных сборках после внесения изменений в файлы исходного кода не повторялась генерация конфигурации и не копировалось большое количество файлов в папку out, достаточно выполнить команду make --jobs 8. Вновь собранный исполняемый файл openocd.exe располагается в папке src. Очистка от выходных файлов производится командой make clean.

 

В проекте используется открытый исходный код из нескольких источников:

 

1) Пакет openocd из репозитория openocd-org от 01.02.2026: openocd-db34f6f0a71baa9c97794cb347dc3c74b3ef729d

2) Пакет jimtcl из репозитория msteveb от 15.01.2026: jimtcl-3e67a350b50fb38f4159a870bef3f5bb6b236855

3) Пакет libjaylink из репозитория libjaylink от 16.12.2025: libjaylink-6f43303e114c1d376a46a34bff02c6cec36c740a

4) Драйверы флеш-памяти микроконтроллеров производства АО «НИИЭТ» из пакета openocd репозитория niiet от 23.09.2025: niiet/openocd-ed64294116beb6bc335a6c5809b46a87add8042a

5) Патч с драйвером DirtyJTAG из пакета openocd в обсуждениях разработчиков от 19.01.2023: jtag: add support for adapter DirtyJTAG

 

* * *

   

Результаты сравнительных тестов OpenOCD предыдущего выпуска (20250920-4ae92ee) и OpenOCD текущего выпуска (20260201-db34f6f) под Windows 10 x86_64 на скорость чтения дампа размером 100 Кбайт из флеш-памяти микроконтроллера К1921ВГ015 некоторыми из доступных JTAG-программаторов:

 

WCH-LinkW-V3.4-CH32V208-20250108(CMSIS-DAP V2.0.0), adapter speed 2000

openocd-20250920-4ae92ee openocd-20260201-db34f6f
12.136 KiB/s 14.306 KiB/s

WCH-LinkE-V3.9-CH32V305-20251015(CMSIS-DAP V2.0.0), adapter speed 2000

openocd-20250920-4ae92ee openocd-20260201-db34f6f
12.364 KiB/s 14.353 KiB/s

DirtyJTAG-V2.0-STM32F103C8T6-20221214, adapter speed 1000

openocd-20250920-4ae92ee openocd-20260201-db34f6f
14.497 KiB/s 17.286 KiB/s

BlueProg-CH552-V2.7-20260209, adapter speed 1600

openocd-20250920-4ae92ee openocd-20260201-db34f6f
13.537 KiB/s 18.198 KiB/s

DAPLink-V2.1.0-CH32V203-20250604, adapter speed 2000

openocd-20250920-4ae92ee openocd-20260201-db34f6f
16.966 KiB/s 20.632 KiB/s

J-Link-OB-STM32F103-V1-20250401101253, adapter speed 2000

openocd-20250920-4ae92ee openocd-20260201-db34f6f
24.570 KiB/s 42.313 KiB/s

J-Link-V9.70-STM32F205-20210507162612, adapter speed 1875

openocd-20250920-4ae92ee openocd-20260201-db34f6f
25.864 KiB/s 48.902 KiB/s

CH347T-V4.41, adapter speed 1875

openocd-20250920-4ae92ee openocd-20260201-db34f6f
49.184 KiB/s 69.527 KiB/s

FT2232HL, adapter speed 1875

openocd-20250920-4ae92ee openocd-20260201-db34f6f
61.892 KiB/s 104.102 KiB/s

 

Ссылки на официальные странички программного обеспечения

 

MSYS2 — Software Distribution and Building Platform for Windows

OpenOCD — Open On-Chip Debugger

OpenOCD Code Review — Official site

Jim Tcl — Small footprint implementation of the Tcl programming language

jimtcl — Official repository of Jim Tcl, an open-source, small footprint implementation of Tcl

libusb — Cross-platform library to access USB devices

libFTDI — FTDI USB driver with bitbang mode

HIDAPI — Simple cross-platform library for communicating with HID devices — GitHub repository

libjaylink — Shared library written in C to access SEGGER J-Link and compatible devices

Capstone — Lightweight multi-platform, multi-architecture disassembly framework

SCR1 — SCR1 is a high-quality open-source RISC-V MCU core in Verilog

mik32-uploader — Скрипт программирования памяти микроконтроллера MIK32 Amur (К1948ВК015/К1948ВК018) производства АО «Микрон»

niiet/openocd — OpenOCD с драйверами флеш-памяти для микроконтроллеров производства АО «НИИЭТ»

Описание
OpenOCD для российских микроконтроллеров RISC-V
Релизы
последний
Конвейеры
0 успешных
0 с ошибкой
Разработчики