摘要:对Flash编程是许多嵌入式系统开发中必要的一环,传统的开发工具通常支持的是并口或串口,而随着计算机接口的单一化,即插即用的USB接口得到了广泛的应用。本文介绍了JTAG接口标准用于Flash编程的方法,并实现USB接口到JTAG接口的转换模块的硬件设计和协议转换,从而以PC机USB接口模拟JTAG接口的编程时序,利用嵌入式处理器的JTAG接口对Flash进行在线编程。
1 引言
在嵌入式系统的设计中,为了提高执行速度和系统的可靠性,操作系统和应用程序的软件代码一般都固化在非易失性存储器中,如ROM,EPROM,EEPROM 和Flash。其中,Flash以其可擦写次数多、存储速度快、容量大及价格便宜等优点在嵌入式领域得到广泛的应用。
在嵌入式系统的开发阶段,要进行大量的程序调试,这也就意味着这要对Flash 进行反复的擦写。因此,如何对Flash 编程,成为许多嵌入式系统开发中必要的一环。在这种背景下,利用JTAG 边界扫描结构访问芯片成为一种对嵌入式系统Flash 编程的途径。另一方面,传统的开发工具中大多支持的是并口或串口,但现在的计算机上接口越来越单一,很多主板都不再支持并口、串口,即插即用的USB 接口却因为其速度快,使用方便而得到了广泛应用和关注。本文介绍了一种符合嵌入式和计算机发展趋势的Flash 编程方案,即基于USB 到JTAG 接口转换的嵌入式系统Flash 编程。
2 JTAG 测试原理
JTAG (Joint Test Action Group)是1985 年制定的检测PCB 和IC 芯片的一个标准,1990年被修改后成为IEEE 的一个标准,即IEEE1149.1-1990。通过这个标准,可对具有JTAG 口芯片的硬件电路进行边界扫描和故障检测。
2.1 管脚定义
JTAG 接口主要包括TCK、TMS、TDI、TDO 和可选的TRST#等管脚。各管脚的功能定义如下:
(1) 测试时钟输入 TCK。为TAP 控制器和各个寄存器提供时钟基准。TCK 与系统时钟相互独立。
(2) 测试模式选择 TMS。在TCK 的上升沿时刻,TMS 的状态决定了TAP 控制器的下一个工作状态;
(3) 测试数据输入 TDI。指令和数据寄存器的串行数据输入端,在TCK 的上升沿时刻采样。
(4) 测试数据输出 TDO。指令和数据寄存器的串行数据输出端,在TCK 的下降沿时刻移出。
(5) 测试复位输入 TRST#。可选信号,低电平有效,提供TAP 控制器的异步初始化信号。
2.2 TAP 控制器
TAP 控制器是一个具有16 种状态的有限状态机,每一种状态的转换都是由TCK 和TMS 来触发的,TCK 上升沿时刻TMS 的值决定了TAP 的下一个工作状态。测试数据和指令的传输、执行都必须在TAP 控制器进入相应的状态后才能进行。
2.3 边界扫描寄存器
JTAG 标准定义了一个串行的移位寄存器。寄存器的每一个单元分配给芯片的相应引脚,每一个独立的单元称为BSC(Boundary-Scan Cell)边界扫描单元。这个串联的BSC 在IC内部构成JTAG 回路,所有的BSR(Boundary-Scan Register)边界扫描寄存器通过JTAG 测试激活,平时这些引脚保持正常的功能。
2.4 指令系统
JTAG 接口的指令用于控制测试电路进行各种操作。JTAG 接口的指令系统包括基本指令和扩展指令,JTAG 兼容的芯片至少要包含下列指令:
(1) BYPASS 指令:选择旁路寄存器连接TDI 和TDO,在TDI 和TDO 之间提供一条长度短的串列路径,这样允许测试资料可以快速的通过。
(2) SAMPLE/PRELOAD 指令:采样/预加载数据指令,用于采样芯片管脚信号或预加载数据以控制输出管脚。
(3) EXTEST 指令:片外电路测试指令,用于测试芯片间的互连,这是通过JTAG 口对Flash 进行编程的指令。
2.5 BSDL 边界描述语言
BSDL(boundary scan description language)边界描述语言是硬件描述语言VHDL 的一个子集,是对兼容JTAG 接口的芯片的边界扫描特性的描述,主要用来沟通边界扫描器件厂商、用户与测试工具之间的联系。它主要描述了芯片的JTAG 指令系统、BSC 与芯片管脚的对应关系等特性。
3 应用实例
在本设计中,采用基于 USB-JTAG 接口转换的嵌入式系统Flash 编程,其系统连接方式如图1 所示。
图 1 系统连接方式
JTAG 电缆一端连接主机的USB 接口,另一端连接目标板上的JTAG 接口,通过电缆上的USB-JTAG 接口转换模块实现协议转换。目标板上的Flash 由地址、数据和控制总线挂接到兼容JTAG 的嵌入式处理器上,在这种连接方式下,只需要控制嵌入式处理器模拟Flash 的编程时序,便可对Flash 进行在线编程。
3.1 硬件设计
(1) 接口转换模块设计
USB 到JTAG 的接口转换采用FTDI 的FT2232 芯片,其工作频率可达6M,电路设计如图2 所示。
图 2 USB-JTAG 接口转换电路
(2) 嵌入式处理器
本设计中处理器采用 IBM PowePC405GP。PPC405GP 是一款基于RISC 精简指令集的32 位嵌入式处理器,频率为266 MHz。在数据手册和BSDL 描述文件中可知其指令寄存器长度为7 bit,数据寄存器边界扫描链长度为357 位。
(3) Flash
本设计中Flash 采用Intel 的28F320J3A110,大小为32 Mbit,有х8 和х16 bit 两种位宽模式,在系统中配置成х16 bit 模式。该Flash 符合CFI 规范,只需按一定时序向特定地址写入特定的指令序列,即可启动内部状态及,使其自动完成要求的内部操作。其部分指令序列如下表所示。
3.2 软件设计
对Flash 的编程包括读、写、擦除等操作,根据写入不同的指令序列实现相应的功能。程序首先要初始化USB-JTAG 接口转换模块,然后使JTAG 进入Run-Test-Idle 状态。分别读取并校验JTAG 芯片和Flash 芯片的ID,再将指定的指令序列写入Flash 完成操作。根据PowerPC 405GP 的BSDL 描述文件,该处理器有357 个扫描链单元,包括地址单元,数据单元和一些控制单元等,应分别控制每一个单元,使其工作在正常的状态下,为了操作方便,需要对这部分函数进行必要的封装。以进行读操作为例,部分的程序算法如下。
3.3 性能
影响Flash 编程性能的主要因素有边界扫描链的长度、JTAG 的时钟频率、数据宽度,Flash 的操作周期数等。以本设计为例,嵌入式处理器IBM PowerPC 405GP 的边界扫描长度为357,Intel 28F320J3A110 Flash 的位宽为16 bit,容量为32 Mbit,采用两片Flash 进行位宽扩展,则数据宽度为32 bit,容量为64 Mbit,JTAG 时钟为6 MHz,对整片Flash 编程的性能如下表所示:
4 结论
在嵌入式系统的开发过程中,使用 JTAG 接口对Flash 进行在线编程不需要其它附加设备的支持,降低了系统开发的成本,而且简单可行,速度较快,程序扩展简单,符合嵌入式发展的趋势。而且随着USB 接口越来越广泛的应用,研究基于USB-JTAG 接口转换的嵌入式系统Flash 编程对嵌入式产品的开发和调试具有重要意义。
[1]. ROM datasheet https://www.dzsc.com/datasheet/ROM_1188413.html.
[2]. EPROM datasheet https://www.dzsc.com/datasheet/EPROM_1128137.html.
[3]. PCB datasheet https://www.dzsc.com/datasheet/PCB+_1201640.html.
[4]. RISC datasheet https://www.dzsc.com/datasheet/RISC+_1189725.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。