×
嵌入式开发 > 详情

基于USB-JTAG接口转换的嵌入式系统Flash编程

发布时间:2020-07-06 发布时间:
|

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 编程对嵌入式产品的开发和调试具有重要意义。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购