历史上的今天
返回首页

历史上的今天

今天是:2024年12月18日(星期三)

正在发生

2019年12月18日 | 痞子衡嵌入式:ARM Cortex-M调试那些事(1)- 4线协议标准(JTAG)

2019-12-18 来源:eefocus

  在结束《ARM Cortex-M文件那些事》系列文章之后,痞子衡休整了一小段时间,但是讲课的心完全停不下来啊,所以忍不住新开了一个系列文章,叫《ARM Cortex-M调试那些事》,本文是这个系列文章的第一篇,欢迎各位嵌入式朋友前来围观捧场~~~


  嵌入式开发中,大家免不了需要仿真调试代码,尤其是当应用工程功能逻辑复杂到一定程度时,免不了在写代码时会引入一些逻辑bug,仅靠代码审查有时候并不一定能排除所有bug,所以在线调试便成为排除bug最有效直接的方式,今天我们要聊的是调试里最基础的东西,即接口标准。ARM内核原生支持2种业界通用的接口标准,分别是JTAG和SWD。本节课痞子衡先给大家详细讲讲JTAG接口。

一、JTAG接口标准

  JTAG全称“Joint Test Action Group”,既是个标准也是个组织,这是个由几家主要的电子制造商(IBM、AT&T、TI、Philips等)成立于1985年的组织,这个组织成立的目的是发起制订一种PCB和芯片测试标准。
  JTAG标准于1990年被IEEE批准为IEEE1149.1测试访问端口和边界扫描结构标准。JTAG标准规定了进行边界扫描所需要的硬件和软件,主要应用于电路的边界扫描测试和可编程芯片的在线系统编程。

1.1 IEEE 1149.1标准

IEEE 1149.1工作组 http://grouper.ieee.org/groups/1149/1/
最初版手册1149.1-1990 http://standards.ieee.org/findstds/standard/1149.1-1990.html
最新版手册1149.1-2013 http://standards.ieee.org/findstds/standard/1149.1-2013.html

1.2 JTAG接口信号

  JTAG接口,总称测试访问接口TAP(Test Access Port),使用如下信号来实现边界扫描操作:

  • TCK(测试时钟):同步内部状态机操作的时钟信号。

  • TMS(测试模式选择):控制内部状态机转换的模式信号(TCK上升沿采样)。

  • TDI(测试数据输入):移入器件测试或编程逻辑的数据(TCK上升沿采样)。

  • TDO(测试数据输出):移出器件测试或编程逻辑的数据(TCK下降沿采样)。

  除了以上信号线外,还有1个可选的信号:

  • TRST(测试重置):重置TAP控制器的状态机的复位信号。

1.3 JTAG系统内部构造

  JTAG系统内部最基本的单元是边界扫描单元(其扫描获取的值存在边界扫描寄存器BSR(Boundary Scan Register)中),每个边界扫描单元都位于目标器件的边界上,所以很多时候JTAG测试也被称为边界扫描。
  所有目标器件核心逻辑与针脚之间的信号都会被串联的边界扫描单元所拦截。正常运行时,这些边界扫描单元是不可见的。但是,在测试模式下这些单元可以被用来设置/读取目标器件针脚或核心逻辑的值。

  除了上述BSR之外,JTAG系统还需要以下3个寄存器:

  • 指令寄存器:存储当前的指令,指令内容被TAP控制器用来决定如何处理接收到的信号。

  • 旁路寄存器(BYPASS):把信息从TDI传到TDO的单位寄存器。

  • 识别码寄存器(IDCODES):含有器件的识别码和版本序号,该信息可以使器件和它的边界扫描描述语言(BSDL)文件相关联。

  JTAG系统最核心的是TAP控制器,TAP控制器被设计用来与JTAG系统内部寄存器相互动,TAP控制器是一个被TMS信号控制转换的同步状态机,控制着JTAG系统的行为。

  如上图所示,TAP控制器的内部状态机一共16个状态,关于各个状态具体含义可查阅IEEE1149.1手册。TAP控制器的基本功能是产生BSR和指令寄存器正常工作所需要的时钟和控制信号,其主要功能有以下几点:

  • 提供信号将指令装入指令寄存器。

  • 提供信号将输入数据从TDI管脚移入内部寄存器、把输出数据从内部寄存器移出到TDO管脚。

  • 执行相应功能,如捕获、移位和更新数据等。

  指令寄存器是用来存储需要解释执行的指令的,IEEE 1149.1标准规定了JTAG兼容器件必须要具备的指令:

  • BYPASS:用单一单元旁路寄存器传送数据,缩短JTAG链上不必要的扫描链路。

  • EXTEST:将已知值(存在BSR)驱动到芯片针脚上。

  • SAMPLE/PRELOAD:将捕获到的芯片针脚值装入BSR。

  除了必备的指令外,IEEE 1149.1标准还规定了如下可选的指令:

  • IDCODE:将IDCODES寄存器中的数据移出。

  • INTEST:将已知值(存在BSR)驱动到芯片核心逻辑上。

  • RUNBIST:当TAP进入测试运行空闲状态时,芯片进行自检。

