OpenOCD是什么?J-Link、J-Trace、Open JTAG的区别

前言
最近在调试一些单板,对于这个调试工具我真的是又爱又恨,熟悉了那就是金箍棒,不熟悉那就是拦路虎。
有的东西用了很久还不知道这个玩意是干嘛的,于是这里来整理一篇来学习一下。
调试的工具针对不同的领域当然有很多的,这里涉及到的工具是openocd,这个玩意我们一起来学习一下相应的使用方式。
一、openocd是什么?
我们在使用的时候会用到openjtag,那么先来看看openjtag是什么?
1-openjtag是什么?
openjtag是一个开源项目(包含软件和硬件)。
硬件是一个usb接口转jtag接口的适配器。
借助开源软件openocd可以完成程序的烧写,调试等任务openjtag的功能:
往flash烧写程序:支持nor flash 和 nand flash
支持windows以及linux
能够用在支持gdb调试协议的工具上:如iar, eclipse
usb转串口功能
所以本质上还是开源软件openocd
2-j-link、j-trace、open jtag区别
j-link、j-trace、open jtag都是用来调试程序的(当然还有其他工具可以进行调试,比如ice),j-link和j-trace是segger公司的(http://www.segger.com)。open jtag(http://www.openjtag.org/)是 一个开源项目,其目标是使嵌入式开发者能够通过jtag接口,用开放的硬件和软件系统进行烧写、校验和调试[1]。他们都基于jtag调试接口协议。
本质上都是基于jtag接口协议的。
3-openocd是什么
openocd(open on-chip debugger)开源片上调试器,是一款开源软件,最初是由dominic rath同学还在大学期间发起的(2005年)项目。openocd旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。
openocd的功能是在仿真器的辅助下完成的,仿真器是能够提供调试目标的电信号的小型硬件单元。仿真器是必须的,因为调试主机(运行openocd的主机)通常不具备这种电信号的直接解析功能。
仿真器支持一个或多个传输协议,每个协议涉及不同的电信号,且使用不同的协议栈进行消息传递。市面上有很多种仿真器,并且这些仿真器的命名没有统一的规律。
仿真器有时候会被封装成独立的加密狗,这种称为硬件接口加密狗。一些开发板上面直接集成了硬件接口加密狗,这样可以使开发板通过usb直接连到主机上进行调试。
例如,jtag仿真器支持jtag协议的信号,可以用来进行taps和目标板子之间符合jtag协议(ieee 1149.1)的通讯。tap(test access port)是处理特殊指令和数据的单元。taps在芯片与板子之间和之内以菊花链的形式进行连接。jtag支持调试和边界扫描。
还有swd仿真器,这种仿真器支持使用swd(serial wire debug)信号与一些比较新的arm芯片进行通讯,而且还可以作为那些同时支持jtag和swd的芯片的仿真器。不过swd仅支持调试,不支持边检扫描。
对于一些芯片,还有专门的编程下载器,这些下载器仅支持擦写flash的功能,不支持调试和边界扫描。对于此类专用下载器,openocd暂时并不支持。
加密狗:openocd目前支持多种类型的硬件加密狗:基于usb的,基于并行端口的,以及其他在内部运行openocd的独立盒子。
gdb调试:它允许arm7(arm7tdmi和arm720t),arm9(arm920t,arm922t,arm926ej-s,arm966e-s),xscale(pxa25x,ixp42x),cortex-m3(stellaris lm3,st stm32和energy micro efm32)和基于intel quark(x10xx)的内核使用gdb协议进行调试。
flash编程:擦写flash支持外部cfi兼容nor闪存(intel和amd / spansion命令集)和几个内部闪存(lpc1700,lpc1800,lpc2000,lpc4300,at91sam7,at91sam3u,str7x,str9x,lm3,stm32x和efm32)。包括各种nand闪存控制器(lpc3180,orion,s3c24xx等)的初步支持。
小结一下:
openocd (open on-chip debugger)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。
openocd的功能需要调试仿真器来辅助完成,调试仿真器是一个提供调试目标电信号的小型硬件单元。常用的有jink、stlink等,一些开发板直接集成了调试仿真器,如小熊派开发板就集成了stlink。
通过下面的openocd架构图我们能更好的认识openocd。
可以看出openocd提供了gdbserver,可以通过它进行gdb相关的调试操作。
提供teinet server,可以通过telnet连接对目标板进行烧录、重启等操作。
openocd的配置基于tcl脚本,可以使用默认自带的tcl脚本,也可以编写自定义的脚本。
4-openjtag怎么用?
上面我们提到openocd需要调试仿真器配合使用,一般我们还会使用gdb client与其配合进行远程调试。
在这里插入图片描述
5-jtag与swd的区别
jtag (joint test action group,联合测试行动小组)是一种国际标准测试协议(ieee1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持jtag协议,如arm、dsp、fpga器件等。标准的jtag接口是4线:tms、tck、tdi、tdo,分别为模式选择、时钟、数据输入和数据输出线。相关jtag引脚的定义为:
tms:测试模式选择,tms用来设置jtag接口处于某种特定的测试模式;
tck:测试时钟输入;
tdl:测试数据输入,数据通过tdi引|脚输入jtag接口;
tdo:测试数据输出,数据通过tdo引脚从jtag接口输出;
串行调试(serial wire debug),一种和jtag不同的调试模式,与jtag的20个引脚相比,swd只需要4个(或者5个)引脚,结构简单,但是使用范围没有jtag广泛,主流调试器上也是后来才加的swd调试模式。
swd和传统的调试方式区别:swd模式比jtag在高速模式下面更加可靠。在大数据量的情况下面jtag下载程序会失败,但是swd发生的几率会小很多。基本使用jtag仿真模式的情况下是可以直接使用swd模式的,只要你的仿真器支持,所以推荐大家使用这个模式。在gpio刚好缺一个的时候,可以使用swd仿真,这种模式支持更少的引脚。在板子的体积有限的时候推荐使用swd模式,它需要的引脚少。


新加坡最新研究:利用橘子皮可从锂电池提取90%金属
联名款限量版相机 仅发售750台
华为致供应商一封信:不会因美国无理改变合作关系
0欧姆电阻的用途
三星note8什么时候上市?三星note8最新消息:机皇三星note8配置全曝光,不愧是最美的全面屏手机
OpenOCD是什么?J-Link、J-Trace、Open JTAG的区别
英国政府公布了一项加强消费者物联网设备安全性的法律
深度学习中的热点问题盘点
采用NI LabVIEW和RIO技术开发的革命性兽医影像系统
TI数模转换产品DAC80508和DAC70508的性能特点及应用介绍
ogetherROS应用场景有哪些
涂布薄膜瑕疵在线检测仪的工作原理是怎样的
深度:石墨烯的储能特性及其前景展望
如何通过arduino的双H桥L293D电机驱动器控制DC电机的速度和方向
基于LM741的小型耳机放大器电路图
ISB200模块说明
汇川技术和南天电力可靠的电网保障全市电力稳定供应
运营商iPhone库存激增:去年三款新机销量史上第二差
网桥的功能有哪些?
深度剖析智能电网调度自动化技术的设想