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