嵌入式JTAG接口解读
默菲 2022-06-23

  通常所说的JTAG大致分两类,一类用于测试芯片的电气特性,检测芯片是否有问题;一类用于Debug;一般支持JTAG的CPU内都包含了这两个模块。

  一个含有JTAG Debug接口模块的CPU,只要时钟正常,就可以通过JTAG接口访问CPU的内部寄存器和挂在CPU总线上的设备,如FLASH,RAM,SOC(比如4510B,44Box,AT91M系列)内置模块的寄存器,象UART,Timers,GPIO等等的寄存器。

  上面说的只是JTAG接口所具备的能力,要使用这些功能,还需要软件的配合,具体实现的功能则由具体的软件决定。

  例如下载程序到RAM功能。了解SOC的都知道,要使用外接的RAM,需要参照SOC DataSheet的寄存器说明,设置RAM的基地址,总线宽度,访问速度等等。有的SOC则还需要Remap,才能正常工作。运行Firmware时,这些设置由Firmware的初始化程序完成。但如果使用JTAG接口,相关的寄存器可能还处在上电值,甚至时错误值,RAM不能正常工作,所以下载必然要失败。要正常使用,先要想办法设置RAM。在ADW中,可以在Console窗口通过Let 命令设置,在AXD中可以在Console窗口通过Set命令设置。

  下面是一个设置AT91M40800的命令序列,关闭中断,设置CS0-CS3, 并进行Remap,适用于AXD(ADS带的Debug)

  setmem 0xfffff124,0xFFFFFFFF,32 ---关闭所有中断

  setmem 0xffe00000,0x0100253d,32 ---设置CS0

  setmem 0xffe00004,0x02002021,32 ---设置CS1

  setmem 0xffe00008,0x0300253d,32 ---设置CS2

  setmem 0xffe0000C,0x0400253d,32 ---设置CS3

  setmem 0xffe00020,1,32 ---Remap

  如果要在ADW(SDT带的DEBUG)中使用,则要改为:

  let 0xfffff124=0xFFFFFFFF ---关闭所有中断

  let 0xffe00000=0x0100253d ---设置CS0

  let 0xffe00004=0x02002021 ---设置CS1

  let 0xffe00008=0x0300253d ---设置CS2

  let 0xffe0000C=0x0400253d ---设置CS3

  let 0xffe00020=1 ---Remap

  为了方便使用,可以将上述命令保存为一个文件config.ini, 在Console窗口输入 ob config.ini 即可执行。

  使用其他debug,大体类似,只是命令和命令的格式不同。

  设置RAM时,设置的寄存器以及寄存器的值必须和要运行程序的设置一致。一般编译生成的目标文件是ELF格式,或类似的格式,包含有目标码运行地址,运行地址在Link时候确定。Debug下载程序时根据ELF文件中的地址信息下载程序到指定的地址。如果在把RAM的基地址设置为0x10000000, 而在编译的时候指定Firmware的开始地址在0x02000000, 下载的时候,目标码将被下载到0x02000000,显然下载会失败。

  通过JTAG下载程序前应关闭所有中断,这一点和Firmware初始化时关闭中断的原因相同。在使用JTAG接口的时候,各中断的使能未知,尤其是FLASH里有可执行码的情况,可能会有一些中断被使能。使用JTAG下载完代码,要执行时,有可能因为未完成初始化就产生了中断,导致程序异常。所以,需要先关闭中断,一般通过设置SOC的中断控制寄存器完成。

  使用JTAG写Flash。在理论上,通过JTAG可以访问CPU总线上的所有设备,所以应该可以写FLASH,但是FLASH写入方式和RAM大不相同,需要特殊的命令,而且不同的FLASH擦除,编程命令不同,而且块的大小,数量也不同,很难提供这一项功能。所以一般Debug不提供写Flash功能,或者仅支持少量几种Flash。

  目前就我知道的,针对arm,只有FlashPGM这个软件提供写FLASH功能,但使用也非常麻烦。AXD,ADW都不提供写FLASH功能。我写Flash的方法时是,自己写一个简单的程序,专门用于写目标板的FLASH,利用JTAG接口,下载到目标板,再把要烧写的目标码装成BIN格式,也下到目标板(地址和烧FLASH的程序的地址不同),然后运行已经下载的烧FLASH的程序。使用这种方式,比起FlashPGM的写Flash,速度似乎要快一些。

  关于简单JTAG电缆。

  目前有各种各样简单JTAG电缆,其实只是一个电平转换电路,同时还起到保护作用。JTAG的逻辑则由运行在PC上的软件实现,所以在理论上,任何一个简单JTAG电缆,都可以支持各种应用软件,如Debug等。我就曾使用同一个JTAG电缆写Xilinx CPLD,AXD/ADW调试程序。关键再于软件的支持,大多数软件都不提供设定功能,因而只能支持某种JTAG电缆。

  关于简单JTAG电缆的速度。

  JTAG是串行接口,使用打印口的简单JTAG电缆,利用的是打印口的输出带锁存的特点,使用软件通过I/O产生JTAG时序。由JTAG标准决定,通过JTAG写/读一个字节要一系列的操作,根据我的分析,使用简单JTAG电缆,利用打印口,通过JTAG输出一个字节到目标板,平均需要43个打印口I/O, 在我机器上(P4 1.7G),每秒大约可进行660K次 I/O 操作,所以下载速度大约在660K/43, 约等于15K Byte/S. 对于其他机器,I/O速度大致相同,一般在600K ~ 800K.

  关于如何提高JTAG下载速度。

  很明显,使用简单JTAG电缆无法提高速度。要提高速度,大致有两种办法,

  1。使用嵌入式系统提供JTAG接口,嵌入式系统和微机之间通过USB/Ethernet相连,这要求使用

  2。使用CPLD/FPGA提供JTAG接口,CPLD/FPGA和微机之间使用EPP接口(一般微机打印口都支持EPP模式),EPP接口完成微机和CPLD/FPGA之间的数据传输,CPLD/FPGA完成JTAG时序。

  这两种方法本人都实现过。第一个方法可以达到比较高的速度,实测超过了200KByte/S(注意:是Byte,不是Bit);但是相对来说,硬件复杂,制造相对复杂。第二种相对来说,下载速度要慢一些,最快时达到96KByte/S,但电路简单,制造方便,而且速度可以满足需要。第二种方案还有一个缺点,由于进行I/O操作时,CPU不会被释放,因此在下载程序时,微机CPU显得很繁忙。

  总的来说,本人认为,对于个人爱好者来说,第二种方法更可取。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
  • 嵌入式设计人员必须掌握的存储技术

      微控制器的存储架构可能很简单(图1)。但是,随着应用开始朝便携化、虚拟化和个性化方向发展,它们现在变得相当复杂。多核(multicore)、许多核(many

    前天
  • 单片机应用基础

    [导读]单片机把微型计算机的主要功能部件集成在一个芯片上的单芯片微型计算机。如果说单片机就是一个电脑你可能不会认可,其实它和我们用的电脑的在本质上没有区别,只是

    06-28
  • MCS-51单片机内部数据存储器特点及如何设置

    [导读]MCS-51单片机内部数据存储器是怎样设置的?答:MCS-51单片机内部有128个字节的数据存储器,内部RAM编址为00H~7FH。MCS-51对其内部

    06-28
  • 8031、8051、8751、89C51、89S51的区别

    [导读] 在8031、8051、8751、89C51、89S51的区别与特点介绍8031/8051/8751是Intel公司早期的产品。8031的特点8031片

    06-28
  • MCS-51系列单片机结构及管脚介绍

    [导读]1.MCS-51单片机内部结构框图2.MCS-51引脚图3.引脚介绍VCC(40脚):接+5 V电源正端。VSS(20脚):接+5 V电源地端。XTAL

    06-28
  • 什么是单片机特殊功能寄存器?作用是什么?

    [导读]什么是特殊功能寄存器?答:特殊功能寄存器是用来对片内各功能模块进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的RAM区。MCS-51单片机

    06-28
  • PIC 入门技巧心得

      为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,笔者写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织

    06-28
  • 单片机自身的抗干扰措施

      随着半导体技术的飞速发展,单片机本身的设计中不断采用了一些新的抗干扰技术,使单片机的可靠性不断提高。除选择抗干扰能力强的单片机外,单片机系统中其它辅助元器件

    06-28
  • JTAG的基本原理分析

      调试ARM,要遵循ARM的调试接口协议,JTAG就是其中的一种。当仿真时,IAR、KEIL、ADS等都有一个公共的调试接口,RDI就是其中的一种,那么我们如

    06-28
  • 晶振与单片机周期

    在初学单片机的时候,总是伴随很多有关于晶振的问题,其实晶振就如同人的心脏,是血液的脉搏。把单片机的晶振问题搞明白了,51单片机的其他问题迎刃而解。什么是晶振晶振

    06-27
  • 应用单片机和L297、L298构成步进电机控制驱动器

     作者:唐国栋  1引言  步进电动机是一种将电脉冲信号转换成角位移或线位移的精密执行元件,由于步进电机具有控制方便、体积小等特点,所以在数控系统、自动生产线、

    06-27
  • PIC 程序设计需要注意的问题

      美国微芯公司开发的CMOS工艺PIC系列单片机,特别是采用内置第二代Flash存储器的微控制器在快速应用方面具有独到之处。PIC单片机系列内大都包含运算器、

    06-27
下载排行榜
更多
广告