1.4 JTAG调试工具pinout

  通常支持JTAG接口的调试编程工具其实只是利用了JTAG技术的四线TAP通信协议,而除了标准TAP信号线外,有时还加入其他辅助信号线构成完整pinout,对于ARM JTAG调试工具来说,有两种比较通用的pinout标准,即ARM20 JTAG header和ARM14 JTAG header:

  上述两种ARM JTAG header中除了标准TAP信号线外,其他辅助信号线含义如下:

信号名ARM20-pinARM14-pin信号含义
VrefP1P1,P13JTAG接口电平参考电压。用于检查目标系统是否供电,该引脚通常与目标系统Vdd相连,中间不允许串接电阻。
VsupplyP2N/A电源输入
nSRSTP15P12System Reset信号,与目标系统复位信号相连。可以直接对目标系统复位,同时可以检测目标系统的复位情况。为了防止误触发,应在目标端加上适当的上拉电阻。
RTCKP11N/AReturn Test Clock。由目标系统反馈给JTAG的时钟信号,用来动态控制TCK速率。不使用时可以直接接地。
GNDP4,P6,P8,P10,P12,P14,P16,P18,P20P2,P4,P6,P8,P10,P14接地
DBGRQP17N/A连接到目标系统的调试请求信号
DBGACKP19N/A由目标系统反馈回来的调试应答信号

Note:更多JTAG pinout详见JTAG test网站的整理 http://www.jtagtest.com/pinouts/

二、JTAG接口进阶

  前面讲完了JTAG基础知识,下面痞子衡再给大家多介绍一些JTAG相关的“黑科技”。

2.1 BSDL文件

  现如今支持JTAG接口的芯片越来越多,为了统一各芯片厂商的具体JTAG实现,促进整个电子行业的一致性,IEEE1149.1标准制订了BSDL语言规范。BSDL是JTAG设备的标准建模语言,它的语法是VHDL的子集,是对JTAG器件的边界扫描特性的描述,主要用来沟通芯片厂商、用户与测试工具之间的联系。


