嵌入式调试器原理和各种调试器集锦(JLINK、STLINK、CCDEBUG)

  工欲善其事,必先善其器。调试器在嵌入式开发调试中的重要性不言而喻,单步、断点和监察的效率远高于串口打印。可是,调试器对于通常开发人员每每是一个黑匣子。今天咱们就来谈谈调试器的原理,顺便把本身的几类调试器接线和注意事项记录下来,以便查找。我经常要面对几个方案,而各个方案的调试器都不同,接线有时连本身都记不住。因此这个帖子应值得嵌入式开发工程师收藏。微信

 

1、嵌入式调试多样性架构

  咱们先来回想调试的场景,思考一下这几个问题:debug

1. ARM开发环境有Keil、IAR、ADS等等,咱们发现这几个平台都能用同一个调试器去调试ARM。设计

2.一个调试器能够调试多种不一样型号的CPU,包括STM32控制器和高端的处理器。3d

3.一个调试器有时接20个pin的JTAG接口,有时接4个pin的SWD接口。调试

4.开发环境KEIL不只支持ARM调试,还支持51单片机调试。blog

5.若是本身研发了一颗SOC芯片,并在JTAG的基础上增长一些定制的功能,又该如何实现?接口

 

2、JLink调试原理资源

  OK,咱们来分析一下JLINK的调试架构。咱们都知道,JLINK是调试ARM体系的。开发

网上的资料有时旧了,有时抄来抄去出错了。咱们就以官方的版本为例来讲明。咱们安装了JLINK驱动后,会在Doc\Manuals目录有一个文件《UM08001_JLink.pdf》,这个文件就是Jlink的官方文档资料。

咱们用这个架构图来一一解释上一节的问题,解开疑惑。

  1.    对于第一个问题,JLINK定义了一个软件调试层面的RDI接口标准,即Remote debug interface. Keil、IAR、ADS这些开发环境按照RDI标准进行定制,便可以支持JLINK调试。RDI底层使用USB传输,固然,其余硬件接口也是能够的。

  2.    对于第三个问题,ARM体系原先是支持JTAG硬件调试接口的,随着cortex系列增长SWD调试规范,如今愈来愈多的调试器选择SWD接口。其接线少,速率高,也比较稳定。JTAG 20个口太占用pin资源了。JLINK V6开始支持SWD,如今V8支持已经足够好了。

  3.    对于第二个问题,不论是低端控制器,仍是高端处理器,调试接口规范都是ARM体系的标准内容。ARM CPU原生支持JTAG/SWD调试协议接口。

  OK,那JLINK这个角色是作什么的?

  -----将RDI接口协议转换为JTAG/SWD接口协议!!!

  例如,IDE上能够设置一个断点,那IDE会使用RDI的设置断点的API,而JLINK在实现这个API里面,就转化为JTAG/SWD标准规范里面的设置断点功能,并经过JTAG/SWD硬件接口输出到ARM CPU上。

 

3、IDE的调试开发

       第四个和第五个问题都涉及到IDE。如何回答这两个问题?

  1.    从JLINK架构来看,调试包括:IDE->远程调试接口->调试器->硬件调试接口->CPU。

  2.    对于KEIL支持51单片机,调试器必需要支持51CPU的ISP调试规范。51单片机的调试彷佛没有一家像JLINK那么有影响力的调试厂商。也许是由于51调试器至关简单吧,淘宝30块左右就能买到。

  那如今就剩下远程调试接口这个环节了,这个问题解决了,就把第五个问题也解决了,由于不论是通用的SOC,仍是定制的SOC,CPU核心都是一致的,要么是ARM,要么是MIPS,要么51等等。每种CPU在其体系标准里面就决定了硬件调试规范了。要想调试CPU,其调试器必需要将上层的要求转化为符合其支持的硬件调试规范。

 

  那么,咱们来从新思考IDE的设计。IDE在立项研发的时候显然但愿能支持到不一样体系的CPU,不然不是做死本身吗?因此,咱们能够想象,IDE其实也面向第三方调试厂商开放本身的接口。这样各大厂商才能利用已经成熟的IDE。

 

因此,咱们来从新回答第四和第五个问题:

  3.    IDE->第三方厂商实现KEIL的接口->第三方厂商的远程调试接口->第三方调试器->硬件调试接口->CPU. 因此,咱们在JLINK架构图中看到,RDI接口实际上是JLINK厂商定义的接口,而不是IDE厂商定义的。

  4.    第四个问题:KEIL->第三方厂商实现KEIL的接口->第三方厂商的远程调试接口->第三方调试器->51调试规范->51 CPU

  5.    第五个问题:从以上看来,其实第三方调试器厂商是能够在实现硬件调试规范的基础上,对于远程调试接口作灵活的定制的。甚至能够,在一款调试器的基础上,实现支持多种CPU。通常集成电路设计公司,都有本身的调试器,其要开发多种CPU体系的芯片,因此本身研发的调试器确定可以多种不一样的CPU的。

  Ok,原理就说到这里,你们应该对调试器有较为深刻的理解了吧。对于硬件调试规范,之后有时间再细谈吧。

 

4、ARM各种调试汇总

1.JLINK

       1. JLINK有不一样的软件版本。不一样版本的pin脚定义可能不同,尤为是VCC. 这点,我却是记忆犹新。

2.jlinkV6开始支持SWD模式。

JLINK的JTAG/SWD调试接口。VTref是输入,接目标板的VDD.

       3. 国内卖JLINK的厂商基本上都是抄人家的,因此本身在使用JLINK时也要以实测为准。我手上两个JLINK就大相径庭。下图左边的JLINK,第19脚说是5v输出,实测是0。对于右边的JLINK的,1脚的VTref竟然会输出V3.3,因此目标板能够直接以这个为电源来调试。对于左边的JLINK,目标板必需要提供电源给JLINK的1脚。

       4. JLINK能够支持STM32等cortexM3系列等等,A8等高级CPU也能够。蓝牙DA14580和NRF51822都是基于cortexM0,也能够。

2.STLINK

       STLINK是ST公司研发的,专门针对ST公司的产品,通常支持SWD模式。原理跟上面接收的相仿。ST意法半导体还研发了STM8微控制器,其还有一种调试模式是SWIM单总线调试接口。即只须要一个口来调试,固然还要VCC,GND和RST口。

3.TI的CC254X调试器

以上介绍的JTAG是20pin,其实JTAG还有10pin标准接口的,TI的CC254X调试器便是此种。

4.51调试器

  一时找不到,不知道放到哪里了。

5. 其余调试,未完待续,这个帖子随时更新。

      嵌入式企鹅圈原创团队由阿里、魅族、nvidia、龙芯、炬力、拓尔思等资深工程师组成。百分百原创,每周两篇,分享嵌入式、Linux、物联网、GPU、Android、自动驾驶等技术。欢迎扫码关注微信公众号:嵌入式企鹅圈,实时推送原创文章!

 

相关文章
相关标签/搜索