《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > 嵌入式系统中的JTAG接口编程技术

嵌入式系统中的JTAG接口编程技术

2008-10-27
作者:何希顺1, 张 跃2, 何荣森

  摘  要: 分析了嵌入式系统开发中常用的三种芯片编程方法,介绍了JTAG接口的标准、工作原理及在芯片中的实现,根据JTAG接口所提供的边界扫描" title="边界扫描">边界扫描功能,通过PC机并行接口" title="并行接口">并行接口模拟JTAG接口的时序,实现了使用目标系统中微处理器的JTAG接口对系统程序存储器" title="程序存储器">程序存储器FLASH的编程。

  关键词: 嵌入式系统  JTAG(Joint Test Action Group)联合测试行为组织  编程器" title="编程器">编程器  StrongARM  手持设备

 

  随着手持式电子设备的迅猛发展,手机、PDA、掌上电脑、电子书和数码相机等正在快步走进人们的日常生活。这一类电子产品同属于嵌入式系统的范畴,都是以高性能的微处理器为核心扩展相应的存储器和功能电路,运行小巧的操作系统和相应的应用程序,实现电子设备的各种功能。由于是手持设备,因而要求体积小、重量轻、耗电少。这些特点决定了设备内部的印制板的尺寸比常规电子设备小得多,而且元器件密度大,双面贴装。这给设计人员带来了若干问题,如操作系统代码和应用程序的写入,板上芯片的测试等。本文作者结合实际工作,就嵌入式系统中如何通过JTAG接口进行FLASH芯片编程作了探讨。

1 几种常用的芯片编程方法

  在嵌入式系统开发和产品生产过程中,对系统程序存储器编程主要使用三种编程方法:通过编程器编程、使用板上编程器编程和在系统编程。

1.1 通过编程器编程

  这是在PROM、EPROM、PAL等芯片流行时常用的传统编程方法,即在可编程芯片焊装到电路板之前,使用专门的编程器对芯片进行代码或数据的写入,然后将已编程的芯片安装到电路板上。

  使用编程器进行编程特别适合于DIP封装的芯片,如果是其它类型的封装,则必须使用相应的适配器。这种方法的缺点是需要手工进行待编程芯片的插入、锁定等工作,容易造成芯片方向错误、引脚错位等,导致编程效率降低。

1.2 使用板上编程器编程(OBP)

  这种方法是在电路板上所有芯片已经焊装完毕后,再对板上的可编程芯片进行编程。通过专用电缆将电路板与外部计算机连接,由计算机的应用程序进行板上可编程芯片的代码或数据写入。芯片擦除、编程所需要的电源、控制信号、地址、数据和相关命令都由板外的编程控制器提供。在进行板上编程时,需要通过专门的辅助电路关断目标板上CPU的电源或将其外部接口信号设置为高阻状态,以免与编程时的地址、数据和控制信号发生冲突。

  在板上编程可以克服芯片引脚错位、方向插反等问题,避免烧毁芯片、编程错误,保证了芯片编程的高成功率和可靠性。另一个优点就是及时软件升级,可以做到在产品出厂时系统使用最新版本的固化软件,这对于日新月异的手持电子设备而言是必须的。

  这种方法的缺点是需要在电路板上设计编程用的接口、隔离等辅助电路,在编程时通过跳线或FET开关进行编程与正常工作的状态转换。这样会增加每个电路板芯片的数量,造成产品成本的增加。

1.3 在系统编程(ISP、ISW)

  这种方法直接利用系统中带有JTAG接口的器件如CPU、CPLD、FPGA等,执行对系统程序存储器芯片内容的擦除和编程操作。一般而言,高档微处理器均带有JTAG接口,系统程序存储器的数据总线、地址总线和控制信号直接接在微处理器上。编程时,使用PC机内插卡或并行接口通过专用电缆将系统电路板与PC机联系起来,在PC机上运行相关程序,将编程数据及控制信号传送到JTAG接口的芯片,利用相应指令从微处理器的引脚按照FLASH芯片的编程时序输出到FLASH存储器。

这种编程方法的条件是系统中必须存在带有JTAG接口或与之兼容的芯片如微处理器。优点是系统板上不需要增加其它与编程有关的辅助电路,减小了电路板的尺寸,避免了对微小封装芯片的手工处理,特别适用于电路板尺寸有严格限制的手持设备。

