OpenOCD与CH347实现STM32固件下载功能详解

目录

  • OpenOCD简介
  • CH347介绍
  • OpenOCD的编译
  • 基于STM32F1的固件烧写
  • FPGA的固件烧写
  • 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接口等。芯片资源如下:

    1. 2个高速串口,最高波特率达9Mbps
    2. 1个2线I2C接口
    3. 1个4线SPI接口,最高速率60MHz
    4. 1个JTAG接口
    5. 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_

    物联沃分享整理
    物联沃-IOTWORD物联网 » OpenOCD与CH347实现STM32固件下载功能详解

    发表回复