"Micron IDE" и сторонние JTAG-адаптеры

ejsanyo

Active member
Предлагаю поднять такую тему по обмену практическим опытом, кто чем и как шьётся.
Адаптеры "сторонние" в том плане, что не интегрированы в какую-нибудь готовую отладочную плату, с теми-то всё и так (вроде бы?) понятно и должно работать.
Начну, конечно же, с себя.
Как оказалось, для этого можно вполне приспособить отладчик от "как бы кетайских конкурентов" под названием "Sipeed RV-Debugger Lite".

На Aliexpress-е этих штук продаётся навалом и за дёшево, гораздо дешевле чем платы на FT2232HL. За эти деньги вы получаете базовую функцию JTAG-интерфейса плюс базовый USB-UART, что удобно. Шьёт чипы небыстро, но вроде достаточно стабильно.
Подсказку увидел на Хабре в теме про, в общем-то, PlatformIO. Но мы-то знаем, что там, что в Эклипсе, под капотом прячется один и тот же OpenOCD, так что принципиальной разницы нет.
А значит, открываем в проекте файл scripts/m-link.cfg и правим его как-то так:
C-like:
adapter driver ftdi

# для FT2232HL
# ftdi vid_pid 0x0403 0x6014

# для Sipeed RV Debugger Lite
ftdi_vid_pid 0x0403 0x6010

transport select jtag

# раскладка для FT2232HL
# ftdi layout_init 0x00f8 0x00fb
# ftdi layout_signal nSRST -noe 0x0040
# ftdi layout_signal nTRST -data 0x0010

# раскладка для Sipeed RV Debugger Lite
ftdi_layout_init 0x0008 0x001b
ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020
Выхода TRST у этого адаптера нет, но всё работает и без него (или не работает, но уже по каким-то другим причинам).
 
Последнее редактирование:

ejsanyo

Active member
Как ещё один вариант, проверил в работе плату на основе чипа FT4232HL. Вот такую:

По сравнению с FT2232HL это практически то же самое...но в два раза больше. Т.е. на FT2232HL два канала USB-UART, один из которых может превратиться в JTAG, а на FT4232HL мы имеем уже целых четыре канала USB-UART, два из которых (A и B) могут превратиться в JTAG. В каких-то случаях это может быть удобно, например, когда хочется подключить больше UART-ов. Но нужно иметь ввиду, что и цена у такой платы минимум раза в два выше.:sneaky:
Отличия в настройках также минимальны. У FT4232HL другой PID, а также в его случае нужно указать, с каким из каналов JTAG мы будем работать (0 или 1). Так что дописываем наш scripts/m-link.cfg
C-like:
adapter driver ftdi

# для FT2232HL
# ftdi vid_pid 0x0403 0x6014

# для FT4232HL
ftdi vid_pid 0x0403 0x6011
ftdi channel 0

# для Sipeed RV Debugger Lite
# ftdi_vid_pid 0x0403 0x6010

transport select jtag

# раскладка для FT2232HL и FT4232HL
ftdi layout_init 0x00f8 0x00fb
ftdi layout_signal nSRST -noe 0x0040
ftdi layout_signal nTRST -data 0x0010

# раскладка для Sipeed RV Debugger Lite
# ftdi_layout_init 0x0008 0x001b
# ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020
И подключаем контроллер к соответствующим пинам канала A или B на плате (их назначение см. в даташите от FTDI)
 

ejsanyo

Active member
Вот, подошло ещё одно изделие от "как бы кетайских конкурентов", под названием "Sipeed RV-Debugger Plus".

