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

时间:2011-09-05

  嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电器工程师协会( U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。由于个人数码助理(PDA,Personal Digital Assistant)及手持设备在硬件上设计的特性,嵌入式设备在软件上的扩充性比其他设备更好。

  随着手持式电子设备的迅猛发展,因为是手持设备,所以要求体积小、重量轻,耗电少,这些特点决定了设备内部的印刷板的尺寸比常规的电子设备小的多,而且元器件密度大,双面贴装。这给设计人员带来了若干问题,如操作系统代码和应用程序的写入,板上芯片的测试等。本文作者结合实际工作,就嵌入式系统中如何通过JTAG接口进行FLASH芯片编程作了探讨。

  1 几种常用芯片编程方法

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

  1.1 通过编程器编程

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

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

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

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

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

  1.3 在系统编程(ISP、ISW)

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

  2 JGAG接口介绍

  JTAG(Joint Test Action Group)联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、 TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。

  JTAG初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(Test Access Port�测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现在,JTAG接口还常用于实现ISP(In-System rogrammable�在线编程),对FLASH等器件进行编程。

  JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。JTAG接口可对PSD芯片内部的所有部件进行编程。

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

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

  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寄存器组。

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

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

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

  据的移入或移出。图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芯片时,需要做的工作主要有:①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所示。

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

  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控制器,把编程数据先移入到边界扫描寄存器(BSR),再通过JTAG指令EXTEST按照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

  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);//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(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状态,保证下面的操作从这一状态开始进入正常的操作状态。

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


  
上一篇:数字压力传感器硬盘驱动存储容量增加
下一篇:电子设计应用嵌入式SoCIC的设计方法和流程

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料