hi

全部例程

OpenOCD:必备的嵌入式调试工具

W55MH32

更新于 2026年1月8日

Open On-Chip Debugger(OpenOCD)是一个开源的调试框架,为嵌入式系统提供全面的开发能力。对于W55MH32芯片,OpenOCD通过标准化的调试接口提供专业的调试、编程和测试工具。

特性

  • 多协议支持:JTAG、SWD、cJTAG、CMSIS-DAP接口
  • 跨平台兼容性:支持Windows、Linux、macOS
  • 生产就绪:自动化烧录、批量编程、验证
  • 开源:无厂商锁定,社区驱动开发
  • 可扩展架构:基于插件的接口驱动器和目标支持

OpenOCD 应用

  1. 开发与制造
    • 工业:生产线编程、工厂测试、批量更新
    • 汽车:ECU调试、信息娱乐系统更新、ADAS开发
  2. 消费电子与IoT
    • 消费电子:智能家居设备、可穿戴设备、家用电器
    • IoT系统:传感器网络、边缘设备、网关编程
  3. 医疗与专业领域
    • 医疗设备:诊断设备、病人监护仪、可穿戴健康设备
    • 航空航天/国防:航空电子测试、军用设备、无人机开发
  4. 服务与支持
    • 现场服务:现场设备维护、紧急维修、远程更新
    • 教育:嵌入式课程、学生项目、研究原型开发

工作原理

  1. 三层结构
    • 命令接口层:Telnet (4444)、GDB (3333)、其他协议
    • 服务器核心层:目标状态管理、闪存算法
    • 驱动层:接口驱动器、传输协议
  2. 配置系统
    OpenOCD使用分层配置方法:
    • 接口配置:调试适配器设置
    • 目标配置:MCU/CPU特定设置
    • 板级配置:开发板特定连接
    • 用户脚本:自定义初始化序列
  3. 针对W55MH32的通信流程
    • OpenOCD通过CMSIS-DAP连接到W55MH32
    • 识别目标芯片(W55MH32 ARM Cortex-M3)
    • 调试以暂停/恢复控制开始
    • 使用芯片特定算法进行闪存编程
    • 通过断点/观察点进行实时调试

实现过程(MicroPython环境)

此方法利用开发板集成的CMSIS-DAP调试接口对MicroPython固件进行编程。OpenOCD工具通过标准化接口提供全面的编程和调试能力。此方法需要连接CMSIS-DAP+UART+ISP端口,建议用于需要同时进行编程和串口控制台访问的开发环境。

所需硬件

  • W55MH32开发板
  • USB Type-C数据线(用于DAPLink端口)
  • 启用WSL2的Windows 10/11系统

软件要求

  • Windows: usbipd, 设备管理器访问权限
  • WSL: OpenOCD, GNU工具链, git, make

步骤 1:USB设备转发到WSL

此过程将开发板的USB编程接口从Windows转发到WSL环境,使基于Linux的工具能够访问硬件。

  1. 硬件连接

    1. 将Type-C数据线插入USB设备端口
    2. 打开设备管理器
    3. 导航到"通用串行总线设备"
    4. 确认设备列表中出现"CMSIS-DAP v2"
  2. 启动终端环境:
    1. 以管理员权限打开Windows PowerShell
    2. 打开一个WSL终端
  3. 在Windows PowerShell中执行以下命令序列:
    a. usbipd list
    * 识别对应W55MH32设备的USB端口。将显示总线ID(例如:4-3)。
    b. usbipd bind --busid 4-3
    * 此命令绑定指定的USB设备以用于WSL共享。
    c. usbipd attach --wsl --busid 4-3
    * 此命令将绑定的USB设备附加到WSL环境。
    注意:将 4-3 替换为 usbipd list 命令显示的实际总线ID。有关usbipd的详细文档,请参考此链接

  4. 通过检查WSL中的USB设备来验证连接:
    a. lsusb
  • 输出中应包含该设备

