DIY编程器网

标题: 基于USB-JTAG接口转换的嵌入式系统Flash编程 [打印本页]

作者: liyf    时间: 2014-9-27 16:36
标题: 基于USB-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所示。


  JTAG 下载电缆一端连接主机的 USB接口,另一端连接目标板上的 JTAG接口,通过电缆上的 USB-JTAG接口转换模块实现协议转换。目标板上的 Flash由地址、数据和控制总线挂接到兼容 JTAG的嵌入式处理器上,在这种连接方式下,只需要控制嵌入式处理器模拟 Flash的编程时序,便可对 Flash进行在线编程。
  3.1 硬件设计
  (1)接口转换模块设计
  USB到 JTAG的接口转换采用 FTDI的 FT2232芯片,其工作频率可达 6M,电路设计如图 2所示。


  (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个扫描链单元,包括地址单元,数据单元和一些控制单元等,应分别控制每一个单元,使其工作在正常的状态下,为了操作方便,需要对这部分函数进行必要的封装。以进行读操作为例,部分的程序算法如下。
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
main ()
{
WriteDataBuffer_t WriteDataBuffer;
Convert_Module_Init (); // 初始化USB-JTAG 接口转换模块
JTAG_ Reset (); // 使JTAG 回到TEST - LOGIC - RESET 状态
// 使JTAG 进入SHIFT - IR 状态
JTAG_State_Shift (TEST_LOGIC_RESET, SHIFT_IR);
WriteDataBuffer = 0x00;
JTAG_Write(WriteDataBuffer, 7); // 移入EXTEST 指令,即0000000B
JTAG_ State_Shift (SHIFT_IR, TEST_LOGIC_RESET);
// 使JTAG 进入SHIFT - DR 状态
JTAG_ State_Shift (TEST_LOGIC_RESET, SHIFT_DR);
// 将0xFF 写入地址0x00, W_OPER 表示inout 双向管脚处于写模式(out)
CPU_Set_BSR (0xFF, 0x00, W_OPER, & WriteDataBuffer);
JTAG_Write(WriteDataBuffer, 357); // 串行移入扫描链单元
JTAG_ State_Shift (SHIFT_DR, TEST_LOGIC_RESET);
}



  部分函数的声明和算法如下:
双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void JTAG_Reset (void) // 使JTAG 回到TEST - LOGIC - RESET 状态
{
int i;
WriteDataBuffer_t WriteDataBuffer = 0x01;
for (i = 0; i <5 ; i ++)
{
JTAG_Write (WriteDataBuffer, 1) ;
}
}
void JTAG_ State_Shift (J_State_t From_S, J_State_t To_S)
{
// 根据状态机和参数输入,从From_S 状态转移到To_S 状态
}
void JTAG_Write (WriteDataBuffer_t WriteDataBuffer, int Len)
{
// 根据Len 指定的长度,把WriteDataBuffer 中的数据通过TDI 串行移出
}
void CPU_Set_BSR (U32 Data, U32 Addr, Oper_t Oper, WriteDataBuffer_t * WriteDataBuffer)
{
// 根据输入参数,对CPU 扫描链单元赋值
}



  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] IEEE 1149.1-1990, Standard test access port and boundary scan architecture [S].
  [2] IBM Corporation, PowerPC 405GP Embedded Processor Users’ Manual [M], 2003.
  [3] Boundary Scan Descriptor Language (BSDL) for PPC405GP, www.ibm.com.
  [4] Intel Corporation, 28F128J3A/28F640J3A/28F320J3A Preliminary Datasheet [M], 2001.
  [5] Intel Corporation, AP – 630, Designing for On-Board Programming Using the IEEE 1149.1 (JTAG) Access Port, 1996.
  [6] 李春光,赵月,王旭春.嵌入式微处理器与 FLASH闪存的接口设计实现[J]. 微计算机信息,2006,7-2: 154-157.
  本文作者创新点: 作者采用 JTAG接口标准,并设计和实现了 USB到 JTAG的协议转换模块,巧妙地利用 USB接口模拟 JTAG接口的编程时序,从而实现了方便、快捷的 Flash在线编程。


作者: 404626007    时间: 2014-9-27 18:41
哎  还是不会弄啊   
作者: wenzi4402996    时间: 2014-9-27 20:58
大侠们 怎么转积分啊

作者: liyf    时间: 2014-9-27 21:21
wenzi4402996 发表于 2014-9-27 20:58
大侠们 怎么转积分啊

你现在就是在赚
作者: zyh555    时间: 2014-9-28 16:24
学习了,谢谢楼主的分享!
作者: 21336721    时间: 2014-9-28 23:42
wenzi4402996 发表于 2014-9-27 20:58
大侠们 怎么转积分啊

你现在就是在赚
作者: bywqdq    时间: 2015-1-13 20:00
你现在就是在赚




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2