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

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

Настройки 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/<username>/.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:

Настройки 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/<username>/.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 рублей.

Настройки 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/<username>/.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
