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的帮助服务,同时验证命令文件夹正确

  • 通过CMD/PowerShell方式执行命令
    1. 在该目录打开CMD命令或PowerShell,打开方法:在文件空白处按Shift+鼠标右键
    2. 输入”–help”命令并回车:
      .\bin\openocd --help
      
  • 通过bat文件方式执行命令
    1. 在文件目录创建.bat执行文件”help.bat”
    2. 编辑bat执行文件,跟CMD的"--help"命令对比,只需换号增加pause即可:
    .\bin\openocd --help
    pause
    

保存执行,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单片机)
  • 通过运行<scripts>带参脚本命令运行Server,通用格式为"-f <interface> -f <target> "
    • <interface>仿真器配置: 代表你的仿真器类型,DAPLINK就是"interface/cmsis-dap.cfg"
    • <target>目标板配置: 代表你的烧录的单片机类型,如STM32F103C8就是"target/stm32f1x.cfg"
    • 注:两个CFG配置文件都可以在\share\openocd\scripts目录找到
.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg 
  1. 执行命令(失败案例)

    1. 未检测到仿真器,请检查连接线和设备管理器驱动有没有问题
    2. 仿真器连接成功但未连接器件,请检查连接线问题
  2. 成功连接器件(成功命令)

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

OpenOCD command 常用命令

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

  • 适配器命令
    • “adapter driver ” 命令告诉OpenOCD您正在使用哪种类型的调试适配器,比如DAPLINK/cmsis-dap的驱动器名称是”cmsis-dap”;

    • “transport select “通信方式配置,声明使用SWD/JTAG或其他通信方式,例如为”swd”;

    • “adapter_khz ” 该命令设置时钟通信速率,例如5M的为”500″;

  • 目标板状态处理命令(Target state handling)

    • init 此命令终止配置阶段并进入运行阶段,如重置目标,编程闪存等需要执行该命令
    • poll 查询目标板当前状态
    • halt 中断目标板的运行
    • resume <address> 恢复目标板的运行,如果指定了<address>,则从地址开始运行
    • step <address> 单步执行,如果指定了<address>,则从地址开始执行一条指令
    • reset [run|halt|init] run:复位并运行目标; halt:复位并停止目标运行; init:立即停止目标,并执行复位的init脚本

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擦除

  • init; reset init;命令终止配置阶并执行复位init脚本;

  • 擦除指定地址"flash erase_address [pad] [unlock] <address lengt>"擦除从地址开始的长度字节的扇区。 除非指定填充选项,否则地址必须以闪存扇区开头,而地址+长度-1必须以扇区结尾;

    • 必须指定<address lengt>擦除地址和长度,例如"0x08000000 0x10000"
    • 如果指定了[pad]填充选项,指定填充区可根据需要擦除指定区域的开始和/或末尾的额外数据,从而仅擦除整个扇区;
    • 如果指定了[unlock]解锁选项,则在擦除开始之前,FLASH将会被解锁;
.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset init;flash erase_address 0x08000000 0x10000;"

  • 也可以整体擦除 STM32 Flash 命令是"stm32f1x mass_erase <NUM>"
.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset init;stm32f1x mass_erase;"


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

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

  • 比较Flash核心命令是"flash verify_bank <NUM> <filename> [offset]",将二进制文件文件的内容与从offset(偏移量)开始的闪存库num的内容进行比较,如果内容不匹配,则失败。
    • 如果指定了[offset]偏移地址则从该地址开始;
    • 必须指定<filename>比较文件名,如"flash.bin"
.\bin\openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg -c "init;reset init;flash verify_bank 0 flash.bin;"


Flash烧录写入

  • 烧录Flash核心命令是 "flash write_image [erase] [unlock] <filename> [offset] [type]"将烧录文件名写入当前目标的闪存地址,仅写入镜像中的可加载部分。
    必须指定<filename>烧录文件名和地址,如"flash.bin 0x08000000"

    • 如果指定了[erase]擦除选项,则在编程之前将擦除相关闪存的整个扇区;
    • 如果指定了[unlock]解锁选项,则在擦除和编程之前将解锁闪存;
    • 如果指定了[offset]地址选项,则指定重定位偏移量;
    • 如果指定了[type]类型选项,则指定为bin (二进制), ihex (Intel hex), elf (ELF file), s19 (Motorola s19)文件;
  • 警告:当闪存保存您要保留的数据时,请小心使用擦除标志。图像部分中未描述的部分闪光灯可能会被删除,恕不另行通知。

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


STM32上锁/解锁

  • STM32上锁命令是"stm32f1x lock <NUM>",解锁命令是"stm32f1x unlock <NUM>"
.\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/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
电子工坊 » OpenOCD 命令操作 如何烧录 解决出现问题 基于DAPLink、Windows调试

发表评论

提供最优质的资源集合

立即查看 了解详情