步骤 2:构建并烧录MicroPython

本节详细介绍了通过OpenOCD方法将MicroPython固件编译并编程到W55MH32开发板的过程。在继续之前,请确保所有先前的步骤——包括代码仓库准备、DFU引导加载程序安装和USB设备转发——均已成功完成。

1.在WSL终端中依次执行以下命令:

a. cd /home/你的用户名/micropython/ports/w55mh32
* 切换到MicroPython仓库中的W55MH32端口目录。
b. make clean
* 清理构建环境
c. make flash
* 编译并烧录固件

注意

2.将 /home/你的用户名 替换为您的MicroPython安装的实际路径。

构建和编程过程

  1. 链接器脚本编译 (w55mh32.ld)
    W55MH32 链接器脚本将这些指令组织到特定的内存区域,中断向量表首先放置在地址 0x08000000 处。

    MEMORY
    {
       FLASH (rx)          : ORIGIN = 0x08000000, LENGTH = 1024K /* entire flash */
       FLASH_ISR (rx)      : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */
       FLASH_FS (rx)       : ORIGIN = 0x08004000, LENGTH = 0K /* sectors 1,2,3 are 16K */
       FLASH_FIRMWARE (rx) : ORIGIN = 0x08010000, LENGTH = 972K /* sector 4 is 64K, sectors 5,6,7 are 128K */
       RAM (xrw)           : ORIGIN = 0x20000000, LENGTH = 96K
    }
  2. OpenOCD 编程 (Makefile) 

    当您执行 make flash 时,OpenOCD 会将整个 firmware.bin 文件传输到 W55MH32 的闪存中,起始地址为 0x08000000。此操作在一次写入中同时完成中断向量表和主程序代码的烧录。

    flash: $(BUILD)/firmware.bin
        $(ECHO) "Writing firmware.bin to the board via CMSIS-DAP using OpenOCD"
        $(Q)$(OPENOCD) -f $(OPENOCD_CONFIG) -c "w55mh32_flash $(BUILD)/firmware.bin 0x08000000 "
        @echo "Flash complete!"
  3. OpenOCD 编程 (board.cfg)
    执行 make flash 时,OpenOCD 会运行 w55mh32_flash TCL 脚本,该脚本通过 CMSIS-DAP 调试接口对芯片进行编程。以下是向 W55MH32 烧录固件时的通信流程命令:
proc w55mh32_flash { BIN0 ADDR0 } {
   reset halt                # Stop CPU execution
   sleep 100                 # Wait 100ms for stabilization
   flash write_image erase $BIN0 $ADDR0 # Erase and write binary
   sleep 100                 # Wait 100ms for completion
   reset run                 # Restart CPU
   shutdown                  # Close OpenOCD connection
}

步骤 3:串口终端验证

成功安装MicroPython后,通过串口终端访问验证固件功能。

打开串口终端
a. 启动串口终端应用程序(如Tera Term、PuTTY等)
b. 配置连接设置:
i. 波特率:115200
ii. 数据位:8
iii. 校验位:无
iv. 停止位:1
v. 流控制:无
c. 选择对应开发板UART接口的正确COM端口
d. 按下W55MH32开发板上的 RESET 按键
e. 这将触发MicroPython固件重启并显示REPL界面

总结

此演示展示了使用OpenOCD将MicroPython烧录到W55MH32芯片的完整工作流程:

  1. DFU准备:通过Keil进行初始引导加载程序安装
  2. 环境设置:克隆和准备MicroPython仓库
  3. USB转发:使用usbipd将Windows USB桥接到WSL
  4. OpenOCD烧录:使用CMSIS-DAP接口进行编程
  5. 验证:测试烧录的MicroPython固件

OpenOCD方法提供:

  • 可靠的编程:通过行业标准调试接口
  • 调试能力:与编程并行
  • 可脚本化自动化:用于CI/CD工作流
  • 厂商独立性:使用开源工具