摘要:分析发嵌入式系统开发中常用的三种芯片编程方法,介绍了JTAG接口的标准,工作原理及在芯片中的实现,根据JTAG接口所提供的边界扫描功能 ,通过PC机并行接口模拟JTAG接口的时序,实现了使用目标系统中微处理器的JTAG接口对系统程序存储器FLASH的编程。
关键词:嵌入式系统JTAG(Joint test action Group)联合测试行为组织 编程器StrongARM手持设备
随着手持式电子设备的迅猛发展,手机,PDA、掌上电脑,电子书和数码相机等正在快步走进人们的日常生活,这一类电子产品同属于嵌入式系统的范畴,都是以高性能的微机处理器为核心扩展相应的应用程序,实现电子设备的各种功能。由于是手持设备,因而要求体积小、重量轻,耗电少,这些特点决定了设备内部的印刷板的尺寸比常规的电子设备小的多,而且元器件密度大,双面贴装。这给设计人员带来了若干问题,如操作系统代码和应用程序的写入,板上芯片的测试等。本文作者结合实际工作,就嵌入式系统中如何通过JTAG接口进行FLASH芯片编程作了探讨。
1 几种常用字芯片编程方法
在嵌入式系统开发和产品生产过程中,对系统程序存储器编程主要使用三种编程方法,通过编程器编程、使用板上编程器编程和在系统编程。
1.1 通过编程器编程
这是在PROM、EPROM、PQL等芯片游行时常用的编程方法。即在可编程芯片焊装到电路板之前,使用专门的编程器对芯片进行代码或数据的写入,然后将已编程的芯片安装到电路板上。
使用编程器编程特别适用于DIP封装的芯片。如是是其它类型的封装,则必须使用相应的适配器。这种方法的缺点滴是零要手工进行待编程芯片的插入,锁定等工作,容易造成芯片的方向错误、引脚错位等,导致编程效率降低。
1.2 使用板上编程器编程 (OBP)
这种方法是在电路板上所有的芯片都已经焊接完毕后,再对电路板上的可编程芯片进行编程。通过专用电缆将电路板与外部计算机连接,由于计算机的应用程序进行板上可编程芯片的代码或数据写入。芯片擦除编程所需用的电源、控制信号、地址、数据和相关的命令都由板外的编程控制器提供,在进行板上编程时,需要通过专门的辅助电路关断目标板上CPU的电源或将其外部接口信号设置为高阻状态,以免与编程时的地址、数据和控制信号发生冲突。
在板上编程可以克服芯片引脚错位,方向插反等问题,避免烧毁芯片,编程错误,保证了芯片编程的高成功率和可靠性。另一个优点就是及时软件升级,可以做到在产品出厂之时系统使用最新版本的固化软件。这对于日新月异的手持电子设备而言是必须的。
这种方法的缺点是需要在电路板上设计编程用的接口、隔离等辅助电路,在编程时通过跳线或FET开关时进编程与正常工作的状态转换。这样会增加每个电路板芯片的数量,造成产品成本的增加。
1.3 在系统编程(ISP、ISW)
这种方法直接利用系统中带有JTAG接口的器件,如CPU、CPLD、FPGA 等,执行对系统程序存储芯片的内容和擦除和编程操作。一般而言,高档的微处理器都带有JTAG接口,系统程存储器的数据总线,地址总线和控制接口直接接在微处理器上。编程时,使用PC机内插卡或并行的接口通过专用电缆将系统电路板与PC机联系起来,在PC机上运行相关的程序,将编程数据及控制信号传送到 JTAG接口的芯片上,利用相应的指令从微处理器的引脚按照FLASH芯片的编程时序输出到FLASH存储器。
这种编程方法的条件是系统中必须存在带有JTAG接口或与之兼容的芯片如微处理器。优点是系统板上不需要增加其它于编程有关的辅助电路。减小了电路板的尺寸,避免了对微小封装芯片的手工处理,特别适用于电路板尺寸有严格限制的手持设备。
2 JGAG接口介绍
面对复杂电路的设计、整版测试的难度及表面的贴装技术带来的有限测试引脚下等问题,业界不得不寻找一个标准加以解决。JTAG边界扫描即IEEE1149。1标准,该测试标准定义了用于解决上述问题的硬件结构和工作机制。其优点在于将极其复杂的电路板测试转弯成具有良好的结构性、可以通过软件简单而灵活处理。它虽然是一个主要用于片上电路的测试标准,但却打开了各种相关应用的大门。这个标准定义了可用于完成功能和互连测试以及内建自测过程的各种指令。芯片生产厂商如ALTERA、XILINX、ATMEL、AMD、TI等对标准进行了扩充,使用专用的扩展指令执行维护和诊断应用及对可配置器件的可编程算法,使JTAG接口广泛用于FLASH系列芯片的编程。概括起来,JTAG接口主要应用于:电路的边界扫描测试和可编程芯片的在系统编程。
2.1 JTAG的结构
在硬件结构上,JTAG的接口包括两个部分,JTAG端口和控制器。与JTAG接口兼容的器件可以是微处理器(MPU)微控制器(MCU)PLD CPL FPGA ASIC或其它符合IEEE1149。1规范的芯片。IEEE1149。1标准中规定对应数字集成电路的每个引脚都设有一个移动存寄单元。称为边界扫描单元BSC。它将JTAG电路与内核逻辑电路联系起来,同时隔离内核电路和芯片引脚。由集成电路的所有边界扫描构成单元扫描寄存器BSR。边界扫描寄存器仅在进行JTAG测试时有效,在集成电路工作正常无效,不影响集成电路的功能 。具有JTAG接口的芯片内部结构如图1所示:
测试逻辑的最高电路包括3个主要内容
·测试访问端口(TAP)控制器
TAP控制器提供在嵌入在JTAG兼容器件内部的测试功能电路的访问控制,是一个同步状态机。每个JTAG兼容的器件都有自己的TAP控制器。通过测试模式选择TMS和时钟信号TCK控制其状态转移,实现由IEEE149。1标准确定的测试逻辑电路的工作时序。
·指令寄存器
指令寄存器是基于电路的移动寄存器,通过它可以串行输入执行各种操作的指令。
·数据寄存组。
数据寄存器组是一组基于电路的移位寄存器。操作指令被串行装入由当前的指令所选择的数据寄存器。随着操作的执行,测试结果被移出。
2.2 JTAG引脚定义
JTAG接口主要包括四个引脚下:TMS TCK TDI 和TCO及一个可选配的引脚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在TCKR的下降沿改变状态,并且只在数据通过器件移动过程中有效。该引脚在其它的时间处于三状态下。
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存储器。这个过程是由运行在PC机上的软件进行控制的。
3.1 硬件配置
在某个设计项目中,使用了intel公司的StrongARM芯片SA-100和该公司的Strata系列FLASH存储器芯片/SA-100芯片是种高性能、低功耗、集成有多种常用接口的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接口。
表1 PC机并行接口与JTAG接口信号对应表
PC机并行接口对应JTAG接口
引 脚功 能引 脚功 能
2D0TCK时钟
3D1TDI数据输入
4D2TMS模式选择
11BusyTDO数据输出
3.2 控制软件
SA-1110芯片的JTAG接口实现了IEEE1149。1标准的部分功能,不能实现对芯片内部的测试及芯片仿真,但提供对芯片外的测试功能,可以用于对芯片外(此处有图)
部电路的测试及编程。芯片提供的JTAG指令包括:BYPASS(11111)旁通片上系统逻辑指令,用于未被测试的芯片:
EXTEST(00000)片外电路测试指令,用于测试电路板芯片之间的互连;
SAMPLE/PRELOAD(OOOO1)采样引脚/预加载数据指令,用于采样芯片引脚信号或通过加载数据 控制引脚输出信号;
IDCODE(00110)读芯片识别码指令,用于识别电路板上的芯片;
HIGHZ(00101)设置高阻状态指令,用于将芯片的引脚设为无效状态。
括号中的内容是指令的操作码,它们通过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)
{ //Qutput 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*+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,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);//Exit-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接口进行编程的控制程序的优化,可以实现存储芯片的高速编程操作,对减少产品的研发和生产周期,保证产品的上市时间非常有利。