zoukankan      html  css  js  c++  java
  • 嵌入式调试器原理和各类调试器集锦(JLINK、STLINK、CCDEBUG)

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

    一、嵌入式调试多样性

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

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

    2.一个调试器可以调试多种不同型号的CPU,包括STM32控制器和高端的处理器。

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

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

    5.如果自己研发了一颗SOC芯片,并在JTAG的基础上增加一些定制的功能,又该如何实现?

    二、JLink调试原理

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

    网上的资料有时旧了,有时抄来抄去出错了。我们就以官方的版本为例来说明。我们安装了JLINK驱动后,会在DocManuals目录有一个文件《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上。

    三、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,原理就说到这里,大家应该对调试器有较为深入的理解了吧。对于硬件调试规范,以后有时间再细谈吧。

    四、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、自动驾驶等技术。欢迎扫码关注微信公众号:嵌入式企鹅圈,实时推送原创文章!

  • 相关阅读:
    [BTS] The adapter "SQL" raised an error message. Details "新事务不能登记到指定的事务处理器中。 ".
    [BTS] 新事务不能登记到指定的事务处理器中
    [BTS] RFCTYPE RFCTYPE_DATE with length 8 and decimals 0
    [BTS]Could not find stored procedure.
    [BTS] SAP Adapter Retrieving the COM class factory for component
    [BTS]Unable to display adapter user interface.
    [BTS]BizTalk Performance Counters
    [BTS] Error in Check Transaction: 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
    [BTS] 可能会经常用来参考的一段XSLT
    [BTS] Unable to communicate with MessageBox BizTalkMsgBoxDb on SQL Instance
  • 原文地址:https://www.cnblogs.com/yueqian-scut/p/5853834.html
Copyright © 2011-2022 走看看