В целом, для пользователя очень похоже на изделие в первом посте с приставкой "Lite": им так же завален Aliexpress, продаётся немного дороже Lite-версии. На борту JTAG-интерфейс плюс USB-UART, в котором зачем-то теперь есть сигналы DTR и RTS.
Настройки файла scripts/m-link.cfg, драйвера и манипуляции ими через zadig подходят абсолютно все те же, что в первом посте про Lite, .т.е. его прошивка всё так же имитирует интерфейс многострадального FT2232. Да, похоже китайским проггерам как-то по барабану на авторские права FTDI. :sneaky:
USB здесь по прежнему первой версии, за счёт чего вероятно шьёт память оно медленнее, чем настоящий FT2232, но всё же быстрее, чем Lite-версия. Надо полагать, за счёт более быстрого контроллера на борту, который тут почему-то лютая кетайская экзотика от Bouffalo Lab. И вообще, у него на борту на самом деле есть Bluetooth, но он не используется, а антеннка не запаяна.
Вот, послушайте-ка мою тру-стори, связанную с этим дебаггером. Где-то в 2022 году купил я его, по случаю желания поработать с чипами GD32VF103 от ГигаДевайса. Поначалу не разобрался, как подружить его с PlatformIO, и решил, что виной всему кривая или устаревшая прошивка. Тем более, вроде код для неё лежит в открытом доступе...правда вот что-то готового файла нет. который можно было бы просто так взять и зашить. Ну я, снова не разобравшись, взял, ещё немного погуглил и нашёл файл под названием "usb2dualuart_bl702.bin". И зашил его...только вот оказалось, что вообще не то что нужно, а демо-пример для какой-то макетки от Sipeed (подозреваю, что на её основе и сделана эта плата). В общем, оно превращает её в банальный сдвоенный переходник USB-UART, и никакого JTAG-а! Когда до меня это дошло, облом был сказочный, поскольку стоковую прошивку из чипа я не вычитал. :eek: Дальше было много-много гугления и попыток скомпилять из исходников то, что должно называться "usb2uartjtag_bl702.bin", но всё без толку. С кетайскими IoT-чипами не пошутишь, то ли, может, просто руки были кривые.
Но вот, на Микроне пришло время снова подключаться через JTAG, что напомнило мне и про эту окирпиченную плату. Снова качаю исходники, снова пытаюсь скомпилять их, снова фиаско. Похоже, автор с тех пор забросил данный проект. Снова гуглим готовый бинарник, снова бесполезные ссылки и блуждание по китайским форумам. Но тут вдруг вспомнилось, как cryptozoy напомнил мне про такое явление на гитхабах, под названием "форки". И их для данного проекта оказалось немало, в том числе от некто yuk1i. Где меня поджидал он! Готовый бинарник. Выложенный 13 марта. Ну почему нельзя было сразу сделать так?! Я ДЖВА ГОДА ЖДАЛ ЭТОТ БИНАРНИК!!! Серьёзно, хотел уже выкинуть эту поделку несуразную за ненадобностью, но что-то меня всё останавливало.

И вот, когда вы всё это дочитали, пришло время возвращать правильную прошивку в ваш "Sipeed RV-Debugger Plus":
  • Скачайте мою коллекцию всякого разного для кетайского чипа.
  • Зажав кнопу boot, воткните плату в USB. Да вы и сами это знаете, раз уж убили прошивку.
  • Поставятся драва на виртуальный COM-порт. Если они не встанут сами, попробуйте при помощи zadig поставить на плату универсальные под названием "USB Serial (CDC)".
  • Запомните номер получившегося COM-порта и отредактируйте его в файле Flash.bat
  • Запустите Flash.bat, дождитесь пока прошивка запишется.
  • Перетыкните плату в USB. Теперь всё должно заработать.
 
Использую ELJTAG - программатор от Elron*.

Работает на чипе FT2232HL, шьёт и позволяет отлаживать RISC-V и ARM камни, неплохо показал себя при работе с ESP32.

Код:
#
# FT2232HL for openOCD Device
#

interface ftdi
# ftdi_device_desc "Dual RS232-HS (Interface 1)"
ftdi vid_pid 0x0403 0x6010

ftdi channel 1

transport select jtag

ftdi layout_init 0x00f8 0x00fb
ftdi layout_signal nSRST -noe 0x0040
ftdi layout_signal nTRST -data 0x0010
Обратите внимание, что в отличии от аналогов интерфейс JTAG доступен на 1, а не на 0 канале. На 0 канале UART (порт-конструктор-сделай-сам). Важно при установке драйвера с помощью zadig.

* данный пост не является рекламой!
 

mjd

New member
А такой адаптер WCH-LinkE-R0 1V3 можно использовать для прошивки амура ?



Китайские Risc-V микроконтроллеры он прошивает. Если можно то какие настройки для m-link.cfg ?
 
Последнее редактирование:

ejsanyo

Active member
А такой адаптер WCH-LinkE-R0 1V3 можно использовать для прошивки амура ?
Эта штука прошивает либо ARM-ы через SWD, либо если на RISC-V, то только изделия от WCH (под которыми мы подразумеваем их линейку чипов CH32V)! И никакие другие, тем более российские!
Эти кетайцы, когда стали делать свою линейку RISC-V, решили зачем-то изобрести свой велосипед и сделали некий SWD-подобный интерфейс для прошивки и отладки, совместимый только с самим собой. Вероятно, чтобы количество ног, на него отводимых, было немного меньше.
В Микроне так выёживаться не стали, и взяли стандартный JTAG. И спасибо им хотя бы на этом!
 

