OpenOCD介绍

举报
flyfishzy 发表于 2019/09/29 15:41:57 2019/09/29
【摘要】 什么是OpenOCDOpenOCD(Open On-Chip Debugger)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。OpenOCD的功能需要调试仿真器来辅助完成,调试仿真器是一个提供调试目标电信号的小型硬件单元。常用的有JLink、STLink等,一些开发板直接集成了调试仿真器,如小熊派开发板就集成了STLink。通过下面的OpenOCD架构图我们能...


什么是OpenOCD

OpenOCD(Open On-Chip Debugger)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。

OpenOCD的功能需要调试仿真器来辅助完成,调试仿真器是一个提供调试目标电信号的小型硬件单元。常用的有JLink、STLink等,一些开发板直接集成了调试仿真器,如小熊派开发板就集成了STLink。
1.png

通过下面的OpenOCD架构图我们能更好的认识OpenOCD。可以看出OpenOCD提供了GDB Server,可以通过它进行GDB相关的调试操作。提供Telnet Server,可以通过Telnet连接对目标板进行烧录、重启等操作。OpenOCD的配置基于TCL脚本,可以使用默认自带的TCL脚本,也可以编写自定义的脚本。
openocd.png

如何使用

上面我们提到OpenOCD需要调试仿真器配合使用,一般我们还会使用gdb client与其配合进行远程调试。
openocd.png

具体命令行操作步骤如下:

  1. 启动OpenOCD(以小熊派开发板为例)
    openocd –f board\stm32l4discovery.cfg
    -f 参数指定加载的TCL脚本文件,可以在OpenOCD 的scripts目录下找到很多自带的脚本。具体值根据不同开发板指定。
    1.png

  2. 启动gdb客户端并连接
    arm-none-eabi-gdb
    启动gdb客户端
    target remote :3333
    连接到gdb server(OpenOCD默认为3333端口)
    1.png

接下来就可以使用gdb命令进行开发板的调试了。

相关概念

JTAG

JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。 相关JTAG引脚的定义为:

  • TMS:测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;

  • TCK:测试时钟输入;

  • TDI:测试数据输入,数据通过TDI引脚输入JTAG接口;

  • TDO:测试数据输出,数据通过TDO引 脚从JTAG接口输出;

SWD

串行调试(Serial Wire Debug),一种和JTAG不同的调试模式,与JTAG的20个引脚相比,SWD只需要4个(或者5个)引脚,结构简单,但是使用范围没有JTAG广泛,主流调试器上也是后来才加的SWD调试模式。

SWD和传统的调试方式区别:

  • SWD模式比JTAG在高速模式下面更加可靠。在大数据量的情况下面JTAG下载程序会失败,但是SWD发生的几率会小很多。基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的,只要你的仿真器支持,所以推荐大家使用这个模式。

  • 在GPIO刚好缺一个的时候,可以使用SWD仿真,这种模式支持更少的引脚。

  • 在板子的体积有限的时候推荐使用SWD模式,它需要的引脚少。

OpenOCD资料


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。