Проект изменений и дополнений оригинального кода OpenOCD (Open On-Chip Debugger) для поддержки российских микроконтроллеров RISC-V
Текущими модификациями решены следующие задачи:
1) Поддержка JTAG-программатора в виде модуля USB-HS-Bridge Board с микросхемой CH347T китайской марки WinChipHead (WCH), в первую очередь для RISC-V микроконтроллеров на доступных отладочных платах полностью открытых проектов BluePill-MIK32 и BlueBird-VG015 со стандартными 20-контактными разъёмами JTAG. В применяемом драйвере ch347t.c пока ещё не реализован сброс отладочного порта посредством семи тактов TCK при высоком уровне TMS, поэтому подключение линии TRST является обязательным. Подробности назначения всех выводов и доступные опции настроек программатора описаны в файле конфигурации ch347t.cfg;
2) Поддержка программирования флеш-памяти 32-разрядных микроконтроллеров производства АО «НИИЭТ» и их отладки;
3) Отображение нестандартного CSR-регистра mcounten
RISC-V ядра SCR1 микроконтроллера MIK32 Amur (К1948ВК015/К1948ВК018) без использования опции riscv expose_csrs 2016=mcounten
, которая выводит имя регистра с приставкой csr_
;
4) Скрытие сообщений о неверных идентификаторах отладочного интерфейса и ядра RISC-V микроконтроллера MIK32 Amur (К1948ВК015/К1948ВК018);
5) Скрытие предупреждений об устаревших псевдонимах некоторых команд (при использовании Eclipse IDE), которые продолжают поддерживаться в самых свежих модификациях OpenOCD
;
6) Скрытие отображения диапазонов адресов CSR-регистров процессоров RISC-V при помощи опции riscv hide_csrs n[-m][...]
. Это особенно полезно для несуществующих регистров, когда попытки чтения/записи их значений в режиме отладки вызывают исключение с кодом 2 (недопустимая инструкция) и могут приводить к нарушению логики отлаживаемой программы, что и было обнаружено при работе с микроконтроллером MIK32 Amur (К1948ВК015/К1948ВК018). Примеры параметров опции скрытия несуществующих CSR-регистров RISC-V:
Из файла конфигурации mik32.cfg для микроконтроллера MIK32 Amur (К1948ВК015/К1948ВК018):
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
7) Поддержка JTAG-программатора BlueProg, для которого добавлен соответствующий файл конфигурации blueprog.cfg.
8) Поддержка JTAG-программаторов проекта DirtyJTAG на основе дешёвых адаптеров и отладочных плат с популярными микроконтроллерами серий STM32F101, STM32F103 и RP2040.
Пошаговая инструкция сборки OpenOCD
для Windows
(проверено под Windows 10 x86_64
в MSYS2 2025-08-30 с 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
. Для ускорения сборки используется опция --jobs 8
, которая увеличивает количество параллельных сборочных процессов до 8-ми (настройте её по-своему). На время сборки попробуйте отключить антивирус и/или свернуть окно терминала MSYS2
, чтобы немного освободить процессор компьютера от решения бесполезных задач по проверке большого количества файлов и отображению непрерывного потока выводимого текста. Команда strip -s
уменьшает размер исполняемого файла openocd.exe
удалением из него отладочной информации и прочих ненужных для его работы данных.
./bootstrap
./configure --prefix="${PWD}/out" --disable-werror --enable-internal-jimtcl
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 файлами библиотек, которые копируются из системной папки последними.
Чтобы при повторных сборках после внесения изменений в файлы исходного кода не повторялась генерация конфигурации и не копировалось большое количество файлов пакета OpenOCD
в папку out
, достаточно выполнить команду make --jobs 8
. Вновь собранный исполняемый файл openocd.exe
располагается в папке src
. Очистка от выходных файлов производится командой make clean
.
В проекте применён открытый исходный код из следующих репозиториев:
1) Пакет openocd
из репозитория openocd-org
от 20.09.2025: openocd-4ae92ee3b9c8c2eaa07dc22262cdc2c1eec6412d
2) Пакет jimtcl
из репозитория msteveb
от 28.08.2025: jimtcl-5575c554c2e6e8a55655dc61e49cff7ccb71bf48
3) Драйверы флеш-памяти микроконтроллеров производства АО «НИИЭТ» из пакета openocd
репозитория niiet
от 23.09.2025: niiet/openocd-ed64294116beb6bc335a6c5809b46a87add8042a
4) Патч с опцией riscv hide_csrs n[-m][...]
для скрытия отображения диапазонов адресов CSR-регистров RISC-V из пакета openocd
в обсуждениях разработчиков от 09.07.2024: target/riscv: hide_csrs configuration option
5) Патч с драйвером DirtyJTAG
из пакета openocd
в обсуждениях разработчиков от 19.01.2023: jtag: add support for adapter DirtyJTAG
Ссылки на официальные странички программного обеспечения
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
niiet/openocd — OpenOCD с драйверами флеш-памяти для микроконтроллеров производства АО «НИИЭТ»
niiet_riscv_sdk — Набор средств разработки (SDK) для микроконтроллеров RISC-V производства АО «НИИЭТ»
mik32-uploader — Скрипт программирования памяти микроконтроллера MIK32 Amur (К1948ВК015/К1948ВК018) производства АО «Микрон»
Описание
OpenOCD для российских микроконтроллеров RISC-V