OpenOCD与CH347实现STM32固件下载功能详解
目录
OpenOCD简介
OpenOCD(Open On-Chip Debugger)作为开源的硬件调试器,使用标准的JTAG接口与芯片进行通信,可对嵌入式芯片进行下载和调试,支持各种不同的硬件平台,如ARM、MIPS、Cortex-M、Cortex-A、Cortex-R、PowerPC和RISC-V等架构的微控制器和处理器。
CH347介绍
CH347是一款高速USB总线转接芯片,通过USB总线提供异步串口、I2C同步串行接口、SPI同步串行接口和JTAG接口等。芯片资源如下:
- 2个高速串口,最高波特率达9Mbps
- 1个2线I2C接口
- 1个4线SPI接口,最高速率60MHz
- 1个JTAG接口
- 1个SWD接口
芯片封装分为T/F两种,CH347F可实现多功能同时使用,CH347T则需要进行相应模式切换。
OpenOCD的编译
这里主要介绍Linux系统下的编译,Windows系统可直接下载沁恒提供的release版本(https://github.com/WCHSoftGroup/ch347/releases/tag/CH347_OpenOCD_Release)
#克隆仓库
git clone https://github.com/WCHSoftGroup/ch347.git
#进入目录,创建一个输出文件夹
cd ch347/;mkdir output;cd OpenOCD_SourceCode_CH347/
#运行编译脚本,YOUR_OUTPUT_PATH为刚创建的输出文件夹路径
./bootstrap
./configure --enable-ch347 --prefix=YOUR_OUTPUT_PATH
#执行结果如下,可看到已经成功使能CH347,接下来直接make install
OpenOCD configuration summary
--------------------------------------------------
MPSSE mode of FTDI based devices yes (auto)
ST-Link Programmer yes (auto)
TI ICDI JTAG Programmer yes (auto)
Keil ULINK JTAG Programmer yes (auto)
Altera USB-Blaster II Compatible yes (auto)
Bitbang mode of FT232R based devices yes (auto)
Versaloon-Link JTAG Programmer yes (auto)
TI XDS110 Debug Probe yes (auto)
CMSIS-DAP v2 Compliant Debugger yes (auto)
OSBDM (JTAG only) Programmer yes (auto)
eStick/opendous JTAG Programmer yes (auto)
Olimex ARM-JTAG-EW Programmer yes (auto)
Raisonance RLink JTAG Programmer yes (auto)
USBProg JTAG Programmer yes (auto)
Espressif JTAG Programmer yes (auto)
Mode 3 of the CH347 devices yes
CMSIS-DAP Compliant Debugger yes (auto)
Nu-Link Programmer yes (auto)
Cypress KitProg Programmer yes (auto)
Altera USB-Blaster Compatible yes (auto)
ASIX Presto Adapter yes (auto)
OpenJTAG Adapter yes (auto)
Linux GPIO bitbang through libgpiod no
SEGGER J-Link Programmer no
Bus Pirate yes (auto)
Use Capstone disassembly framework no
#make install
make install
#等待编译完成...
s,^./tcl,,'); do \
j="/home/develop_pro/CH347_Linux/ch347/output/share/openocd/scripts/$i" && \
mkdir -p "$(dirname $j)" && \
/usr/bin/install -c -m 644 ./tcl/$i $j; \
done
...
#进入输出目录确认OpenOCD执行文件
基于STM32F1的固件烧写
OpenOCD的使用离不开cfg文件的指定,对于MCU来说一般需要准备两个cfg文件,分别对应目标板与烧录器:
目标板cfg :我们可在output/share/openocd/scripts/target目录下找到stm32f1x.cfg文件,对于其他没有包含在文件夹下的设备可自行书写cfg。
烧录器cfg :
#指定CH347设备
adapter driver ch347
#指定为jtag方式,若使用swd下载,替换为transport select swd
transport select jtag
#设置TCK时钟频率
adapter speed 1000
烧写hex:
./openocd -f ch347.cfg -f stm32f1x.cfg -c "program led.hex" -c reset
Open On-Chip Debugger 0.12.0+dev-g28f72ea-dirty (2024-05-11-14:22)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz
Info : CH347 Open Succ.
Info : clock speed 1000 kHz
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x06414041 (mfg: 0x020 (STMicroelectronics), part: 0x6414, ver: 0x0)
Info : [stm32f1x.cpu] Cortex-M3 r1p1 processor detected
Info : [stm32f1x.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x06414041 (mfg: 0x020 (STMicroelectronics), part: 0x6414, ver: 0x0)
[stm32f1x.cpu] halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080008bc msp: 0x20000688
** Programming Started **
Info : device id = 0x10036414
Info : flash size = 512 KiB
Warn : Adding extra erase range, 0x080009f8 .. 0x08000fff
** Programming Finished **
Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x3)
Info : JTAG tap: stm32f1x.bs tap/device found: 0x06414041 (mfg: 0x020 (STMicroelectronics), part: 0x6414, ver: 0x0)
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
^Cshutdown command invoked
Info : Close the CH347.
注:program烧录命令 、-c reset为下载后复位
FPGA的固件烧写
至于FPGA的烧录可参考:
CH347应用–USB TO JTAG进行FPGA调试下载
作者:LeoZY_