0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

jlink调试器的工作原理

痞子衡嵌入式 来源:网络整理 2024-03-08 12:32 次阅读

1、日常聊一聊

jlink调试器需要讲得东西真的非常多,可能大部分的小伙伴在日常的开发中只是用它来辅助我们的目标芯片的开发,基本上是把手中的调试器当做一个"黑匣子",不过在使用过程中也会遇到一些与我们思路相悖的现象,所以作者这里用一篇文章带大家了解一下调试器的一般处理过程以便在了解调试器的原理上来解释相关现象。

2、JTAG接口

我们平时使用的jlink调试器就是使用JTAG接口,JTAG以前是用于测试芯片的一种通信方式,现在部分ARM或者DSP等都存在JTAG接口,这样我们就可以通过JTAG接口访问CPU以及其内部状态信息等,JTAG接口其通信信号为JTAG信号,JTAG信号在IEEE相关标准中必须要有TCK、TMS、TDI,TDO四个信号,TRST和STCK不做强制要求。说实在的这几个信号非常类似于SPI信号,而且其JTAG数据传输也是通过数据移位的方式。

117f0370-dced-11ee-a297-92fbcf53809c.png

如上图所示芯片的的JTAG接口为了提高访问效率设计了转移状态机,这样就能快速访问到芯片内部相应的寄存器,完成调试数据的传输,从而我们的KEIL或者IAR就能通过界面上看到相应状态寄存器及数据等。

3、边界扫描链

我们1)小节说的状态机需要与芯片内部交互,那么实际上是通过边界扫描链进行物理上的串行移位的方式输入或者输出相应的内部状态信息。如下图所示处理器的周围红色区域即为边界扫描链,边界扫描链是由一个个移位寄存器连接而成,并且一般芯片中存在多条,不同的扫描链对应着不同的功能,比如说一些扫描链用于访问内存或者处理器中的数据,有些扫描链用于设置或者访问内部debug模块等。

11aa80d6-dced-11ee-a297-92fbcf53809c.png

由于我们扫描链只能访问CPU外围的相关状态信息,对于CPU内部信息需要用另外一种方式,通过JTAG接口传输相关命令让CPU执行相关命令把内部寄存器的数据转移到TAP可以直接访问的位置,然后传递出来,同时也可以通过相关指令把相应数据写入到CPU寄存器中。我们平时在IDE中调试界面看到的全局变量的数据,就是通过在TAP可以访问的位置放置内存的地址,然后让CPU执行相关命令读取地址访问内存并把数据放到TAP可以访问的位置后传输出来直到IDE中显示。

4、调试器进行程序调试过程

我们的程序一般分为在RAM和FLASH上调试运行,然后调试器的下载程序过程是不同的,我们都知道对于内部RAM我们的CPU是可以直接访问的,其RAM直接连接在数据总线、地址总线和控制总线上,并且其接口都是标准化的,那么如果我们把程序放在RAM上运行通过JTAG直接下载程序到RAM运行,然后复位CPU进行调试运行即可,可是由于芯片中的FLASH型号等差异较大,并且对于FLASH的读、写擦除都需要特殊的命令,不同型号存在着较大的差异,所以如果进行FLASH上运行调试程序还不能像RAM上运行一样处理。

那么目前的KEIL,IAR等等IDE工具是如何下载并在FLASH中调试程序的呢?我们熟悉KEIL、IAR进行开发的小伙伴应该知道,我们在进行JLink调试的时候会有一个选择FLASH类型的对话框,(如下图所示)。

11b1d642-dced-11ee-a297-92fbcf53809c.png

那么我们可以大致猜想一下,由于FLASH的驱动不一样,我们进行把对应的FLASH驱动下载到芯片中,然后根据下载的驱动对FLASH进行操作把我们的程序烧录进入即可进行调试了,这里我们一般都会把该驱动程序叫做FlashLoader,我们平时比较熟悉的是BootLoader,其实两种其实原理都是差不多,其中下载部分都是接受程序数据,然后写入到对应的FLASH中,只是两者在通讯方式和作用有所区别罢了,那么我绘制一个大体的过程给大家参考学习:

11c83ec8-dced-11ee-a297-92fbcf53809c.png

通过上面的图我们应该清楚的了解到了通过jlink一般如何把固件烧录到FLASH上进行仿真运行的了,然而这个思路我们也可以用在我们的实际开发过程中比如不同芯片的升级软件开发等,来为我们所用。

5、最后小节一下