2 JTAG接口介绍

  面对复杂电路的设计、整板测试的难度及表面贴装技术带来的有限测试引脚等问题,业界不得不寻找一个标准加以解决。JTAG边界扫描即IEEE1149.1标准,该测试标准定义了用于解决上述问题的硬件结构和工作机制。其优点在于将极其复杂的印刷电路板测试转变成具有良好结构性、可以通过软件简单而灵活处理。它虽然是一个主要用于片上电路的测试标准,但却打开了各种相关应用的大门。这个标准定义了可用于完成功能和互连测试以及内建自测过程的各种指令。芯片生产厂商如ALTERA、XILINX、ATMEL、AMD、TI等对标准进行了扩充,使用扩展的专用指令执行维护和诊断应用及对可配置器件的可编程算法,使JTAG接口广泛用于FLASH系列芯片的编程。概括起来,JTAG接口主要应用于:电路的边界扫描测试和可编程芯片的在系统编程。

2.1 JTAG接口的结构

  在硬件结构上,JTAG接口包括两部分:JTAG端口和控制器。与JTAG接口兼容的器件可以是微处理器(MPU)、微控制器(MCU)、PLD、CPL、FPGA、ASIC或其它符合IEEE 1149.1规范的芯片。IEEE 1149.1标准中规定对应于数字集成电路芯片的每个引脚都设有一个移位寄存单元,称为边界扫描单元BSC。它将JTAG电路与内核逻辑电路联系起来,同时隔离内核逻辑电路和芯片引脚。由集成电路的所有边界扫描单元构成边界扫描寄存器BSR。边界扫描寄存器电路仅在进行JTAG测试时有效,在集成电路正常工作时无效,不影响集成电路的功能。具有JTAG接口的芯片内部结构如图1所示。

 

 

  测试逻辑的最高级电路包括3个主要模块:

  · 测试访问端口(TAP)控制器

  TAP控制器提供对嵌入在JTAG兼容器件内部的测试功能电路的访问控制,是一个同步状态机。每个JTAG兼容的器件都有自己的TAP控制器。通过测试模式选择TMS和时钟信号TCK控制其状态转移,实现由IEEE1149.1 标准确定的测试逻辑电路的工作时序。 

  · 指令寄存器

  指令寄存器是基于电路的移位寄存器,通过它可以串行输入执行各种操作的指令。

  · 数据寄存器组

  数据寄存器组是一组基于电路的移位寄存器。操作指令被串行装入由当前指令所选择的数据寄存器。随着操作的执行,测试结果被移出。

2.2 JTAG引脚定义

  JTAG接口主要包括四个引脚:TMS、TCK、TDI和TDO及一个可选配的引脚TRST,用于驱动电路模块和控制执行规定的操作。各引脚的功能如下:

  ·TCK:JTAG测试时钟,为TAP控制器和寄存器提供测试参考。在TCK的同步作用下通过TDI和TDO引脚串行移入或移出数据及指令。同时,TCK为TAP控制器状态机提供时钟。

  ·TMS:TAP控制器的模式输入信号。TCK的上升沿时刻TMS的状态确定TAP控制器即将进入的工作状态。通常TMS引脚具有内部上拉电阻,以保证该引脚在没有驱动时处于逻辑1状态。

  ·TDI:JTAG指令和数据寄存器的串行数据输入端。TAP控制器的当前状态以及保存在指令寄存器中的具体指令决定对于一个特定的操作由TDI装入哪个寄存器。在TCK的上升沿时刻,TDI引脚状态被采样,结果送到JTAG寄存器组。

  ·TDO:JTAG指令和数据寄存器的串行数据输出端。TAP控制器的当前状态以及保持在指令寄存器中的具体指令决定对于一个特定的操作哪个寄存器的内容送到TDO输出。对于任何已知的操作,在TDI和TDO之间只能有一个寄存器(指令或数据)处于有效连接状态。TDO在TCK的下降沿改变状态,并且只在数据通过器件移动过程中有效。该引脚在其它时间处于三态状态。

  ·TRST:测试复位输入信号,低电平有效,为TAP控制器提供异步初始化信号。

2.3 JTAG测试访问端口(TAP)控制器

  TAP控制器是一个16状态的有限状态机,为JTAG提供控制逻辑,控制进入到JTAG结构中各种寄存器内数据的扫描与操作。TAP状态转移图如图2所示,由TCK同步时钟上升沿时刻TMS引脚的逻辑电平决定状态转移的过程(高电平TMS=1,低电平TMS=0)。对于由TDI端输入到器件的扫描信号共有两个状态变化路径:一个用于移入指令到指令寄存器;另一个用于移入数据到有效的数据寄存器,该寄存器由当前指令确定。

 

 

  状态图中的每个状态都是通过TAP控制器进行数据处理所需要的。这些处理包括给引脚施加激励信号,捕获输入的数据,装载指令,边界扫描寄存器中数据的移入或移出。图2表示了TAP状态机的基本流程,描述了从一个状态到另一个状态TMS信号的变化,在芯片JTAG接口的TRST引脚上加一低脉冲信号可以使TAP控制器复位到测试逻辑复位(Test-Logic-Reset)主状态。

