1、嵌入式系统中的 JTAG 接口编程技术 2006.05.07 中国科学院声学研究所(100084) 何希顺 清华大学自动化系(100084 ) 张 跃 何荣森 来自:电子技术应用 摘要:分析发嵌入式系统开发中常用的三种芯片编程方法,介绍了 JTAG 接口的标准,工作原理及在芯片中的实现,根据 JTAG 接口所提供的边界扫描功能 ,通过 PC 机并行接口模拟 JTAG 接口的时序,实现了使用目标系统中微处理器的 JTAG 接口对系统程序存储器 FLASH 的编程。关键词:嵌入式系统 JTAG(Joint test action Group)联合测试行为组织 编程器 StrongARM 手持设备随
2、着手持式电子设备的迅猛发展,手机,PDA、掌上电脑,电子书和数码相机等正在快步走进人们的日常生活,这一类电子产品同属于嵌入式系统的范畴,都是以高性能的微机处理器为核心扩展相应的应用程序,实现电子设备的各种功能。由于是手持设备,因而要求体积小、重量轻,耗电少,这些特点决定了设备内部的印刷板的尺寸比常规的电子设备小的多,而且元器件密度大,双面贴装。这给设计人员带来了若干问题,如操作系统代码和应用程序的写入,板上芯片的测试等。本文作者结合实际工作,就嵌入式系统中如何通过 JTAG 接口进行 FLASH 芯片编程作了探讨。1 几种常用字芯片编程方法在嵌入式系统开发和产品生产过程中,对系统程序存储器编程
3、主要使用三种编程方法,通过编程器编程、使用板上编程器编程和在系统编程。1.1 通过编程器编程这是在 PROM、 EPROM、PQL 等芯片游行时常用的编程方法。即在可编程芯片焊装到电路板之前,使用专门的编程器对芯片进行代码或数据的写入,然后将已编程的芯片安装到电路板上。使用编程器编程特别适用于 DIP 封装的芯片。如是是其它类型的封装,则必须使用相应的适配器。这种方法的缺点滴是零要手工进行待编程芯片的插入,锁定等工作,容易造成芯片的方向错误、引脚错位等,导致编程效率降低。1.2 使用板上编程器编程 (OBP )这种方法是在电路板上所有的芯片都已经焊接完毕后,再对电路板上的可编程芯片进行编程。通
4、过专用电缆将电路板与外部计算机连接,由于计算机的应用程序进行板上可编程芯片的代码或数据写入。芯片擦除编程所需用的电源、控制信号、地址、数据和相关的命令都由板外的编程控制器提供,在进行板上编程时,需要通过专门的辅助电路关断目标板上 CPU 的电源或将其外部接口信号设置为高阻状态,以免与编程时的地址、数据和控制信号发生冲突。在板上编程可以克服芯片引脚错位,方向插反等问题,避免烧毁芯片,编程错误,保证了芯片编程的高成功率和可靠性。另一个优点就是及时软件升级,可以做到在产品出厂之时系统使用最新版本的固化软件。这对于日新月异的手持电子设备而言是必须的。这种方法的缺点是需要在电路板上设计编程用的接口、隔离
5、等辅助电路,在编程时通过跳线或 FET 开关时进编程与正常工作的状态转换。这样会增加每个电路板芯片的数量,造成产品成本的增加。1.3 在系统编程(ISP、ISW )这种方法直接利用系统中带有 JTAG 接口的器件,如 CPU、CPLD、FPGA 等,执行对系统程序存储芯片的内容和擦除和编程操作。一般而言,高档的微处理器都带有JTAG 接口,系统程存储器的数据总线,地址总线和控制接口直接接在微处理器上。编程时,使用 PC 机内插卡或并行的接口通过专用电缆将系统电路板与 PC 机联系起来,在 PC 机上运行相关的程序,将编程数据及控制信号传送到 JTAG 接口的芯片上,利用相应的指令从微处理器的引
6、脚按照 FLASH 芯片的编程时序输出到FLASH 存储器。这种编程方法的条件是系统中必须存在带有 JTAG 接口或与之兼容的芯片如微处理器。优点是系统板上不需要增加其它于编程有关的辅助电路。减小了电路板的尺寸,避免了对微小封装芯片的手工处理,特别适用于电路板尺寸有严格限制的手持设备。2 JGAG 接口介绍面对复杂电路的设计、整版测试的难度及表面的贴装技术带来的有限测试引脚下等问题,业界不得不寻找一个标准加以解决。JTAG 边界扫描即 IEEE1149。1 标准,该测试标准定义了用于解决上述问题的硬件结构和工作机制。其优点在于将极其复杂的电路板测试转弯成具有良好的结构性、可以通过软件简单而灵活
7、处理。它虽然是一个主要用于片上电路的测试标准,但却打开了各种相关应用的大门。这个标准定义了可用于完成功能和互连测试以及内建自测过程的各种指令。芯片生产厂商如ALTERA、XILINX、ATMEL 、 AMD、TI 等对标准进行了扩充,使用专用的扩展指令执行维护和诊断应用及对可配置器件的可编程算法,使 JTAG 接口广泛用于 FLASH系列芯片的编程。概括起来,JTAG 接口主要应用于:电路的边界扫描测试和可编程芯片的在系统编程。21 JTAG 的结构在硬件结构上,JTAG 的接口包括两个部分,JTAG 端口和控制器。与 JTAG 接口兼容的器件可以是微处理器(MPU)微控制器(MCU)PLD
8、CPL FPGA ASIC 或其它符合 IEEE1149。1 规范的芯片。IEEE1149 。1 标准中规定对应数字集成电路的每个引脚都设有一个移动存寄单元。称为边界扫描单元 BSC。它将 JTAG 电路与内核逻辑电路联系起来,同时隔离内核电路和芯片引脚。由集成电路的所有边界扫描构成单元扫描寄存器 BSR。边界扫描寄存器仅在进行 JTAG 测试时有效,在集成电路工作正常无效,不影响集成电路的功能 。具有 JTAG 接口的芯片内部结构如图 1 所示:测试逻辑的最高电路包括 3 个主要内容测试访问端口(TAP )控制器TAP 控制器提供在嵌入在 JTAG 兼容器件内部的测试功能电路的访问控制,是一
9、个同步状态机。每个 JTAG 兼容的器件都有自己的 TAP 控制器。通过测试模式选择TMS 和时钟信号 TCK 控制其状态转移,实现由 IEEE149。 1 标准确定的测试逻辑电路的工作时序。指令寄存器指令寄存器是基于电路的移动寄存器,通过它可以串行输入执行各种操作的指令。数据寄存组。数据寄存器组是一组基于电路的移位寄存器。操作指令被串行装入由当前的指令所选择的数据寄存器。随着操作的执行,测试结果被移出。22 JTAG 引脚定义JTAG 接口主要包括四个引脚下:TMS TCK TDI 和 TCO 及一个可选配的引脚TRST,用于驱动电路模块和控制执行规定的操作。各引脚的功能如下:TCK: JT
10、AG 测试时钟,为 TAP 控制器和寄存器提供测试参考。在 TCK 的同步作用下通过 TDI 和 TDO 引脚下串行移入或移出数据及指令。同时,TCK 为 TAP 控制器状态机提供时钟。TMS:TAP 控制器的三项式输入信号。TCK 的上升沿时刻 TMS 的状态确定 TAP 控制器即将进入的工作状态。通常 TMS 引脚具有内部上拉电阻 ,以保证该引脚在没有驱动时处于逻辑 1 状态。TDI:JTAG 指令和数据寄存器的串行数据输入端。TAP 控制器的当前状态以及保持在指令寄存器中的具体指令决定对于一个特定的操作由 TDI 装入哪个寄存器。在 TCK 的上升沿时刻,TDI 引脚状态被除数采样,结果
11、送到 JTAG 寄存器组。TDO:JTAG 指令和数据寄存器的串行输出端。TAP 控制器的当前状态以及保持在指令寄存器中的具体指令决定对于一个特定的操作哪个寄存器的内容送到 TDO 输出。对于任何已知的操作,在 TDI 和 TDO 之间只能有一个寄存器(指令或数据)处于有效连接状态。TDO 在 TCKR 的下降沿改变状态,并且只在数据通过器件移动过程中有效。该引脚在其它的时间处于三状态下。TRST:测试复位输入信号,低电平有效,为 TAP 控制器提供异步初始化信号。23 JTAG 测试访问端口(TAP)控制器TAP 控制器是一个 16 状态的有限状态机,为 JTAG 提供控制逻辑,控制进入到J
12、TAG 结构中各种寄存器内数据通信的扫描与操作。TAP 状态转移图如图 2 所示,由 TCK 同步时钟上升沿时刻 TMS 引脚的逻辑电平决定状态转移的过程,(高电平TMS=1,低电平 TMS=0)。对于由 TDI 端输入到器件的扫描信号共有两个状态变化路径:一个用于移入指令到指令寄存器;另一个用于移入数据到有效的数据寄存器,该寄存器由当前指令确定。状态图中的每个状态都是通过学习 TAP 控制器进行数据处理所需要的。这些处理包括给引脚施加激励信号,捕获输入的数据,装载指令,边界扫描寄存器中数(此地有图)据的移入或移出。图 2 表示了 TAP 状态机的基本流程,描述了从一个状态到另一个状态 TMS
13、 信号的变化,在芯片 JTAG 接口的 TRST 引脚上加一个低脉冲信号可以使 TAP 控制器复位到测试逻辑复位(Test-Logic-Reset)主状态。2.4 JTAG 接口控制指令控制指令用于控制 JTAG 接口进行各种操作,控制指令包括基本指令和扩展指令。JTAG 接口标准要求芯片支持的基本指令有:EXTEST INTEST SAMPLE/PRELOAD BYPASS IDCODE HIGHZ。芯片厂商可以根据实际需要选择或添加扩展指令。3 JTAG 接口的使用通过 JTAG 接口可以进行电路板及芯片的测试,也可以实现对目击者标电路板上的程序存储器编程。本文仅仅讨论使用 JTAG 接口
14、对板上 FLASH 存储器的编程。一般,可以利用专用的 PC 机内插卡式硬件控制器或独立的编程器访问 JTAG 器件。也可以直接由 PC 机的并行接口模拟 JTAG 时序,硬件控制器或编程器通过专用电缆连接到目标电路板上,被编程的 FLASH 存储器芯片的地址线,数据线和控制信号线接到 JTAG 兼容芯片的相应引脚上。值得注意的是采用这种编程方法,不要求FLASH 器件具有 JTAG 接口,只要与其相连接的芯片具有 JTAG 接口即可。在编程FLASH 芯片时,需要做的工作主要有:PC 机发送指令或数据到 JTAG 兼容芯片的边界扫描寄存器(BSR);将保存在 BSR 中的指令或数据通过 JT
15、AG 存储器。这个过程是由运行在 PC 机上的软件进行控制的。3.1 硬件配置在某个设计项目中,使用了 intel 公司的 StrongARM 芯片 SA-100 和该公司的Strata 系列 FLASH 存储器芯片/SA-100 芯片是种高性能、低功耗、集成有多种常用接口的 SOC 微处理器芯片 。特别严重适合于持设备。而 strata FLASH 是 intel 公司使用独创的 1 个存储单元记录 2 比特数据技术制造的闪速存储芯片 ,其特点是体积小,容量大,成本低,特别适合于程序代码与数据的存储。选择的型号为:E28F128J3A,可以配置成 8 位或 16 位数据线方式,SA-1110
16、 为 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 中可
17、以看出,使用 PC 机并行接口的几个数据线入信号线来构成 JTAG 接口引脚信号,对应关系如表 1 所示,采用信号线直接连接的方法简便易行,只需要一条专用的电缆即可操作 JTAG 接口。表 1 PC 机并行接口与 JTAG 接口信号对应表PC 机并行接口 对应 JTAG 接口引 脚 功 能 引 脚 功 能2 D0 TCK 时钟3 D1 TDI 数据输入4 D2 TMS 模式选择11 Busy TDO 数据输出3.2 控制软件SA-1110 芯片的 JTAG 接口实现了 IEEE1149。1 标准的部分功能,不能实现对芯片内部的测试及芯片仿真,但提供对芯片外的测试功能,可以用于对芯片外(此处有图
18、)部电路的测试及编程。芯片提供的 JTAG 指令包括:BYPASS(11111)旁通片上系统逻辑指令,用于未被测试的芯片:EXTEST(00000)片外电路测试指令,用于测试电路板芯片之间的互连;SAMPLE/PRELOAD(OOOO1)采样引脚/ 预加载数据指令,用于采样芯片引脚信号或通过加载数据 控制引脚输出信号;IDCODE(00110)读芯片识别码指令,用于识别电路板上的芯片;HIGHZ( 00101)设置高阻状态指令,用于将芯片的引脚设为无效状态。括号中的内容是指令的操作码,它们通过 TDI 引脚串行移入到指令寄存器。BYPASS 和 EXTEST 指令的操作码是 IEEE1149.
19、1中规定的,因此对于所有的 JTAG 接口兼容芯片,这两个指令的操作码都是相同的,其它指令的操作码可以由芯片厂商根据实际定义。结合待编程的 FLASH 存储器特征,利用上面提供的 JTAG 指令编写一个编程 FLASH 存储器的 PC 机应用程序,借助 SA-1110芯片的 JTAG 接口将目标系统使用的操作系统和应用软件写入到 FLASH 存储器中。对目标板上的 FLASH 存储器进行编程时,在 PC 机上运行该程序来控制并行接口模拟 JTAG 时序并将编程代码运送到 SA-1110 的 JTAG 控制器,利用 JTAG 的边界扫描单元(BSC),把编程数据先移入到边界扫描寄存器(BSR),
20、然后通过 JTAG 指令 EXTEST 按照 FLASH 芯片的编程时序将数据 通过地址总线和数据总线写入 FLASH 存储器,实现芯片编程操作,在 FLASH 内容的写入过程中,程序对 2片 FLASH 同时执行写操作,完成 32 位编程,在 PC 机上运行的编程操作程序框图如图 4 所示,其中利用 PC 机并行接口实现 JTAG 接口信号的数为:int putp(int tdi,int tms,int rp) /Qutput pins (LPT driving),LPT D0 Pin 2 and TCK,/LPT D1 Pin 3 and TDI,LPT D2 Pin 4 and TMS/
21、Input pin (SA-1110 board drives),LPT Busy Pin 11 and TDOint tdo = -1;_outp(lpt_address,tms*+tdi*2); /TCK low-outp(lpt_address,tms*4+tdi*2+1); /TCK highif(rp=RP)-outp(lpt_address,tms*4+tdi*2);/TCK lowif(rp=RP)tdo=!(int)_inp(lpt_address+1)7); /get TDO data return tdo;通过 PC 机并行接口实现 SA-1110 的 JTAG 指令 EX
22、TEST 的函数为:void extest(void) putp(1,0,IP);/Run-Test/Idleputp(1,0,IP);/Run-Test/Idleputp(1,0,IP);/Run-Test/Idleputp(1,0,IP);/Run-Test/IdlePutp(1,1,IP);/select DR scanputp(1,0,IP);/capture IRputp(1,0,IP);/shift IRputp(0, 0,IP);/SA1110 Extest,指令长度为 5 位putp(0,0,IP);putp(0,0,IP);putp(0,0,IP);putp(0,0,IP);
23、putp(1,0,IP);/CPLD Bypass,指令长度为 4 位putp(1,0,IP);putp(1,0,IP);putp(1,1,IP);/Exit-IR,操作码的最后一位必须通过时钟与下一状态 EXIT1_IR有效处于同一时刻,由时钟控制 TMS 保持高电平时入 EXIT1_IR 状态。putp(1,1,IP);/Update-IRputp(1,0,IP);/Run-Test/Idleputp(1,0,IP);/Run-Test/Idleputp(1,0,IP);/Run-Test/Idle程序开始有条语句:putp(1,0,IP)。其意义在于无论 JTAG 状态机于何种状态,经过
24、这四条指令后,必将返回到 Run-Test/Idle 状态,保证下面的操作从这一状态开始进入正常的操作状态。编程 FLASH 存储器使用的其它指令的实现方法与此似。实际表明,使用 PC 机并接口实现 JTAG 时序方法是行的,对 FLASH 存储器进行编程无需其它板卡设备支持,是一种较为简单的方法。使用 JTAG 接口对 FLASH 程序存储进行编程的方法适合于系统中带有兼容 JTAG 接口的芯片。随着具有 JTAG 接口芯生应用普及,需要对 JTAG 接深入的了解,以便更好地利用芯片的资源,设计出容易测试、便于维护与升级的高可靠性,延长产品的生命周期。同时,根据 FALSH 芯片及 JTAG 接口芯片的规范对使用 JTAG 接口进行编程的控制程序的优化,可以实现存储芯片的高速编程操作,对减少产品的研发和生产周期,保证产品的上市时间非常有利。