JTAG模式下的MPC5554外部FLASH編程的設(shè)計(jì)與實(shí)現(xiàn)
0 引 言
隨著信息技術(shù)的發(fā)展,嵌入式系統(tǒng)越來越廣泛地應(yīng)用于手機(jī)通信、汽車、航空航天、工業(yè)控制等領(lǐng)域。在這些電子產(chǎn)品中,大多以嵌人式微處理器為核心,配套相關(guān)的外圍輔助設(shè)備,對(duì)控制對(duì)象進(jìn)行軟硬件的功能剪裁性設(shè)計(jì),并將控制程序固化在非易失性存儲(chǔ)器中。FLASH作為一種存儲(chǔ)速度快,容量大,可多次擦寫并且價(jià)格便宜的存儲(chǔ)器得到了廣泛的應(yīng)用。由于有些微處理器內(nèi)部不包含F(xiàn)LASH或FLASH存儲(chǔ)空間太小、擦寫次數(shù)有限,為了提供足夠的程序存儲(chǔ)空間,需要對(duì)其進(jìn)行外部FLASH擴(kuò)展。JTAG是目前廣泛使用的一種系統(tǒng)在線編程的模式,大大方便了嵌入式系統(tǒng)下載程序至FLASH。該設(shè)計(jì)使用的微處理器為MPC5554,通過JTAG接口對(duì)外擴(kuò)FLASH進(jìn)行編程。
1 MPC5554簡(jiǎn)介
MPC5554是Freescale公司推出的采用PowerPC內(nèi)核的一款32位微控制器.屬于MPC5500系列第一代產(chǎn)品,可用于航空航天、汽車、工業(yè)控制等嵌入式系統(tǒng)中。如圖1所示,MPC5554內(nèi)部帶有浮點(diǎn)運(yùn)算單元,集成DSP運(yùn)算指令,擁有較高的計(jì)算能力,可以滿足多任務(wù)處理和實(shí)時(shí)控制的要求。MPC5554包含64 KB內(nèi)部SRAM,32 KB Cache,2 MB內(nèi)部FLASH,64路eDMA,24路eMIOS,64路eTPU通道,2路eSCI,4路DSPI,3路FlexCAN,40路12 b A/D(可擴(kuò)展為64路),中斷控制器,以及JTAG,Nexus調(diào)試接口等功能模塊。MPC5554為416腳PBGA封裝,可在-40~+150℃的環(huán)境下工作,系統(tǒng)時(shí)鐘可達(dá)132 MHz,中斷延遲小于70 ns(@132 MHz),內(nèi)部邏輯供電1.5 V,輸入/輸出供電3.3 V,5 V,外部總線接口支持1.62~3.6 V操作。
MPC5554提供2 MB可編程、非優(yōu)化內(nèi)部FLAsH,可用于指令存取和數(shù)據(jù)存儲(chǔ)。然而MPC5554內(nèi)部的FLASH為CMF型FLASH,這種FLASH的缺陷是擦寫次數(shù)有限,以擦寫一次為單位計(jì)算,MPC5554的內(nèi)部FLASH只能進(jìn)行100次。對(duì)于開發(fā)人員,這種局限性非常不利于開發(fā)階段的程序?qū)懭牒凸δ苷{(diào)試。一種有效方法是擴(kuò)展外部FLASH,這樣可以在開發(fā)階段將程序?qū)懭胪獠縁LAsH,待程序定版后,只需做稍微修改再寫入內(nèi)部FLASH。此外,當(dāng)控制對(duì)象為復(fù)雜的多變量系統(tǒng)時(shí),內(nèi)部FLASH往往無法提供足夠的程序存儲(chǔ)空間,采用外部擴(kuò)展FLASH就顯得尤為必要。
2 JTAG介紹
JTAG(Joint Test Action Group)成立于1985年,由幾家主要的電子制造商發(fā)起制訂的PCB和IC測(cè)試標(biāo)準(zhǔn)。JTAG建議于1990年被IEEE批準(zhǔn)為IEEE1149.1-1990測(cè)試訪問端口和邊界掃描結(jié)構(gòu)標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)規(guī)定了進(jìn)行邊界掃描所需要的硬件和軟件。JTAG主要用于:電路的邊界掃描測(cè)試和可編程芯片的在系統(tǒng)編程。目前MPC5554中使用的JTAG為IEEE1149.1-2001標(biāo)準(zhǔn)。[!--empirenews.page--]
JTAG是一種嵌入式處理器開發(fā)工具的接口,是目前單片機(jī)普遍采用的在系統(tǒng)調(diào)試和編程方式之一。使用JTAG調(diào)試模式,用戶可以發(fā)送指令和數(shù)據(jù)給處理器,同時(shí)也可以接收處理器發(fā)送過來的數(shù)據(jù),這樣就可以在外部實(shí)現(xiàn)對(duì)處理器的控制并進(jìn)行一定的操作,譬如讀寫寄存器、擦除FLASH、向RAM、FLASH寫入數(shù)據(jù)等。標(biāo)準(zhǔn)的JTAG接口是四線:TMS,TCK,TDI,TDO。相關(guān)JTAG引腳的定義為:TCK為測(cè)試時(shí)鐘輸入;TDI為測(cè)試數(shù)據(jù)輸入,數(shù)據(jù)通過TDI引腳輸入JTAG接口;TDO為測(cè)試數(shù)據(jù)輸出,數(shù)據(jù)通過TDO引腳從JTAG接口輸出;TMS為測(cè)試模式選擇,TMS用來設(shè)置JTAG接口處于某種特定的測(cè)試模式;TRST為測(cè)試復(fù)位,輸入引腳,低電平有效。
MPC5554提供JTAG和Nexus兩種調(diào)試接口。為了使用方便,F(xiàn)reescale公司開發(fā)出了針對(duì)JTAG與Nexus共用的專用燒寫器與配套軟件,為14針腳。其主要特點(diǎn)是雙向同步串行通信。同步串行通信時(shí)鐘由仿真器提供,并與單片機(jī)總線時(shí)鐘同步。通過USBMultilink轉(zhuǎn)換接口(連接到目標(biāo)板14針JTAG/Nexus接口上),可以在線實(shí)現(xiàn)燒寫、校驗(yàn)、檢查、上載、擦寫等功能。Freescale對(duì)14針JTAG/NexlJs接口引腳定義,參見表1。
3 硬件設(shè)計(jì)
該系統(tǒng)的硬件設(shè)計(jì)為基于MPC5554的最小系統(tǒng)板,包括晶振電路、電源模塊、I/O模塊、A/D轉(zhuǎn)換模塊、RS 232通信端口,CAN端口,跑馬燈,外擴(kuò)2片AMD公司的FLASH芯片AM29LV160DT作為程序存儲(chǔ)器,2片外擴(kuò)RAM,其功能模塊如圖2所示。
AM29LV160DT存儲(chǔ)容量為16 Mb,供電方式為2.7~3.6 V單電壓供電,無需另外提供FLASH擦除和寫入電壓。該芯片有48引腳FBGA,48引腳TSOP和44引腳SO三種封裝形式,該系統(tǒng)中使用SO44封裝形式,圖3所示為其引腳邏輯圖。其數(shù)據(jù)寬度可配置為8位(字節(jié))和16位(字)兩種模式。FLASH內(nèi)部包含35個(gè)扇區(qū),每個(gè)扇區(qū)大小根據(jù)數(shù)據(jù)寬度的不同而不同。表2列出了AM29LV160DT的扇區(qū)地址分配。
[!--empirenews.page--]
為了在嵌入式系統(tǒng)中獲得更高的性能優(yōu)勢(shì),常需要構(gòu)建32位存儲(chǔ)系統(tǒng),可通過以下兩種方式構(gòu)建:使用2片16位數(shù)據(jù)寬度的FLASH存儲(chǔ)器芯片并聯(lián)或者使用1片32位數(shù)據(jù)寬度的FLASH存儲(chǔ)芯片。該系統(tǒng)設(shè)計(jì)要求程序存儲(chǔ)器為4 MB容量,32位數(shù)據(jù)寬度,故采用2片AM29LV160DT并聯(lián)構(gòu)建存儲(chǔ)系統(tǒng),其連接參見圖4。將2片F(xiàn)LASH的BYTE引腳接高電平,使芯片工作在16位模式下,每片F(xiàn)LASH傳送兩個(gè)字節(jié)數(shù)據(jù)。該系統(tǒng)為32位數(shù)據(jù)寬度,所以需要兩片F(xiàn)LASH芯片,同時(shí)傳送4個(gè)字節(jié)數(shù)據(jù)。
由于MPC5554采用是大端數(shù)據(jù)格式,即高字節(jié)位于低地址,而AM29LV160DT卻與此相反,采用的是小端數(shù)據(jù)格式,所以在進(jìn)行電路設(shè)計(jì)時(shí),將MPC5554的地址線A[29:10]依次連接到2片AM29LV160DT的地址線A[0:19]。芯片的RY/BY引腳接高電平時(shí)可提供多種芯片“忙”監(jiān)測(cè)功能,通過查詢數(shù)據(jù)線檢測(cè)芯片是否處于擦除或編程等“忙”狀態(tài),但在S044封裝芯片中并無該引腳,故在該系統(tǒng)中并沒有出現(xiàn)RY/BY引腳。
[!--empirenews.page--]
4 軟件實(shí)現(xiàn)
該系統(tǒng)軟件開發(fā)基于Codewarrior,P&E(Proces-sor·Expert)與JTAG組合開發(fā)平臺(tái),圖5是開發(fā)平臺(tái)示意圖。其中,Codewarrior是Freescale公司針對(duì)PowerPC系列微控制器開發(fā)的集成開發(fā)環(huán)境。Codewarrior集編輯器、調(diào)試器功能于一體,可進(jìn)行編碼、編譯、編輯、鏈接和調(diào)試等開發(fā)過程。 Codewarrior中使用C/C++語言進(jìn)行編程。為了便于開發(fā),F(xiàn)rees-cale公司開發(fā)了供MPC5554配套使用的圖形化開發(fā)工具P &E(Processor Expert),通過它對(duì)MPC5554各功能模塊進(jìn)行設(shè)置,生成相應(yīng)函數(shù)和執(zhí)行代碼,可在Codewarrior開發(fā)環(huán)境中使用。
MPC5554通過外部總線接口(Extrenal Bus Inter-face,EBI)和存儲(chǔ)器控制器提供對(duì)外部存儲(chǔ)器的訪問。其中,外部總線接口提供24條地址線和32條數(shù)據(jù)線與存儲(chǔ)器相連,存儲(chǔ)器控制器提供4條片選信號(hào)線CS[0:3],1條輸出使能信號(hào)線OE,4條讀寫信號(hào)線WE[0:3],用于選擇和讀寫外部存儲(chǔ)器或設(shè)備。MPC5554的24條地址線和4條片選信號(hào)配合可以訪問64 MB的地址空間。
在軟件實(shí)現(xiàn)方面,主要是對(duì)EBI相關(guān)寄存器進(jìn)行設(shè)置,同時(shí)在SIU(System Integration Unit)模塊對(duì)相關(guān)管腳進(jìn)行功能設(shè)置,以及對(duì)FLASH自身的程序設(shè)計(jì)。MPC5554自身劃分了若干功能模塊,并設(shè)有相應(yīng)的寄存器。MPC5554的大部分引腳具有復(fù)用功能,每個(gè)引腳通過SIU模塊的PCR(Pad Configuration Registers)寄存器進(jìn)行功能選擇。例如片選信號(hào)引腳功能復(fù)用為CS[0:3]_ADDR[8:11]_GPIO[0:3],作為片選信號(hào)需要對(duì)寄存器進(jìn)行設(shè)置,其他相關(guān)引腳同理設(shè)置。
SIU.PCR[2].R=0x0443: //CS2
SIU.PCR[3].R=0x0443: //CS3
MPC5554的EBI模塊對(duì)外部數(shù)據(jù)總線進(jìn)行設(shè)置,對(duì)某片選信號(hào)相對(duì)應(yīng)的外擴(kuò)存儲(chǔ)器進(jìn)行地址與存儲(chǔ)空間設(shè)置。其中,OR寄存器通過掩碼的方式設(shè)置片選信號(hào)控制的存儲(chǔ)空間大小。例如,CS[3]連接的FLASH起始地址為0x20000000,存儲(chǔ)器空間為2 MB。
EBI.CS[3].BR.R=0x20000003;
EBI.cs[3].OR.R=0xffe00020;
該系統(tǒng)的重點(diǎn)是對(duì)FLASH進(jìn)行操作的程序,主要是對(duì)AM29LV160DT內(nèi)部的命令寄存器按一定的時(shí)序?qū)懭朊?,如?所示。通過這些命令或命令序列可以實(shí)現(xiàn)獲得芯片信息、數(shù)據(jù)讀取、整體擦除、扇區(qū)擦除和數(shù)據(jù)寫入等功能。
下面附一部分FLASH擦寫程序。
5 結(jié) 語
在此實(shí)現(xiàn)了在JTAG模式下對(duì)MPC5554外部FLASH的編程設(shè)計(jì),驗(yàn)證了Codewarrior,P&E與JTAG組合開發(fā)平臺(tái)的可用性,為MPC5554微控制器用于復(fù)雜多變量系統(tǒng)開發(fā)打下了基礎(chǔ)。