2.4 JTAG接口的控制指令

  控制指令用于控制JTAG接口进行各种操作,控制指令包括基本指令和扩展指令。JTAG接口标准要求芯片支持的基本指令有:EXTEST、INTEST、SAMPLE/PRELOAD、BYPASS、IDCODE、HIGHZ。芯片厂商可以根据实际需要选择或添加扩展指令。

3 JTAG接口的使用

  通过JTAG接口可以进行电路板及芯片的测试,也可以实现对目标电路板上的程序存储器编程。本文仅讨论使用JTAG接口对板上FLASH存储器的编程。一般,可以利用专用的PC机内插卡式硬件控制器或独立的编程器访问JTAG器件,也可以直接由PC机的并行接口模拟JTAG时序,硬件控制器或编程器通过专用电缆连接到目标电路板。被编程的FLASH存储器芯片的地址线、数据线和控制信号线接到JTAG兼容芯片的相应引脚上。值得注意的是:采用这种编程方法,不要求FLASH器件具有JTAG接口,只要与其相连接的芯片具有JTAG接口即可。在编程FLASH芯片时,需要做的工作主要有:①PC机发送指令或数据到JTAG兼容芯片的边界扫描寄存器(BSR);②将保存在BSR中的指令或数据通过JTAG专用指令传送给FLASH存储器。这个过程是由运行在PC机上的软件进行控制的。

3.1 硬件配置

  在某个设计项目中,使用了Intel公司的 StrongARM芯片SA-1110和该公司的Strata系列FLASH存储器芯片。SA-1110芯片是一种高性能、低功耗、集成有多种常用接口的SOC微处理器芯片,特别适合于手持设备。而Strata FLASH是Intel公司使用独创的1个存储单元记录2比特数据技术制造的闪速存储器芯片,其特点是体积小、容量大、成本低,特别适合于程序代码与数据的存储。选择的型号为:E28F128J3A,可以配置成8位或16位数据线方式。SA-1110为32位芯片,其外扩的程序存储器和数据存储器也为32位,因此程序存储器需要2片28F128J3A配置为32位形式,如图3所示。

 

 

  在本例中,JTAG菊花链中包含两个IEEE1149.1兼容芯片,即SA-1110微处理器和CPLD。由于FLASH的地址总线、数据总线和控制信号线接在SA-1110上,在利用JTAG接口编程FLASH存储器时,与JTAG链上的CPLD芯片无关,需要通过指令将CPLD芯片设为旁通模式。FLASH芯片的控制信号如读信号(/OE)、写信号(/WR)和片选信号(/CE)等直接由SA-1110产生。

  从图3中可以看出,使用PC机并行接口的几个数据线和信号线来构成JTAG接口引脚信号,对应关系如表1所示。采用信号线直接连接的方法简便易行,只需要一条专用电缆即可操作JTAG接口。

 

 