mjd

New member
Спасибо за быстрый ответ! Я спросил про этот программатор потому что он работает с openocd и предположил что им тоже можно будет прошиваться...
 

mscs

Member
А такой адаптер WCH-LinkE-R0 1V3 можно использовать для прошивки амура ?
Нужно пробовать. Этот адаптер имеет специальную версию встроенного ПО, которая обеспечивает работу в режиме JTAG (без сигнала TRST). Со стороны openocd этот режим поддерживается драйвером ch347. В руководстве пользователя (файл WCH-LinkUserManual.pdf) подробно описана процедура перевода WCH-LinkE в указанный режим (п. 7, стр. 21).
 

mjd

New member
Обязательно попробую эту специальную версию встроенного ПО, но сначала нужно понять какие настройки сделать в m-link.cfg ?
 

ejsanyo

Active member
Обязательно попробую эту специальную версию встроенного ПО, но сначала нужно понять какие настройки сделать в m-link.cfg ?
Я так понимаю, этот скрипт просто передаёт конфиг в OpenOCD. Так что и манул следует читать именно на него.
Но вот что-то я там про WCH-отладчик упоминаний не вижу. Может, нужна какая-то особо пропатченная версия OpenOCD? Какая именно, я пока как-то не разбирался, просто брал MounRiver Studio и в ней всё делал. Может быть, можно просто выдрать OpenOCD из неё и пересадить в Mikron IDE? 😗
PS: Да, как бы намекает, openocd-wch.
 
Последнее редактирование:

mscs

Member
Обязательно попробую эту специальную версию встроенного ПО, но сначала нужно понять какие настройки сделать в m-link.cfg ?
Насколько я понимаю, такие:
Код:
# Specify WCH-LinkE high-speed JTAG debugger
adapter driver ch347
ch347 vid_pid 0x1a86 0x55dd

# Set TCK clock frequency
adapter speed 2000
 

ejsanyo

Active member
А давайте-ка попробуем скрестить "ежа с ужом" RISC-V с ARM! 😜 Попалась мне тут во временное пользование фирменная коробочка от Keil под названием ULINK2.

В Интернетах в основном считают, что она ни с чем, кроме как с родным Keil MDK не совместима. Но это не совсем так. В недрах этой самой Keil MDK прячется маленькая настроечная программа под названием UL2_Configure.exe С помощью неё можно выбрать режим её работы. Первый - это нативный "ULINK", а второй - ни что иное, как полностью стандартный CMSIS-DAP, который поддерживается много каким софтом, и в частности, нашим "любимым" OpenOCD! Причём что странно, после переключения режима возможность работы в Кейле в родном режиме "ULINK" не пропадает, но дополнительно появляется и CMSIS-DAP. А раз уж можно одновременно и в тот, и в другой режим, то не очень понятно, зачем разработчики коробки вообще сделали ей этот "переключатель"...ну да ладно.

А мы в свою очередь сделаем следующее:
Запускаем программу с ключом:
Bash:
C:\Keil_v5\ARM\ULINK\Utilities>UL2_Configure.exe B1
Ждём пока переключение режима провернётся.
Правим scripts/m-link.cfg, теперь он будет совсем простым:
Код:
adapter driver cmsis-dap
transport select jtag
Подключаем к своей плате шлейф коробки в соответствии с его распиновкой:


Если картинку не видно, гуглите "ULINK2 Pinout".
По крайней мере, нужно подключить TDI, TDO, TCLK, TMS, GND и VCC. Да, в этой коробке VCC - это вход, проверяющий, что на вашей плате есть питание! Если его не подключить, то интерфейс даже не попытается работать.
На этом всё. Прошиваемся, отлаживаемся как обычно. ULINK2 работает, как ему и положено: быстро и очень стабильно. Единственный минус здесь - это цена вопроса. У меня коробка фирменная, и сейчас она стоит на рынке каких-то безумных денег! Китайские копии стоят значительно дешевле, но всё равно довольно дорого, а умеют ли они в CMSIS-DAP режим, как и оригинальные? Или только в ULINK? Пока не проверял, не знаю.
 
Последнее редактирование:

ejsanyo