开源的JTAG BSDL库网站(http://bsdl.info/),涵盖主流厂商的主流芯片的BSDL文件

  痞子衡随便找一款芯片的BSDL文件(Freescale K60_1M(K24_144QFP))简单分析下:


entity k60_1m is

     generic (PHYSICAL_PIN_MAP : string := "K24_144qfp");

-- 此处描述芯片所有引脚属性

    port (

                                PTA0:        in   bit;

                                  ...

                              XTAL32:   linkage   bit);

    use STD_1149_1_2001.all;

    use STD_1149_6_2003.all;

-- 描述芯片引脚pinout

    attribute COMPONENT_CONFORMANCE of k60_1m: entity is "STD_1149_1_2001";

    attribute PIN_MAP of k60_1m: entity is PHYSICAL_PIN_MAP;

    constant K24_144qfp :PIN_MAP_STRING :=

                                "PTA0:      50," &

                                   ...

                              "XTAL32:      40" ;

-- 描述JTAG信号在芯片引脚分配

    attribute TAP_SCAN_OUT of PTA2 : signal is true;

    attribute TAP_SCAN_CLOCK of PTA0 : signal is (2.00e+07,BOTH);

    attribute TAP_SCAN_MODE of PTA3 : signal is true;

    attribute TAP_SCAN_IN of PTA1 : signal is true;

-- 描述JTAG指令寄存器相关属性

    attribute INSTRUCTION_LENGTH of k60_1m: entity is 4;

    attribute INSTRUCTION_OPCODE of k60_1m: entity is

        "BYPASS  (1111)," &

        "CLAMP  (1100)," &

        "EXTEST  (0100)," &

        "HIGHZ  (1001)," &

        "IDCODE  (0000)," &

        "PRELOAD  (0010)," &

        "SAMPLE  (0011)," &

        "ENABLE_CENSOR_CTRL  (0111)," &

        "ENABLE_TEST_CTRL  (0110)," &

        "EZPORT  (1101)," &

        "JTAGDP_ABORT  (1000)," &

        "JTAGDP_APACC  (1011)," &

        "JTAGDP_DPACC  (1010)," &

        "JTAGDP_IDCODE  (1110)";

    attribute INSTRUCTION_CAPTURE of k60_1m: entity is  "xx01";

    attribute INSTRUCTION_PRIVATE of k60_1m: entity is

        "ENABLE_CENSOR_CTRL," &

        "ENABLE_TEST_CTRL," &

        "EZPORT," &

        "JTAGDP_ABORT," &

        "JTAGDP_APACC," &

        "JTAGDP_DPACC," &

        "JTAGDP_IDCODE";

-- 描述JTAG识别码寄存器相关属性

    attribute IDCODE_REGISTER of k60_1m: entity is

        "0000"  & -- Version

        "1011001100011010"  & -- Part Number

        "00000001110"  & -- Manufacturer Identity

        "1";  -- IEEE 1149.1 Requirement

 

    attribute REGISTER_ACCESS of k60_1m: entity is

        "BYPASS (BYPASS)," &

        "DEVICE_ID (IDCODE)";

-- 描述JTAG边界扫描寄存器相关属性

    attribute BOUNDARY_LENGTH of k60_1m: entity is 196;

    attribute BOUNDARY_REGISTER of k60_1m: entity is

-- num cell   port/*              function  safe  [ccell  dis  rslt] 

"   0  (BC_2, *,                  control,  1)                       ," &

"   1  (BC_8, PTE0,               bidir,    X,    0,      1,   Z)    ," &

...

" 194  (BC_2, *,                  control,  1)                       ," &

" 195  (BC_8, PTD15,              bidir,    X,    194,    1,   Z)    ";

end k60_1m;

2.2 JTAG菊花链

  当你的系统中有多个JTAG设备时,为解决JTAG口过多占用PCB的问题,JTAG支持如下菊花链方式连接(在FPGA应用尤其广泛):

  从上图可以看出TMS、TCK是一主多从并联的结构(设备过多时TMS,TCK电路需加缓冲器(如74LVC245)增加驱动能力);TDI、TDO是一主一从串联的结构,这种菊花链方式使得PCB上只需要一个JTAG接口便可以访问所有JTAG设备。


推荐阅读

史海拾趣

FTCAP Fischer & Tausche Capacitor Group公司的发展小趣事

FTCAP Fischer & Tausche Capacitor Group公司的发展故事

故事一:德国制造的坚持

FTCAP Fischer & Tausche Capacitor Group自成立以来,始终坚守在德国本土进行电容器的生产和研发。这一决策源于公司对产品质量的不懈追求。在电子行业,德国制造以其精湛的工艺和严格的质量控制而闻名,FTCAP也不例外。通过缩短研发与生产之间的距离,FTCAP能够确保高效的生产流程和与客户的紧密协作,从而快速响应市场需求,提供高质量的产品。

故事二:多样化的产品线

FTCAP的产品线涵盖了从薄膜电容器到铝电解电容器的广泛范围,满足了不同行业对电容器的多样化需求。公司不仅生产标准规格的电容器,还根据客户的特定需求提供定制化的解决方案。这种灵活性和创新性使得FTCAP在竞争激烈的电子市场中脱颖而出,赢得了众多客户的信赖和好评。

故事三:技术创新与产品升级

近年来,FTCAP不断投入资源进行技术创新和产品升级。例如,公司推出的Enlight Energy Cap系列薄膜电容器,经过重新设计后,不仅性能更加优越,还增加了“Enlight”这一附加属性,进一步提升了产品的市场竞争力。此外,FTCAP还致力于提高电容器的能效和可靠性,以满足日益严格的环保和能效标准。

故事四:行业内的替代解决方案

凭借超过70年的电容器研发和生产经验,FTCAP在行业内建立了良好的声誉。当一些客户面临竞争对手产品无法满足其需求时,FTCAP能够提供定制化的电容器作为替代解决方案。这些定制产品不仅性能优越,而且能够完美匹配客户的设备和应用场景,帮助客户解决燃眉之急。

故事五:团队建设与企业文化

FTCAP的成功离不开其优秀的团队和独特的企业文化。公司注重员工的培训和发展,鼓励员工创新思维和团队合作。在FTCAP,员工们不仅拥有专业的技能和知识,还具备高度的责任感和使命感。他们共同努力,为公司的发展贡献自己的力量。此外,FTCAP还定期举办各种团建活动,增强员工之间的凝聚力和归属感,营造了一个和谐、积极的工作氛围。

Excelight Communications Inc公司的发展小趣事

Excelight Communications Inc公司成立于XX世纪初,当时正值通信技术飞速发展的时代。创始人李明(化名)是一位电子工程专家,他对光通信技术有着浓厚的兴趣。在创办公司之前,李明曾在一家大型通信企业工作,积累了丰富的技术和管理经验。他发现市场上对于高速、高效的光通信产品有着巨大的需求,于是决定创立Excelight,专注于研发和生产光通信模块和设备。

创业初期,Excelight面临着资金、技术和市场等多方面的挑战。李明带领团队日夜兼程,不断攻克技术难关,同时积极寻找合作伙伴和投资人。经过几年的努力,Excelight逐渐在市场上崭露头角,其光通信产品因性能优越、价格合理而受到了客户的广泛好评。

Glenair公司的发展小趣事
检查电路中的连接线是否松动、接触不良或断裂,确保信号能够正确传输。
倍思特(BEST)公司的发展小趣事
如果怀疑设定阈值不当,可以根据实际情况调整电路中的电位器或稳压管,以设置正确的欠电压保护阈值。
Amprobe公司的发展小趣事
使用万用表等工具检查电路中的关键元件是否损坏或性能下降,如电压比较器、继电器、可控硅等。
FCI / Amphenol公司的发展小趣事

Amphenol公司成立于1932年,最初由Arthur J. Schmitt和Gordon K. Klapmeier共同创办,专注于电磁线缆的制造。然而,随着技术的进步和市场需求的变化,Amphenol公司逐渐将重心转向电缆连接器的制造。凭借高品质的产品和服务,Amphenol公司的电缆连接器在市场上获得了广泛的认可,并逐渐发展成为全球最大的电缆连接器制造商之一。

问答坊 | AI 解惑

QQ农场带给我们商业启示--安防篇

QQ农场玩了好久,突然有了点明悟,做生意就像种菜一样。个人总结了一下。 1.产品和彩页就是种子,品牌很多,看你适合卖哪个,出厂价买来,等待卖出去。 2.工程商就是土地,你做的时间越长,积攒的客户越多,土地就越多,不过在多都有个头。 3.要 ...…

查看全部问答>

keil

bit Ircv(uchar sla, uchar *s) {    Start_I2c();/*启动总线*/    SendByte(sla);            /*发送器件地址*/      if(ack==0)return(0);     ...…

查看全部问答>

求教关于430中FLASH擦写问题

首先说明一下,我用的芯片是M430F149 我照着http://www.microcontrol.cn/bbs/a/a.asp?B=112&ID=9201&E=1&EID=69&RootID=16594&q=1&r=16594 的方法试着做了一下,当使用的空间小于168字节时一点没有问题 但是在我尝试使用2000字节问题就出现了 ...…

查看全部问答>

用12864液晶的图形方式显示字符时为什么会出现乱码?

    基本指令能够正常显示字符或汉字,改用扩充指令的图形方式时,屏幕就会出现乱码,尽管字符也还是显示出来了,另外128X64大小的图片能正常显示,请问各位高人,这是什么原因呢?为什么图形方式不能正常显示字符呢?     fo ...…

查看全部问答>

AT89S51单片机控制GSM模块(M22)发送短信程序~~~~~~~~~~~~~~~~~~~~~

自己改的AT89S51单片机控制GSM模块(M22)发送短信程序,在Keil上已编译没错,但还没试过烧入片内运行。。   大家看看,这个程序可行否? 还有什么错误的地方?    希望搞过GSM的朋友多提点意见,让程序完善起来! &nbs ...…

查看全部问答>

wince下MMS是怎么一个处理过程

哪位大牛可以为小菜鸟解答一下,谢谢…

查看全部问答>

多功能锂电池充电板应用

  邮购到几种充电板,经通电测试发现其中的一块用MM1332G集成电路的充电板输出4.15v电压,充电集成电路为HHl332G,查资料得知,该集成电路为日本美上美公司产专用恒流恒压锂离子电池充电IC,内含电池电压检测、充满电检测,控制每节截止充电电压 ...…

查看全部问答>

什么都不说请给个解释

下载 (30.55 KB) 2009-9-16 16:53 下载 (32.04 KB) 2009-9-16 16:53 …

查看全部问答>

MSP430g2553时钟设置

请教各位大哥,MSP430G2553的内部时钟是怎么回事,内部的DCOCLK,有没有详细点的说明啊。还有这块板子怎样才能把P2.6\\P2.7口接的晶振起振。我接的是8M。…

查看全部问答>

变压器次极绕组问题

请教各位大侠,变压器次极有两个绕组,一为主绕组,一为副绕组,双线为什么并绕呢?…

查看全部问答>