TMS320C672x系列浮點DSP的EMIF研究與應(yīng)用
目前,DSP技術(shù)已廣泛用于信號處理、通信和雷達等領(lǐng)域。TI公司的帶EMIF擴展存儲器接口的浮點DSPTMS320C672x系列是專為高速、高性能應(yīng)用而開發(fā)的,主要應(yīng)用于高速寬帶、圖像處理和高速鐵路軌道信號處理等領(lǐng)域。DSP應(yīng)用平臺設(shè)計中,外部存儲器接口(EMIF)是為DSP與外部設(shè)備之間提供連接。EMIF和外部器件SDRAM以及Flash的合理設(shè)計關(guān)系到系統(tǒng)的數(shù)據(jù)存儲和程序加載。
TMS320C672x系列浮點DSP的EMIF性能優(yōu)良,增強了與外部1、2或4區(qū)的16位或32位SDRAM和異步器件連接的方便性和靈活性。TMS320C6722和TMS320C6726 EMIF寬度為16位,支持的SDRAM可達128 Mb;TMS320C6727EMIF寬度為32位,支持高達256Mb和512Mb的SDRAM。
異步存儲器接口是從并行的8位、16位或32位NOR Flash實現(xiàn)系統(tǒng)自啟動。若使用大容量的Flash,EMIF連接Flash的高位地址線可通過外部器件CPLD或自身GPIO口擴展。
1 EMIF接口
EMIF接口具有很強的外設(shè)連接能力,可尋址空間一般比較大,數(shù)據(jù)吞吐較快。EMW接口支持的器件包括同步突發(fā)靜態(tài)RAM(SBSRAM)、同步動態(tài)RAM(SDRAM)、各種異步設(shè)備(SRAM、ROM和FIFO)以及同步FIFO。TMS320C672x的EMIF引腳結(jié)構(gòu)如圖1所示。
其主要引腳功能如下:
EM_A[x:0]:EMIF地址總線。當(dāng)與SDRAM器件連接時,地址總線主要為SDRAM提供行地址和列地址。當(dāng)與異步器件連接時,這些引腳與EM_BA引腳提供器件地址。
EM_BA[1:0]:EMIF存儲區(qū)地址線。與SDRAM連接時,為SDRAM提供存儲區(qū)地址。與異步器件連接時,這些引腳與EM_A引腳共同提供器件地址。
EM_WE_DQM[x:0]:低電平有效寫觸發(fā)或字節(jié)使能引腳。與SDRAM連接時,這些引腳與SDRAM的DQM引腳連接。在數(shù)據(jù)訪問中分別使能/禁止每一字節(jié)。與異步器件連接時,這些引腳可作為字節(jié)使能(DQM)或字節(jié)寫觸發(fā)(WE)。
EM_CS[0]和[2]:CS[0]為SDRAM器件低電平有效芯片使能引腳,當(dāng)訪問異步器件時此引腳失效,在完成異步存取后自動恢復(fù)其功能;CS[2]為低電平有效異步器件使能引腳,僅在訪問異步存儲器時有效。
EM_RAS:低電平有效行地址選通引腳,與SDRAM的RAS引腳連接,用于向此器件發(fā)送命令。
EM_CAS:低電平有效列地址選通引腳,與SDRAM的CAS引腳連接,用于向此器件發(fā)送命令。
EM_CKE:時鐘使能引腳,與SDRAM的CKE連接,發(fā)出自刷新命令,使器件進入自刷新模式。
EM_CLK:SDRAM時鐘引腳,EMIF時鐘來自DSP的PLL控制器的SYSCLK3時鐘模塊。
2 EMIF與SDRAM的設(shè)計
這里以SDRAM(HY57V281620A)為例,說明EMIF和SDRAM的接口與配置,HY57V281620A是4 Bankx2MBx16 bit的SDRAM器件,可與TMS320C67 22 DSP無縫連接。圖2是TMS320C6722型DSP與HY57V281620A型SDRAM的電路連接。
2.1 SDRAM的軟件配置
在TMS320C6722的EMIF中有一組存儲器映射寄存器,通過設(shè)置這些寄存器便可完成對SDRAM的配置,包括配置寄存器SDCR、刷新控制寄存器SDRCR、時序寄存器SDTIMR和自刷新退出時序寄存器SDSRETR。具體的配置代碼如下:
2.2 SDRAM的軟件操作
根據(jù)上面軟件配置中IBANK和PAGESIZE字段的設(shè)置,圖3列出了C6722 EMIF連接16位4區(qū)256字頁面的SDRAM地址映射關(guān)系,其他系列地址映射關(guān)系參考TI資料。SDRAM讀/寫程序流程如圖4所示。[!--empirenews.page--]
EMIF控制SDRAM工作時,當(dāng)行地址選通引腳EM_RAS有效時,SDRAM通過A0~A11獲取行地址;當(dāng)列選通引腳EM_CAS有效時,SDRAM通過A0~A11獲取列地址。EMIF訪問的外部SDRAM空間地址映射為0x80000000-0x8FFFFFFF,由表1的地址映射知,如果要存儲16位的short int型數(shù)據(jù)到SDRAM,每次邏輯地址需要加2,如:*(short int*)(0x80000000+i*2)=short int i;存儲32位的int型數(shù)據(jù)每次地址需要加4,如:*(int*)(0x80000000+i*4)=int i。
3 EMIF與Flash的設(shè)計
當(dāng)DSP脫機運行時,系統(tǒng)上電或復(fù)位后,DSP系統(tǒng)自帶的Bootloader將一段存儲在外部的非易失性存儲器中的代碼搬移到內(nèi)部高速存儲單元中執(zhí)行。這樣既利用了外部存儲單元擴展DSP本身有限的ROM資源,又充分發(fā)揮了DSP內(nèi)部資源的效能。TMS320C672x系列DSP只支持一種硬啟動選項,即從內(nèi)部ROM地址0x00000000啟動,其他啟動選項由存儲于ROM的軟啟動器實現(xiàn)。軟啟動器使用CFGPIN0和CFGPIN1寄存器,這2個寄存器在復(fù)位時捕捉相關(guān)器件引腳的狀態(tài),以決定進入那種啟動模式。ROM主要有4種自啟動模式:從EM_CS2空間的并行Flash啟動、利用SPI0或I2C1主模式從EEPROM啟動、利用SPI0或I2C1從模式從外部MCU啟動以及利用UHPI口從外部MCU啟動。這里分析了從EM_CS2空間的并行Flash啟動模式,給出了高密度、非易失性的電可擦除存儲器AM29LV800BB-90EC(512 Kx16 Bit)與EMIF的接口設(shè)計方案。
3.1 Flash的硬件連接
AM29LV800BB~90EC型Flash具有19根地址線,而TMS320C6722 EMIF只有14根地址線(EBA0~EBA1、EA0~EA11)。因此,EMIF與Flash連接時地址線不夠用,需要擴展高位地址線,這里提出兩種擴展方法:GPIO擴展和CPLD地址鎖存器擴展。
3.1.1 GPIO擴展
TMS320C672X MCASP通道的各功能引腳都可以作為通用的I/O接口,直接與Flash存儲器的高位地址線連接。硬件原理圖如圖5所示研。圖5中,任何在復(fù)位時可下拉的GPIO引腳都可用于控制Flash啟動器的地址線A[18:13]。
3.1.2 CPLD地址鎖存器擴展
在CPID中設(shè)計一個地址鎖存器74L273,通過74L273的輸出口擴展7根高位地址線A11~A17,分別與Flash的A12~A18連接。EMW的EM_A[11]作為CPLD鎖存器的輸入選通端選,EMIT數(shù)據(jù)線作為鎖存器的輸入,如圖6所示。
3.2 FLash的軟件配置
在EMIF異步接口中,AICR是唯一需要編程的寄存器。根據(jù)Flash器件的特性,配置如下:
3.3 Flash的軟件操作
TMS320C672x DSP的存儲器中EMIF訪問的外部異步器件Flash空間地址映射為0x90000000~0x9FFFFFFF之間。由于Flash數(shù)據(jù)總線寬度為16位,因此在硬件設(shè)計時選用半字尋址,即EMIF的BA[1]連接Flash的A[0]。根據(jù)配置寄存器A1CR中數(shù)據(jù)總線寬度的配置,訪問異步器件時TMS320C6722中內(nèi)部地址和EMIF地址引腳對應(yīng)如表1所示。[!--empirenews.page--]
Flash在讀操作中類似于普通的ROM,在寫操作中需要使用一些特殊命令字,按一定的順序編程,且可隨時編程,編程命令根據(jù)器件參考資料。對Flash的讀/寫流程如圖7所示。
由表1知,對Flash進行16位數(shù)據(jù)寫操作時每次偏移地址需要左移1位,即:*(short int*)(0x90000000+i*2)=shortint i://對Flash的i地址寫入16位數(shù)據(jù)i由于此Flash高位地址線為擴展的地址線,必然導(dǎo)致訪問Flash時地址不連續(xù)。每次只能連續(xù)訪問Flash內(nèi)部4 Kx16 Bit空間,即0x9000_0000~0x9000_1FFE。需要訪問高地址空間時,首先通過設(shè)置相應(yīng)的GPIO引腳或者通過數(shù)據(jù)線利用CPLD設(shè)置Flash的相應(yīng)高地址線;然后再分別操作低位地址線進行讀寫,便可完成對高地址空間的讀寫。
4 EMIF并行Flash自啟動
4.1 Flash自啟動過程
在實際應(yīng)用中通常把代碼和數(shù)據(jù)表存放在外部的非易失性存儲器Flash中。TMS320C672X系列DSP片上的Bootloader工具只能將1KB的代碼搬移到內(nèi)部RAM。但是在通常情況下,用戶應(yīng)用程序的大小都會超過1 KB,所以需要在外部Flash的前1 KB范圍內(nèi)預(yù)先存放一小段程序,待片上Bootloader工具把此段代碼搬移入內(nèi)部并開始執(zhí)行后,由此段代碼將Flash中剩余的用戶應(yīng)用程序搬移入內(nèi)部RAM中。Flash中前1 KB代碼為二級Bootloader。系統(tǒng)上電或復(fù)位時,DSP內(nèi)部固化的啟動代碼會自動將位于Flash地址空間(0x90000000~0x9FFFFFFF)開頭的1 KB代碼傳輸?shù)絉AM存儲空間,這就是一次引導(dǎo)。很明顯,一次引導(dǎo)的代碼并不能滿足絕大多數(shù)編程者對代碼長度的要求,因此就需要二次引導(dǎo)過程。二次引導(dǎo)是將DSP一次引導(dǎo)的1 KB代碼編寫成一個搬移程序,搬移程序?qū)⒂脩舻闹鞒绦虬嵋频礁咚賀AM中,并且搬移完成后自動跳轉(zhuǎn)至主程序入口處運行主程序。由于硬件設(shè)計中Flash的地址不連續(xù),因此對高位地址線的控制需要在搬移程序中實現(xiàn)。圖8為使用二級Bootloader的流程圖。
二級Bootloader代碼的編寫必須使用匯編語言,因為在執(zhí)行二級Bootloader時C的運行環(huán)境還未建立起來。
4.2 Flash的燒寫方法
應(yīng)用程序和二次Boot編寫和編譯完成之后,便可使用TI公司提供的FlashBurn工具完成Flash燒寫,燒寫完成后需要重新上電或復(fù)位,便可實現(xiàn)自啟動。此FlashBurn工具雖然燒寫方法較為直觀,但是過程復(fù)雜,首先需要下載一個.out文件(FBTC)至DSP系統(tǒng)中,實現(xiàn)對Flash的操作;其次FlashBurn工具不能識別.out文件,只能接收.hex的十六進制文件,必須將.out文件轉(zhuǎn)換為.hex文件。
因此,用戶可以自己根據(jù)Flash器件的操作方法編寫燒寫程序,避免文件格式轉(zhuǎn)換的繁瑣。首先把用戶應(yīng)用程序(包括二級Bootloader)編譯生成的.out文件轉(zhuǎn)載到DSP的RAM中,然后根據(jù)要求編寫Flash燒寫程序,把燒寫程序的.out文件裝載到DSP的另一塊區(qū)域(注意修改cmd文件中地址范圍,避免兩次裝載可能產(chǎn)生的地址覆蓋),執(zhí)行程序完成Flash的燒寫。注意:燒寫到Flash中的應(yīng)用程序前面12個字節(jié)用于存放_c _int00地址、應(yīng)用程序字節(jié)數(shù)、應(yīng)用程序在RAM中的起始地址,這12個字節(jié)需要在燒寫過程中添加。
5 結(jié)束語
本文主要研究了TMS320C672x系列DSP EMIF接口的功能和使用方法,并針對SDRAM和Flash器件討論了EMIF的具體硬件接口設(shè)計和軟件配置;同時分析了TMS320C672x系列的自啟動過程,提出了兩種燒寫Flash的方法。該應(yīng)用方法經(jīng)實驗驗證,確實可行并易于實現(xiàn)。