上面的知识限于篇幅没有讲得太深,很东西可能在我们的开发过程也用不到,大致了解一下其过程即可,如果以后讨论相关问题可以再另外寻找相关资料进行阅读理解。其实说白了JTAG就是一种通信协议,根据该通信协议发送相关命令等通过芯片内部处理便可访问芯片内部状态或者修改相应数据等,如果我们程序全速运行的话其调试模式和脱机模式基本上是一样的性能,不过遇到了断点就需要分情况讨论相关问题了,对于需要连贯操作的通信及相关任务处理等会造成实效或者错乱,比如串口通信当正在接受过程中被断点打断可能就会丢失本帧数据等,大家要注意下。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206549
  • JTAG
    +关注

    关注

    6

    文章

    383

    浏览量

    71150
  • 调试器
    +关注

    关注

    1

    文章

    288

    浏览量

    23405
  • Jlink
    +关注

    关注

    5

    文章

    108

    浏览量

    37305
  • 测试芯片
    +关注

    关注

    0

    文章

    19

    浏览量

    8592

原文标题:jlink调试器中你不知道的"那些事"(ARM篇)

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    arm调试器有哪些应用范围

    arm11 时开始使用jlink,这个调试器应用范围广,主流的IDE 都有做插件集成他的调试功能,使他本身命令做成GUI的方式,对初学者更加友好,一般会用的基本不用界面调试,都是命令好
    发表于 07-16 07:58

    如何使用JLink调试器和Keil MDK-ARM来下载Hex文件?

    如何使用JLink调试器和Keil MDK-ARM来下载Hex文件?有哪些操作步骤?
    发表于 07-26 06:03

    如何自制一个基于jlink的无线调试器

    如何自制一个基于jlink的无线调试器
    发表于 01-18 06:47

    请问RTThread studio如何修改调试器

    我使用rt studio生成stm32的工程,生成时选择的是stlink调试。一段时间之后我想用Jlink调试这个工程,应该如何操作?我打开调试设置,发现左侧没有
    发表于 06-17 09:20

    jlink-v8调试器jlink接口与swd接口有什么不同呢

    mdk集成开发环境境中,jlink-v8调试器jlink接口与swd接口有什么不同呢?
    发表于 08-29 14:18

    如何使调试器JLink软件一起工作

    正常工作。从一些在线帖子中,我看到 segger 已经改变了他们管理支持的设备和闪存加载算法的方式。segger 的网站提到要联系芯片供应商以对 RT1052 + QSPI 进行编程。所以请让我知道如何使调试器与最新的软件一起
    发表于 02-28 08:04

    手把手教你玩转RVSTAR—SEGGER Embedded Studio+JLink调试器

    本教程以板上按键控制点亮RV-STAR开发板上的LED为目标,从IDE的下载安装开始详细介绍了使用SEGGER Embedded Studio+JLink调试器进行RISC-V嵌入式开发的方法。系统
    发表于 03-29 14:27

    S32K344使用SEGGER Jlink调试器调试时程序运行不会暂停是怎么回事?

    SEGGER Jlink调试器可以对S32K344项目进行编程,但是在调试过程中,断点错误地位于主程序的中间而不是开头。在断点之前加的断点,程序运行到那里不会暂停
    发表于 03-30 07:27

    MCUXpresso无法通过Jlink进行调试怎么解决?

    我正在使用 MIMXRT1060-EVK 和 MCUXpresso 11.7.1 调试固件。 但无法通过 Jlink 调试器进行调试。 错误日志如下:
    发表于 06-09 07:48

    jlink-AXD仿真调试实验手册

    jlink-AXD仿真实验调试手册 1.实验设备:TQ2440开发板一套,Jlink-V6,Jtag 板,ADS编译器,AXD调试器。2.安装好TQ2440开发板所需的驱动;安装好
    发表于 03-11 09:06 79次下载

    使用在PICkit™ 3线调试器

    使用在PICkit™ 3线调试器
    发表于 09-22 14:53 5次下载
    使用在PICkit™ 3线<b class='flag-5'>调试器</b>

    Cepark Jlink调试总结

    Cepark Jlink调试总结
    发表于 10-27 16:12 9次下载
    Cepark <b class='flag-5'>Jlink</b><b class='flag-5'>调试</b>总结

    STM32F411Cx 401Cx最小系统 JLINK调试器开源

    电子发烧友网站提供《STM32F411Cx 401Cx最小系统 JLINK调试器开源.zip》资料免费下载
    发表于 08-09 09:26 2次下载
    STM32F411Cx 401Cx最小系统 <b class='flag-5'>JLINK</b><b class='flag-5'>调试器</b>开源

    如何将ST-Link刷成JLink使用呢?

    论功能性,性能,开放性,支持的芯片,JLink 都算得是 通用调试器界的扛把子,如果在使用ST-Link过程中出现下载或调试失败等问题,可以考虑将ST-Link刷成JLink来使用也是
    的头像 发表于 09-28 11:39 2203次阅读
    如何将ST-Link刷成<b class='flag-5'>JLink</b>使用呢?

    调试器连接MCU不稳定怎么办?

    有没有小伙伴遇到使用GDlink或者Jlink调试GD32 MCU的时候出现不稳定的情况,刚要发现问题时调试器和MCU断开连接了,这个时候可能抓狂的心都有了。今天就教给大家几个提高调试器
    的头像 发表于 02-21 09:44 192次阅读
    <b class='flag-5'>调试器</b>连接MCU不稳定怎么办?