Active member
Некоторое замечание про Sipeed RV-Debugger Plus: обнаружил, что через некоторые USB-хабы (в основном те, что поддерживают только режим USB 1.x) данное изделие нормально не работает - LibUSB его просто не видит. При том, что в системе оно как бы видится, и драйвера стоят. А через другие USB-хабы всё нормально работает! Так что если замечаете аномалии в его работе, попробуйте воткнуть в другой разъём.
 

Zuse

New member
А давайте-ка попробуем скрестить "ежа с ужом" RISC-V с ARM! 😜 Попалась мне тут во временное пользование фирменная коробочка от Keil под названием ULINK2.

В Интернетах в основном считают, что она ни с чем, кроме как с родным Keil MDK не совместима. Но это не совсем так. В недрах этой самой Keil MDK прячется маленькая настроечная программа под названием UL2_Configure.exe С помощью неё можно выбрать режим её работы. Первый - это нативный "ULINK", а второй - ни что иное, как полностью стандартный CMSIS-DAP, который поддерживается много каким софтом, и в частности, нашим "любимым" OpenOCD! Причём что странно, после переключения режима возможность работы в Кейле в родном режиме "ULINK" не пропадает, но дополнительно появляется и CMSIS-DAP. А раз уж можно одновременно и в тот, и в другой режим, то не очень понятно, зачем разработчики коробки вообще сделали ей этот "переключатель"...ну да ладно.

А мы в свою очередь сделаем следующее:
Запускаем программу с ключом:
Bash:
C:\Keil_v5\ARM\ULINK\Utilities>UL2_Configure.exe B1
Ждём пока переключение режима провернётся.
Правим scripts/m-link.cfg, теперь он будет совсем простым:
Код:
adapter driver cmsis-dap
transport select jtag
Подключаем к своей плате шлейф коробки в соответствии с его распиновкой:


Если картинку не видно, гуглите "ULINK2 Pinout".
По крайней мере, нужно подключить TDI, TDO, TCLK, TMS, GND и VCC. Да, в этой коробке VCC - это вход, проверяющий, что на вашей плате есть питание! Если его не подключить, то интерфейс даже не попытается работать.
На этом всё. Прошиваемся, отлаживаемся как обычно. ULINK2 работает, как ему и положено: быстро и очень стабильно. Единственный минус здесь - это цена вопроса. У меня коробка фирменная, и сейчас она стоит на рынке каких-то безумных денег! Китайские копии стоят значительно дешевле, но всё равно довольно дорого, а умеют ли они в CMSIS-DAP режим, как и оригинальные? Или только в ULINK? Пока не проверял, не знаю.
А драйвер для ULINK2 с помощью Zadig сменить не нужно?
 
Последнее редактирование:

ejsanyo

Active member
А драйвер для ULINK2 с помощью Zadig сменить не нужно?
Нет, оно видится в компе как "классический" CMSIS-DAP v.1, то бишь автоматом ставятся стандартные HID-драва, и больше ничего для работы не требуется. По крайней мере у меня так.
Разве что может быть нюанс, если у вас ULINK2 давно куплен и всю жизнь работал лишь в паре с каким-нибудь совсем старым Keil-ом (третьим например). Тогда надо будет обновить прошивку до более актуальной версии, для этого достаточно где-нибудь раздобыть 😋 пятый Keil и хотя бы раз запустить под ним ULINK - он сам перепрошьёт коробку.
 
Последнее редактирование:

Zuse

New member
Нет, оно видится в компе как "классический" CMSIS-DAP v.1, то бишь автоматом ставятся стандартные HID-драва, и больше ничего для работы не требуется. По крайней мере у меня так.
Разве что может быть нюанс, если у вас ULINK2 давно куплен и всю жизнь работал лишь в паре с каким-нибудь совсем старым Keil-ом (третьим например). Тогда надо будет обновить прошивку до более актуальной версии, для этого достаточно где-нибудь раздобыть 😋 пятый Keil и хотя бы раз запустить под ним ULINK - он сам перепрошьёт коробку.
Keil у меня пятый. ULINK2 оригинальный, до сих пор я его использовал для работы с МК Cortex-M3 Миландра. Прочитав ваш пост про возможность программирования MIK32 с помощью ULINK2, решил попробовать прошить отладочную плату BluePill-MIK32


Прочитал инструкцию к этой плате. Скачал IDE по ссылке из инструкции


Развернул IDE и создал тестовый проект согласно инструкции