3.2 控制软件

  SA-1110芯片的JTAG接口实现了IEEE1149.1标准的部分功能,不能实现对芯片内部的测试及芯片仿真,但提供对芯片外的测试功能,可以用于对芯片外部电路的测试或编程。芯片提供的JTAG指令包括:

  ·BYPASS(11111) 旁通片上系统逻辑指令,用于未被测试的芯片;

  ·EXTEST(00000) 片外电路测试指令,用于测试电路板上芯片之间的互连;

  ·SAMPLE/PRELOAD(00001) 采样引脚/预加载数据指令,用于采样芯片引脚信号或通过加载数据控制引脚输出信号;

  ·IDCODE(00110) 读芯片识别码指令,用于识别电路板上的芯片;

  ·HIGHZ(00101) 设置高阻态指令,用于将芯片的引脚设为无效状态。

  括号中的内容是指令的操作码" title="操作码">操作码,它们通过TDI引脚串行移入到指令寄存器。BYPASS和EXTEST指令的操作码是IEEE1149.1中规定的,因此对于所有的JTAG接口兼容芯片,这两个指令的操作码都是相同的。其它指令的操作码可以由芯片厂商根据实际定义。

  结合待编程的FLASH存储器特征,利用上面提供的JTAG指令编写一个编程FLASH存储器的PC机应用程序,借助SA-1110芯片的JTAG接口将目标系统使用的操作系统和应用软件写入到FLASH存储器中。对目标板上的FLASH存储器进行编程时,在PC机上运行该程序来控制并行接口模拟JTAG时序并将编程代码传送到SA-1110的JTAG控制器,利用JTAG的边界扫描单元(BSC),把编程数据先移入到边界扫描寄存器(BSR)。然后通过JTAG指令EXTEST按照FLASH芯片的编程时序将数据通过地址总线和数据总线写入FLASH存储器,实现芯片编程操作。在FLASH内容的写入过程中,程序对2片FLASH同时执行写操作,完成32位编程。在PC机上运行的编程操作程序框图如图4所示,其中利用PC机并行接口实现JTAG接口信号的函数为:

 

 

  int putp(int tdi, int tms, int rp)

  {     //Output pins (LPT driving),LPT D0 Pin 2 and TCK,

         //LPT D1 Pin 3 and TDI,LPT D2 Pin 4 and TMS

          //Input pin (SA-1110 board drives),LPT Busy Pin 11 and TDO

           int tdo = -1;

           _outp(lpt_address, tms*4+tdi*2);                     //TCK low

           _outp(lpt_address, tms*4+tdi*2+1);                //TCK high

           if(rp=RP)_outp(lpt_address,tms*4+tdi*2);            //TCK low

           if(rp=RP)tdo!((int)_inp(lpt_address+1)>>7);           //get TDO data

           return tdo;

  }

  通过PC机并行接口实现SA-1110的JTAG指令EXTEST的函数为:

  void extest(void)

  {            putp(1,0,IP);  //Run-Test/Idle

               putp(1,0,IP);  //Run-Test/Idle

                 putp(1,0,IP);  //Run-Test/Idle

                 putp(1,0,IP);  //Run-Test/Idle

                 putp(1,1,IP); //select DR scan

                 putp(1,1,IP);  //select IR scan

                 putp(1,0,IP);  //capture IR

                 putp(1,0,IP);  //shift IR

                 putp(0,0,IP);  //SA1110 Extest,指令长度为5位

                 putp(0,0,IP);

                 putp(0,0,IP);

                 putp(0,0,IP);

                 putp(0,0,IP);

                 putp(1,0,IP);  //CPLD Bypass,指令长度为4位

                 putp(1,0,IP);

                 putp(1,0,IP);

                 putp(1,1,IP);  //Exit1-IR,操作码的最后一位必须通过时钟与下一状态EXIT1_IR

                                     有效处于同一时刻,由时钟控制TMS保持高电平时进入EXIT1_IR

                                     状态。

                 putp(1,1,IP);  //Update-IR

                 putp(1,0,IP);  //Run-Test/Idle

                 putp(1,0,IP);  //Run-Test/Idle

                 putp(1,0,IP);  //Run-Test/Idle

  }

  程序开始有四条语句:putp(1,0,IP)。其意义在于无论JTAG状态机处于何种状态,经过这四条指令后,必将返回到Run-Test/Idle状态,保证下面的操作从这一状态开始进入正常的操作状态。

  编程FLASH存储器使用的其它指令的实现方法与此类似。实践表明,使用PC机并行接口实现JTAG时序的方法是可行的,对FLASH存储器进行编程无需其它板卡设备支持,是一种较为简单的方法。

  使用JTAG接口对FLASH程序存储器进行编程的方法适合于系统中带有兼容JTAG接口的芯片。随着具有JTAG接口芯片应用的普及,需要对JTAG接口有深入的了解,以便更好地利用芯片的资源,设计出容易测试、便于维护与升级的高可靠性系统,延长产品的生命周期。同时,根据FALSH芯片及JTAG接口芯片的规范对使用JTAG接口进行编程的控制程序的优化,可以实现存储芯片的高速编程操作,对减少产品的研发和生产周期,保证产品的上市时间非常有利。

 

参考文献

1 Intel公司.Intel StrongARM SA1110 Microprocessor Advanced Developer's Manual. Dec.1999

2 IEEE Std 1149.1 Standard Test Access Port and Boundary-Scan Architecture,ISBN 1-55937-350-4

(From IEEE, Inc,. 345 East 47th Street, New York,NY 100167, USA)

3 Kenneth P. Parker.The Boundary-Scan Handbook.publisher: Kluwer Academic Publishers

4 Intel公司.Designing for On-Board Programming Using the IEEE 1149.1(JTAG). November 1996

5 Xilinx公司.In-System Programming Using an Embedded Microcontroller.January 15. 2001

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。