JTAG模式下的MPC5554外部FLASH编程的设计与实现
扫描二维码
随时随地手机看文章
0 引 言
随着信息技术的发展,嵌入式系统越来越广泛地应用于手机通信、汽车、航空航天、工业控制等领域。在这些电子产品中,大多以嵌人式微处理器为核心,配套相关的外围辅助设备,对控制对象进行软硬件的功能剪裁性设计,并将控制程序固化在非易失性存储器中。FLASH作为一种存储速度快,容量大,可多次擦写并且价格便宜的存储器得到了广泛的应用。由于有些微处理器内部不包含FLASH或FLASH存储空间太小、擦写次数有限,为了提供足够的程序存储空间,需要对其进行外部FLASH扩展。JTAG是目前广泛使用的一种系统在线编程的模式,大大方便了嵌入式系统下载程序至FLASH。该设计使用的微处理器为MPC5554,通过JTAG接口对外扩FLASH进行编程。
1 MPC5554简介
MPC5554是Freescale公司推出的采用PowerPC内核的一款32位微控制器.属于MPC5500系列第一代产品,可用于航空航天、汽车、工业控制等嵌入式系统中。如图1所示,MPC5554内部带有浮点运算单元,集成DSP运算指令,拥有较高的计算能力,可以满足多任务处理和实时控制的要求。MPC5554包含64 KB内部SRAM,32 KB Cache,2 MB内部FLASH,64路eDMA,24路eMIOS,64路eTPU通道,2路eSCI,4路DSPI,3路FlexCAN,40路12 b A/D(可扩展为64路),中断控制器,以及JTAG,Nexus调试接口等功能模块。MPC5554为416脚PBGA封装,可在-40~+150℃的环境下工作,系统时钟可达132 MHz,中断延迟小于70 ns(@132 MHz),内部逻辑供电1.5 V,输入/输出供电3.3 V,5 V,外部总线接口支持1.62~3.6 V操作。
MPC5554提供2 MB可编程、非优化内部FLAsH,可用于指令存取和数据存储。然而MPC5554内部的FLASH为CMF型FLASH,这种FLASH的缺陷是擦写次数有限,以擦写一次为单位计算,MPC5554的内部FLASH只能进行100次。对于开发人员,这种局限性非常不利于开发阶段的程序写入和功能调试。一种有效方法是扩展外部FLASH,这样可以在开发阶段将程序写入外部FLAsH,待程序定版后,只需做稍微修改再写入内部FLASH。此外,当控制对象为复杂的多变量系统时,内部FLASH往往无法提供足够的程序存储空间,采用外部扩展FLASH就显得尤为必要。
2 JTAG介绍
JTAG(Joint Test Action Group)成立于1985年,由几家主要的电子制造商发起制订的PCB和IC测试标准。JTAG建议于1990年被IEEE批准为IEEE1149.1-1990测试访问端口和边界扫描结构标准。该标准规定了进行边界扫描所需要的硬件和软件。JTAG主要用于:电路的边界扫描测试和可编程芯片的在系统编程。目前MPC5554中使用的JTAG为IEEE1149.1-2001标准。
JTAG是一种嵌入式处理器开发工具的接口,是目前单片机普遍采用的在系统调试和编程方式之一。使用JTAG调试模式,用户可以发送指令和数据给处理器,同时也可以接收处理器发送过来的数据,这样就可以在外部实现对处理器的控制并进行一定的操作,譬如读写寄存器、擦除FLASH、向RAM、FLASH写入数据等。标准的JTAG接口是四线:TMS,TCK,TDI,TDO。相关JTAG引脚的定义为:TCK为测试时钟输入;TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效。
MPC5554提供JTAG和Nexus两种调试接口。为了使用方便,Freescale公司开发出了针对JTAG与Nexus共用的专用烧写器与配套软件,为14针脚。其主要特点是双向同步串行通信。同步串行通信时钟由仿真器提供,并与单片机总线时钟同步。通过USBMultilink转换接口(连接到目标板14针JTAG/Nexus接口上),可以在线实现烧写、校验、检查、上载、擦写等功能。Freescale对14针JTAG/NexlJs接口引脚定义,参见表1。
3 硬件设计
该系统的硬件设计为基于MPC5554的最小系统板,包括晶振电路、电源模块、I/O模块、A/D转换模块、RS 232通信端口,CAN端口,跑马灯,外扩2片AMD公司的FLASH芯片AM29LV160DT作为程序存储器,2片外扩RAM,其功能模块如图2所示。
AM29LV160DT存储容量为16 Mb,供电方式为2.7~3.6 V单电压供电,无需另外提供FLASH擦除和写入电压。该芯片有48引脚FBGA,48引脚TSOP和44引脚SO三种封装形式,该系统中使用SO44封装形式,图3所示为其引脚逻辑图。其数据宽度可配置为8位(字节)和16位(字)两种模式。FLASH内部包含35个扇区,每个扇区大小根据数据宽度的不同而不同。表2列出了AM29LV160DT的扇区地址分配。
为了在嵌入式系统中获得更高的性能优势,常需要构建32位存储系统,可通过以下两种方式构建:使用2片16位数据宽度的FLASH存储器芯片并联或者使用1片32位数据宽度的FLASH存储芯片。该系统设计要求程序存储器为4 MB容量,32位数据宽度,故采用2片AM29LV160DT并联构建存储系统,其连接参见图4。将2片FLASH的BYTE引脚接高电平,使芯片工作在16位模式下,每片FLASH传送两个字节数据。该系统为32位数据宽度,所以需要两片FLASH芯片,同时传送4个字节数据。
由于MPC5554采用是大端数据格式,即高字节位于低地址,而AM29LV160DT却与此相反,采用的是小端数据格式,所以在进行电路设计时,将MPC5554的地址线A[29:10]依次连接到2片AM29LV160DT的地址线A[0:19]。芯片的RY/BY引脚接高电平时可提供多种芯片“忙”监测功能,通过查询数据线检测芯片是否处于擦除或编程等“忙”状态,但在S044封装芯片中并无该引脚,故在该系统中并没有出现RY/BY引脚。
4 软件实现
该系统软件开发基于Codewarrior,P&E(Proces-sor·Expert)与JTAG组合开发平台,图5是开发平台示意图。其中,Codewarrior是Freescale公司针对PowerPC系列微控制器开发的集成开发环境。Codewarrior集编辑器、调试器功能于一体,可进行编码、编译、编辑、链接和调试等开发过程。 Codewarrior中使用C/C++语言进行编程。为了便于开发,Frees-cale公司开发了供MPC5554配套使用的图形化开发工具P &E(Processor Expert),通过它对MPC5554各功能模块进行设置,生成相应函数和执行代码,可在Codewarrior开发环境中使用。
MPC5554通过外部总线接口(Extrenal Bus Inter-face,EBI)和存储器控制器提供对外部存储器的访问。其中,外部总线接口提供24条地址线和32条数据线与存储器相连,存储器控制器提供4条片选信号线CS[0:3],1条输出使能信号线OE,4条读写信号线WE[0:3],用于选择和读写外部存储器或设备。MPC5554的24条地址线和4条片选信号配合可以访问64 MB的地址空间。
在软件实现方面,主要是对EBI相关寄存器进行设置,同时在SIU(System Integration Unit)模块对相关管脚进行功能设置,以及对FLASH自身的程序设计。MPC5554自身划分了若干功能模块,并设有相应的寄存器。MPC5554的大部分引脚具有复用功能,每个引脚通过SIU模块的PCR(Pad Configuration Registers)寄存器进行功能选择。例如片选信号引脚功能复用为CS[0:3]_ADDR[8:11]_GPIO[0:3],作为片选信号需要对寄存器进行设置,其他相关引脚同理设置。
SIU.PCR[2].R=0x0443: //CS2
SIU.PCR[3].R=0x0443: //CS3
MPC5554的EBI模块对外部数据总线进行设置,对某片选信号相对应的外扩存储器进行地址与存储空间设置。其中,OR寄存器通过掩码的方式设置片选信号控制的存储空间大小。例如,CS[3]连接的FLASH起始地址为0x20000000,存储器空间为2 MB。
EBI.CS[3].BR.R=0x20000003;
EBI.cs[3].OR.R=0xffe00020;
该系统的重点是对FLASH进行操作的程序,主要是对AM29LV160DT内部的命令寄存器按一定的时序写入命令,如表3所示。通过这些命令或命令序列可以实现获得芯片信息、数据读取、整体擦除、扇区擦除和数据写入等功能。
下面附一部分FLASH擦写程序。
5 结 语
在此实现了在JTAG模式下对MPC5554外部FLASH的编程设计,验证了Codewarrior,P&E与JTAG组合开发平台的可用性,为MPC5554微控制器用于复杂多变量系统开发打下了基础。