Далее, поскольку у меня нет ни BlueProg, ни FT2232, ни J-Link, про которые идет речь в инструкции, опираясь на описание настройки BlueProg, я сделал следующее:
-создал файл mik32-ide-v1-2-2/uploader/openocd-scripts/interface/ulink2.cfg
-записал в него текст:
adapter driver cmsis-dap
transport select jtag
-в MIK32 IDE в External Tools Configurations копированием START-MIK32-V1 Upload создал конфигурацию ULINK2 CMSIS-DAP Upload и прописал в аргументе openocd-interface ссылку на свой ulink2.cfg
-в MIK32 IDE в Debug Configurations копированием START-MIK32-V1 Debug создал конфигурацию ULINK2 CMSIS-DAP Debug и на вкладке Debug в поле Config Options поменял ссылку на ulink2.cfg
-в MIK32 IDE в Debug Configurations в Launch Group копированием START-MIK32-V1 Upload Debug создал конфигурацию ULINK2 CMSIS-DAP Upload Debug и на вкладке Launches в полях Program и GDB OpenOCD Debugging выбрал созданные ранее ULINK2 CMSIS-DAP Upload и ULINK2 CMSIS-DAP Debug

-запустил UL2_Configure.exe с параметром B1. Утилита ответила: Configuration updated!
-запустил Debug в MIK32 IDE и в ответ она ругнулась в консоли таким сообщением:

xPack Open On-Chip Debugger 0.12.0+dev-01850-geb6f2745b-dirty (2025-02-07-10:08)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : set servers polling period to 200ms
Warn : An adapter speed is not selected in the init scripts. OpenOCD will try to run the adapter at very low speed (100 kHz).
Warn : To remove this warnings and achieve reasonable communication speed with the target, set "adapter speed" or "jtag_rclk" in the init scripts.
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: JTAG supported
Info : CMSIS-DAP: FW Version = 1.0
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 1 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 100 kHz
Info : cmsis-dap JTAG TLR_RESET
Info : cmsis-dap JTAG TLR_RESET
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Error: riscv.cpu: IR capture error; saw 0x00 not 0x01
Info : cmsis-dap JTAG TLR_RESET
Warn : Bypassing JTAG setup events due to errors
Error: dtmcontrol is 0. Check JTAG connectivity/board power.
Error: [riscv.cpu] Examination failed
Warn : target riscv.cpu examination failed
Info : [riscv.cpu] starting gdb server on 3333
Info : Listening on port 3333 for gdb connections
Error: Target not examined yet

mik32-uploader-v0.3.3
Using MIK32V2
ERROR: Tcl port connection failed
Check connectivity and OpenOCD log

Потом MIK32 IDE еще чуть-чуть подумала и снова ругнулась:

xPack Open On-Chip Debugger 0.12.0+dev-01850-geb6f2745b-dirty (2025-02-07-10:08)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
DEPRECATED! use 'gdb port', not 'gdb_port'
DEPRECATED! use 'telnet port', not 'telnet_port'
DEPRECATED! use 'tcl port' not 'tcl_port'
Info : set servers polling period to 200ms
Warn : An adapter speed is not selected in the init scripts. OpenOCD will try to run the adapter at very low speed (100 kHz).
Warn : To remove this warnings and achieve reasonable communication speed with the target, set "adapter speed" or "jtag_rclk" in the init scripts.
Info : CMSIS-DAP: SWD supported
Info : CMSIS-DAP: JTAG supported
Info : CMSIS-DAP: FW Version = 1.0
Info : CMSIS-DAP: Interface Initialised (JTAG)
Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 1 TDO = 0 nTRST = 0 nRESET = 1
Info : CMSIS-DAP: Interface ready
Info : clock speed 100 kHz
Info : cmsis-dap JTAG TLR_RESET
Info : cmsis-dap JTAG TLR_RESET
Error: JTAG scan chain interrogation failed: all zeroes
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Error: riscv.cpu: IR capture error; saw 0x00 not 0x01
Info : cmsis-dap JTAG TLR_RESET
Warn : Bypassing JTAG setup events due to errors
Error: dtmcontrol is 0. Check JTAG connectivity/board power.
Error: [riscv.cpu] Examination failed
Warn : target riscv.cpu examination failed
Info : [riscv.cpu] starting gdb server on 3333
Info : Listening on port 3333 for gdb connections
Error: Target not examined yet

Ulink2 при запуске Debug'а пробует моргать лампочками. Если плату отключить от программатора ничего не меняется. Файла m-link.cfg в каталоге MIK32 IDE я не нашел.

Буду чертовски благодарен подсказке, куда копать! Спасибо!
 
Последнее редактирование:
Сверху