电子工坊

OpenOCD 命令操作 如何烧录 解决出现问题 基于DAPLink、Windows调试

OpenOCD是一种开放式片上调试器,可为嵌入式设备提供编程,调试和边界扫描测试。OpenOCD作为服务器,并通过端口3333接受来自GDB的传入连接或通过端口4444接受来自telnet的传入连接。GDB用于源文件步骤调试。telnet连接用于刷新。OpenOCD连接到 DAPLINK仿真器。DAPLINK适配器连接到目标。

下载软件环境

软件名称 网站
OpenOCD最新版 http://www.gnutoolchains.com/arm-eabi/openocd/

OpenOCD 文件部署

解压OpenOCD文件夹到一个英文目录,并进入主目录,里面有bin、drivers、share文件
然后,可以通过”–help”命令可来调用OpenOCD的帮助服务,同时验证命令文件夹正确

保存执行,OpenCOD服务将会打印以下说明,如果出现错误请更改正确的目录

G:\OpenOCD-20200530-0.10.0>.\bin\openocd --help
Open On-Chip Debugger 0.10.0 (2020-05-30) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
libusb1 09e75e98b4d9ea7909e8837b7a3f00dda4589dc3
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
Open On-Chip Debugger
Licensed under GNU GPL v2
--help       | -h       display this help
--version    | -v       display OpenOCD version
--file       | -f       use configuration file <name>
--search     | -s       dir to search for config files and scripts
--debug      | -d       set debug level to 3
             | -d<n>    set debug level to <level>
--log_output | -l       redirect log output to file <name>
--command    | -c       run <command>

OpenOCD Server部署运行

案例通过CMD方式操作(bat文件命令方式上面有说明)

  1. 在CMD夹输入OpenOCD Server命令 (案例为STM32F1X单片机)
.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg 
  1. 执行命令(失败案例)
    1. 未检测到仿真器,请检查连接线和设备管理器驱动有没有问题
    2. 仿真器连接成功但未连接器件,请检查连接线问题
  2. 成功连接器件(成功命令)

    连接成功,请不要关闭该窗口,否则OpenOCD将会关闭
    如需要退出服务可按Ctrl+C

OpenOCD command 常用命令

这些命令都比较常用到,官方命令索引在这里

OpenOCD 命令实践

例程使用stm32f1x控制器,实际不同控制器可在\share\openocd\scripts\target找到
<NUM>参数是flash banks,打印每个设备的闪存库声明摘要,从零开始编号。主要,编号是复数形式,单数形式是不同的命令。

编程一个文件默认情况下将执行以下操作:
1. 执行'init'
2. 调用"reset init"来重置和停止目标
3. 调用"flash write_image"给指定的文件名擦除和写入到Flash
4. 调用"verify_image "对比下载文件是否有误
5. 调用"reset run"复位运行程序
6. 退出OpenOCD服务

OpenOCD的FLASH命令在这里可以找到


检查可用的目标板

通过运行targets命令检查可用的目标

.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;targets;"  


如果检测不到目标,建议检查target/xxx.cfg是否错误,检查连接线是否错误


烧录编程固件

该命令简化使用Flash命令的方法,使用jimtcl脚本来处理编程和验证阶段
只需要"program <filename> [preverify] [verify] [reset] [exit] [offset]"一个命令即可完成6上面步骤编程烧录
+ 必须指定<filename>烧录文件名和地址,如"flash.bin 0x08000000"
+ 如果指定了[preverify]烧录前校验目标是否相同
+ 如果指定了[verify]烧录后校验目标,在失败时会有提示
+ 如果指定了[reset]复位运行,在烧录校验完成后运行程序
+ 如果指定了[offset]偏移地址,则会从偏移地址烧录

.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "program  flash.bin 0x08000000 verify reset exit;"


Flash擦除

.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset init;flash erase_address 0x08000000 0x10000;"

.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset init;stm32f1x mass_erase;"


二进制文件与目标板Flash比较

该功能是验证你的烧录文件内容是否与目标板的Flash程序是否一致,一般烧录完成后需用到

.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset init;flash verify_bank 0 flash.bin;"


Flash烧录写入

.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset init;flash write_image erase flash.bin 0x08000000;"


STM32上锁/解锁

.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset halt;stm32f1x unlock 0;shutdown;"

OpenOCD文档

有关OpenOCD的信息:
+ http://openocd.org/
+ https://sourceforge.net/projects/openocd/

最新版本的文档位于:
+ http://openocd.org/doc/html/index.html

OpenOCD GIT存储库位于:
+ https://sourceforge.net/p/openocd/code/ci/master/tree/