单片机开发平台 下载程序和调试程序 的原理 (Jtag SWD)linux下调试程序的方法

106 篇文章 8 订阅
92 篇文章 2 订阅

搞电子都知道,电路不是焊接出来的,是调试出来的。程序员也一定认同,程序不是写出来的,是调试出来的。那么调试工具就显得尤为重要,linux作为笔者重要的开发平台,在linux中讨论调试工具主要是为那些入门者提供一些帮助。调试工具能让我们能够监测、控制和纠正正在运行的程序。我们在运行一些程序的时候,可能被卡住或出现错误,或者运行过程或结果,没能如我们预期,此时,最迫切需要明白究竟发生了什么。为了修复程序,剖析和了解程序运行的细节, 调试工具就成为了我们的必备工具,工于善其事,必先利其器。在Linux下的用户空间调试工具主要有系统工具和专门调试工具:‘print’ 打印语句,这是新手最常用的,也是最不提倡使用的;查询 (/proc, /sys 等)系统的虚拟文件查看,这个方法有局限性;跟踪 (strace/ltrace)工具使用这个比较普遍,值得提倡;Valgrind (memwatch)内存排除工具,在内存排除方面比较独到,是内存排错的法宝;GDB大名鼎鼎的程序调试工具,这个是个全能的工具,没有完不成的,只有你不知道的。

原文链接:[https://blog.csdn.net/weixin_39945810/article/details/114836324

](https://blog.csdn.net/weixin_39945810/article/details/114836324)
https://www.bbsmax.com/A/GBJr7AnB50/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

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

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

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SWDJTAG是两种常见的调试接口,都用于将程序下载到目标芯片中。它们的含义、不同点和优缺点如下: 1. SWD程序下载: 含义:SWD全称Serial Wire Debug,是一种ARM公司定义的用于单线调试程序下载的接口。 不同点:SWD接口只有两条线,一条是数据线,一条是时钟线,而JTAG接口有多条线,不仅包括数据线和时钟线,还有其他信号线。 优点:SWD接口只需要两条线就可以实现调试下载,接口简单,成本低,速度快,可用于实时调试。此外,SWD还可以在系统运行时进行调试,而JTAG只能在停机状态下进行调试。 缺点:由于只有两条线,所以SWD接口的调试距离和可靠性有一定的限制,不适合大规模的生产线使用。 2. JTAG程序下载: 含义:JTAG全称Joint Test Action Group,是一种用于测试和调试电子设备的标准接口。 不同点:JTAG接口需要多条线,包括数据线、时钟线和其他信号线,用于实现调试、测试和编程等功能。 优点:JTAG接口可以支持多种调试和测试功能,包括代码下载、硬件调试、信号分析等。此外,JTAG接口还可以在系统运行时进行调试,具备较高的可靠性和灵活性。 缺点:JTAG接口需要多条线,接口复杂,成本高,速度相对SWD慢一些,不适合实时调试。 综上所述,SWDJTAG接口各有优缺点,具体选择应根据实际需求和芯片支持情况进行选择。如果需要低成本、高速度、实时调试,则可以选择SWD接口;如果需要多种调试功能和可靠性较高,则可以选择JTAG接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学无止境2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值