Использование бюджетных JTAG-отладчиков в PlatformIO

В этом туториале я хотел бы рассказать о том, как использовать ультрабюджетные JTAG-отладчики CJMCU FT232H и RV-Debugger-Lite в PlatformIO для прошивки и отладки устройств на платформах ESP32 и GD32. Полноценной инструкции на просторах интернета я не нашел, и в процессе настройки столкнулся со многими проблемами, поэтому этот туториал появляется здесь для вашего удобства. Оговорюсь сразу, что настройка прописана для Linux, но для Windows принципиальной разницы нет за исключением танцев с Zadig.

CJMCU FT232H + ESR32 Rev1 aka ESP32Dev

Имеется в виду вот этот дебаггер на основе чипа FT232H:

7fca785b29ab01044520b368a3b3084e.jpg

И вот эта плата на основе ESP-WROOM-32:

fabce166c288cf13e30b0bc5b16be7de.png

Настройки platformio.ini:

[env:esp32dev]
platform = espressif32
framework = arduino
board = esp32dev
monitor_speed = 115200
upload_speed = 921600
debug_tool = minimodule
upload_protocol = minimodule

Здесь у нас CJMCU FT232H за 700 рублей будет прикидываться отладчиком FT2232H MINI MODULE за 4500. Для этого необходимо внести следующие изменения в файл (закомментированные мной строки начинаются с ##):

/home//.platformio/packages/tool-openocd-esp32/share/openocd/scripts/interface/ftdi/minimodule.cfg

#
# FTDI MiniModule
#
# http://www.ftdichip.com/Support/Documents/DataSheets/Modules/DS_FT2232H_Mini_Module.pdf
#

interface ftdi
##ftdi_device_desc "FT2232H MiniModule"
##ftdi_vid_pid 0x0403 0x6010
ftdi_vid_pid 0x0403 0x6014

# Every pin set as high impedance except TCK, TDI, TDO and TMS
ftdi_layout_init 0x0008 0x000b

# nSRST defined on pin CN2-13 of the MiniModule (pin ADBUS5 [AD5] on the FT2232H chip)
# This choice is arbitrary. Use other GPIO pin if desired.
##ftdi_layout_signal nSRST -data 0x0020 -oe 0x0020

## added
# interface 1 is the uart
ftdi_channel 0

reset_config none

Немаловажно закомментировать описание отладчика minimodule"ftdi_device_desc", иначеCJMCU FT232H не получит прав доступа. В том же файле мы меняем пару VID/PID, и ее же прописываем в:

/etc/udev/rules.d/99-platformio-udev.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="6014",
GROUP="plugdev", MODE="0666"

чтобы отладчик определялся.

Подключение следующее:

Функция JTAG

CJMCU FT232H

ESP32Dev

TDO

AD2

GPIO15

TDI

AD1

GPIO12

TCK

AD0

GPIO13

TMS

AD3

GPIO14

+3.3V

3V3

GND

GND

CJMCU FT232H + Sipeed Longan Nano

Имеется в виду вот такая вот плата на основе чипа GD32VF103CBT6:

1de37b5750fe43dfc208859038d5fa5f.png

Настройки platformio.ini:

[env:sipeed-longan-nano]
platform = gd32v
framework = gd32vf103-sdk
board = sipeed-longan-nano
monitor_speed = 115200
debug_tool = um232h
upload_protocol = um232h

Здесь у нас CJMCU FT232H будет прикидываться отладчиком UM232H за 2000 рублей. Для этого необходимо внести следующие изменения в файл:

/home//.platformio/packages/tool-openocd-gd32v/share/openocd/scripts/interface/ftdi/um232h.cfg

#
# FTDI UM232H as a JTAG interface
#
# http://www.ftdichip.com/Products/Modules/DevelopmentModules.htm#UM232H
#
# This should also work with a UM232H-B, but that has not been tested.
# Note that UM232H and UM232H-B are 3.3V only.
#

interface ftdi
#ftdi_device_desc "UM232H"
ftdi_vid_pid 0x0403 0x6014

##ftdi_layout_init 0xfff8 0xfffb
##ftdi_layout_signal nTRST -data 0x0100 -oe 0x0100
##ftdi_layout_signal nSRST -data 0x0200 -oe 0x0200

# interface 1 is the uart
ftdi_channel 0
# just TCK TDI TDO TMS, no reset
ftdi_layout_init 0x0008 0x000b
#ftdi_layout_init 0x0c08 0x0f1b
reset_config none

Здесь у нас чип совпадает, поэтому только закомментируем ftdi_device_desc, и не забываем внести описанные ранее изменения в 99-platformio-udev.rules.

Возможно вам придется поставить недостающую библиотеку libhidapi-hidraw0:

sudo apt-get install -y libhidapi-hidraw0

Подключение следующее:

Функция JTAG

CJMCU FT232H

Sipeed Longan Nano

TDO

AD2

JTDO

TDI

AD1

JTDI

TCK

AD0

JTCK

TMS

AD3

JTMS

+3.3V

3V3

GND

GND

RV-Debugger-Lite + Sipeed Longan Nano

И напоследок я хочу описать, как использовать ультрабюджетный отладчик RV-Debugger-Lite за 200 рублей.

f7a77303ba69e9d3ba05636de3fa1421.jpg

Настройки platformio.ini:

[env:sipeed-longan-nano]
platform = gd32v
framework = gd32vf103-sdk
board = sipeed-longan-nano
monitor_speed = 115200
debug_tool = sipeed-rv-debugger
upload_protocol = sipeed-rv-debugger

Здесь мы будем прикидываться его старшим братом Sipeed RV-Debugger. Сейчас его в продаже нет, но, если мне не изменяет память, он стоил в пределах 1000 рублей. Для этого мы редактируем файл:

/home//.platformio/packages/tool-openocd-gd32v/share/openocd/scripts/interface/ftdi/sipeed-rv-debugger.cfg

interface ftdi
##ftdi_device_desc "Dual RS232"
ftdi_vid_pid 0x0403 0x6010

#autoexit true

#interface cmsis-dap
transport select jtag
ftdi_layout_init 0x0008 0x001b
ftdi_layout_signal nSRST -oe 0x0020 -data 0x0020

Здесь мы только комментируем ftdi_device_desc, так как чип почти совпадает: у RV-Debugger FT2232D, а у RV-Debugger-Lite определяется как FT2232C, хотя на самом деле он CH552T. Пара VID/PID у них совпадает.

Подключение следующее:

Функция JTAG

RV-Debugger-Lite

Sipeed Longan Nano

TDO

TDO

JTDO

TDI

TDI

JTDI

TCK

TCK

JTCK

TMS

TMS

JTMS

3V3

3V3

GND

GND

Хочу подчеркнуть, что вся собранная информация была проверена мной лично на моих устройствах. Надеюсь, что данный туториал будет полезен многим для экономии времени.

Литература

PIO (platformio) JTAG FT232H ESP32

Бюджетный отладчик к ESP-32 и его настройка

Debugging Longan Nano

© Habrahabr.ru