<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=556 </link><title>JTAG模式下的MPC5554外部FLASH编程的设计与实现</title><author>ethan</author><pubDate>2010-01-13 9:36:19</pubDate><description><![CDATA[<strong>0 引 言</strong>
<p>　　随着信息技术的发展，嵌入式系统越来越广泛地应用于手机通信、汽车、航空航天、<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr94" jquery1263346476361="40">工业控制</nobr>等领域。在这些电子产品中，大多以嵌人式<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr216" jquery1263346476361="41">微处理器</nobr>为核心，配套相关的外围辅助设备，对控制对象进行软硬件的功能剪裁性设计，并将控制程序固化在非易失性存储器中。FLASH作为一种存储速度快，容量大，可多次擦写并且价格便宜的存储器得到了广泛的应用。由于有些微处理器内部不包含FLASH或FLASH存储空间太小、擦写次数有限，为了提供足够的程序存储空间，需要对其进行外部FLASH扩展。<a style="color: blue; text-decoration: underline" title="JTAG" href="http://article.ednchina.com/word/265467.aspx">JTAG</a>是目前广泛使用的一种系统在线编程的模式，大大方便了嵌入式系统下载程序至FLASH。该设计使用的微处理器为<a style="color: blue; text-decoration: underline" title="MPC5554" href="http://article.ednchina.com/word/265468.aspx">MPC5554</a>，通过JTAG接口对外扩FLASH进行编程。</p>
<p>　　<strong>1 MPC5554简介</strong></p>
<p>　　MPC5554是Freescale公司推出的采用<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr60" jquery1263346476361="42">Power</nobr>PC内核的一款32位微控制器．属于MPC5500系列第一代产品，可用于航空航天、汽车、工业控制等嵌入式系统中。如图1所示，MPC5554内部带有浮点运算单元，集成<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr218" jquery1263346476361="43">DSP</nobr>运算指令，拥有较高的计算能力，可以满足多任务处理和实时控制的要求。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操作。</p>
<p align="center"><img border="0" hspace="0" alt="MPC5554内部结构图" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/1.jpg" width="415" height="485" /></p>
<p>　　MPC5554提供2 MB可编程、非优化内部FLAsH，可用于指令存取和数据存储。然而MPC5554内部的FLASH为CMF型FLASH，这种FLASH的缺陷是擦写次数有限，以擦写一次为单位计算，MPC5554的内部FLASH只能进行100次。对于开发人员，这种局限性非常不利于开发阶段的程序写入和功能调试。一种有效方法是扩展外部FLASH，这样可以在开发阶段将程序写入外部FLAsH，待程序定版后，只需做稍微修改再写入内部FLASH。此外，当控制对象为复杂的多变量系统时，内部FLASH往往无法提供足够的程序存储空间，采用外部扩展FLASH就显得尤为必要。</p>
<p>　　<strong>2 JTAG介绍</strong></p>
<p>　　JTAG(Joint Test Action Group)成立于1985年，由几家主要的电子制造商发起制订的PCB和IC测试标准。JTAG建议于1990年被IEEE批准为IEEE1149．1-1990测试访问端口和边界扫描结构标准。该标准规定了进行边界扫描所需要的硬件和软件。JTAG主要用于：电路的边界扫描测试和可编程芯片的在系统编程。目前MPC5554中使用的JTAG为IEEE1149．1-2001标准。</p>
<p>　　JTAG是一种嵌入式处理器开发工具的接口，是目前单片机普遍采用的在系统调试和编程方式之一。使用JTAG调试模式，用户可以发送指令和数据给处理器，同时也可以接收处理器发送过来的数据，这样就可以在外部实现对处理器的控制并进行一定的操作，譬如读写寄存器、擦除FLASH、向RAM、FLASH写入数据等。标准的JTAG接口是四线：TMS，TCK，TDI，TDO。相关JTAG引脚的定义为：TCK为测试时钟输入；TDI为测试数据输入，数据通过TDI引脚输入JTAG接口；TDO为测试数据输出，数据通过TDO引脚从JTAG接口输出；TMS为测试模式选择，TMS用来设置JTAG接口处于某种特定的测试模式；TRST为测试复位，输入引脚，低电平有效。</p>
<p>　　MPC5554提供JTAG和Nexus两种调试接口。为了使用方便，Freescale公司开发出了针对JTAG与Nexus共用的专用烧写器与配套软件，为14针脚。其主要特点是双向同步串行通信。同步串行通信时钟由仿真器提供，并与单片机总线时钟同步。通过USBMultilink转换接口(连接到目标板14针JTAG／Nexus接口上)，可以在线实现烧写、校验、检查、上载、擦写等功能。Freescale对14针JTAG／NexlJs接口引脚定义，参见表1。</p>
<p align="center"><img border="0" hspace="0" alt="Freescale对14针JTAG" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/01.jpg" width="396" height="238" /></p>
<p>　<strong>　3 硬件设计</strong></p>
<p>　　该系统的硬件设计为基于MPC5554的最小系统板，包括晶振电路、电源模块、I／O模块、A／D转换模块、RS 232通信端口，CAN端口，跑马灯，外扩2片AMD公司的FLASH芯片AM29LV160DT作为程序存储器，2片外扩RAM，其功能模块如图2所示。</p>
<p align="center"><img border="0" hspace="0" alt="功能模块" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/2.jpg" width="431" height="297" />　AM29LV160DT存储容量为16 Mb，供电方式为2．7～3．6V单电压供电，无需另外提供FLASH擦除和写入电压。该芯片有48引脚FBGA，48引脚TSOP和44引脚SO三种封装形式，该系统中使用SO44封装形式，图3所示为其引脚逻辑图。其数据宽度可配置为8位(字节)和16位(字)两种模式。FLASH内部包含35个扇区，每个扇区大小根据数据宽度的不同而不同。表2列出了AM29LV160DT的扇区地址分配。</p>
<p>&nbsp;</p>
<p align="center"><img border="0" hspace="0" alt="引脚逻辑图" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/3.jpg" width="306" height="188" /></p>
<p align="center"><img border="0" hspace="0" alt="AM29LV160DT的扇区地址分配" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/02.jpg" width="470" height="258" /></p>
<p>　　为了在嵌入式系统中获得更高的性能优势，常需要构建32位存储系统，可通过以下两种方式构建：使用2片16位数据宽度的FLASH存储器芯片并联或者使用1片32位数据宽度的FLASH存储芯片。该系统设计要求程序存储器为4 MB容量，32位数据宽度，故采用2片AM29LV160DT并联构建存储系统，其连接参见图4。将2片FLASH的BYTE引脚接高电平，使芯片工作在16位模式下，每片FLASH传送两个字节数据。该系统为32位数据宽度，所以需要两片FLASH芯片，同时传送4个字节数据。</p>
<p align="center"><img border="0" hspace="0" alt="连接图" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/4.jpg" width="341" height="359" /></p>
<p>　　由于<a style="color: blue; text-decoration: underline" title="MPC5554" href="http://article.ednchina.com/word/265468.aspx">MPC5554</a>采用是大端数据格式，即高字节位于低地址，而AM29LV160DT却与此相反，采用的是小端数据格式，所以在进行电路设计时，将MPC5554的地址线A[29：10]依次连接到2片AM29LV160DT的地址线A[0：19]。芯片的RY／BY引脚接高电平时可提供多种芯片&ldquo;忙&rdquo;监测功能，通过查询数据线检测芯片是否处于擦除或编程等&ldquo;忙&rdquo;状态，但在S044封装芯片中并无该引脚，故在该系统中并没有出现RY／BY引脚。</p>
<p>　　<strong>4 软件实现</strong></p>
<p>　　该系统软件开发基于Codewarrior，P&amp;E(Proces-sor&middot;Expert)与<a style="color: blue; text-decoration: underline" title="JTAG" href="http://article.ednchina.com/word/265467.aspx">JTAG</a>组合开发平台，图5是开发平台示意图。其中，Codewarrior是Freescale公司针对<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr60" jquery1263346556480="49">Power</nobr>PC系列微控制器开发的集成开发环境。Codewarrior集编辑器、调试器功能于一体，可进行编码、编译、编辑、链接和调试等开发过程。&nbsp;&nbsp; Codewarrior中使用C／C++语言进行编程。为了便于开发，Frees-cale公司开发了供MPC5554配套使用的图形化开发工具P ＆E(<nobr style="border-bottom: rgb(102,0,255) 1px dotted; background-color: transparent; color: #cb4bfc; cursor: pointer; text-decoration: underline" id="nobr217" jquery1263346556480="50">Processor</nobr> Expert)，通过它对MPC5554各功能模块进行设置，生成相应函数和执行代码，可在Codewarrior开发环境中使用。</p>
<p align="center"><img border="0" hspace="0" alt="开发平台示意图" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/5.jpg" width="426" height="189" /></p>
<p>　　MPC5554通过外部总线接口(Extrenal Bus Inter-face，EBI)和存储器控制器提供对外部存储器的访问。其中，外部总线接口提供24条地址线和32条数据线与存储器相连，存储器控制器提供4条片选信号线CS[0：3]，1条输出使能信号线OE，4条读写信号线WE[0：3]，用于选择和读写外部存储器或设备。MPC5554的24条地址线和4条片选信号配合可以访问64 MB的地址空间。</p>
<p>　　在软件实现方面，主要是对EBI相关寄存器进行设置，同时在SIU(System Integration Unit)模块对相关管脚进行功能设置，以及对FLASH自身的程序设计。MPC5554自身划分了若干功能模块，并设有相应的寄存器。MPC5554的大部分引脚具有复用功能，每个引脚通过SIU模块的PCR(Pad Configuration Registers)寄存器进行功能选择。例如片选信号引脚功能复用为CS[0：3]_ADDR[8：11]_GPIO[0：3]，作为片选信号需要对寄存器进行设置，其他相关引脚同理设置。</p>
<p>　　SIU．PCR[2]．R=0x0443： ／／CS2</p>
<p>　　SIU．PCR[3]．R=0x0443： ／／CS3</p>
<p>　　MPC5554的EBI模块对外部数据总线进行设置，对某片选信号相对应的外扩存储器进行地址与存储空间设置。其中，OR寄存器通过掩码的方式设置片选信号控制的存储空间大小。例如，CS[3]连接的FLASH起始地址为0x20000000，存储器空间为2 MB。</p>
<p>　　EBI．CS[3]．BR．R=0x20000003；</p>
<p>　　EBI．cs[3]．OR．R=0xffe00020；</p>
<p>　　该系统的重点是对FLASH进行操作的程序，主要是对AM29LV160DT内部的命令寄存器按一定的时序写入命令，如表3所示。通过这些命令或命令序列可以实现获得芯片信息、数据读取、整体擦除、扇区擦除和数据写入等功能。</p>
<p align="center"><img border="0" hspace="0" alt="AM29LV160DT内部的命令寄存器按一定的时序写入命令" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/03.jpg" width="436" height="143" /></p>
<p>　　下面附一部分FLASH擦写程序。</p>
<p align="center"><img border="0" hspace="0" alt="程序" src="http://pagesadmin.ednchina.com/images/article/3c6a29fe-f205-4bff-a8c7-0303d1896e99/04.jpg" width="424" height="492" /></p>
<p>　　<strong>5 结 语</strong></p>
<p>　　在此实现了在JTAG模式下对MPC5554外部FLASH的编程设计，验证了Codewarrior，P&amp;E与JTAG组合开发平台的可用性，为MPC5554微控制器用于复杂多变量系统开发打下了基础。</p>]]></description></item></channel></rss>