1 引言 隨著數(shù)字信號(hào)處理技術(shù)的快速發(fā)展,DSP越來(lái)越廣泛地應(yīng)用于各種數(shù)字信號(hào)處理系統(tǒng)中。由于TMS320VC55x系列DSP的內(nèi)部存儲(chǔ)器沒(méi)有可供用戶(hù)使用的Flash,而最終開(kāi)發(fā)的系統(tǒng)要想脫離仿真器運(yùn)行。必須將程序代碼存儲(chǔ)在非易失性存儲(chǔ)器中,所以要對(duì)DSP外接存儲(chǔ)器。Flash存儲(chǔ)器以其大容量和可在線編程等特點(diǎn)已成為DSP系統(tǒng)的一個(gè)基本配置。如何將程序燒寫(xiě)入Flash,并在上電時(shí)加載到DSP內(nèi)部的RAM,是Flash在DSP系統(tǒng)中應(yīng)用的兩個(gè)基本技術(shù)問(wèn)題。 以基于TI公司的TMS320VC5502和SST公司的SST39VF200開(kāi)發(fā)的系統(tǒng)為背景,詳細(xì)介紹了系統(tǒng)引導(dǎo)相關(guān)的硬件設(shè)計(jì),燒寫(xiě)軟件設(shè)計(jì)以及自舉引導(dǎo)等實(shí)現(xiàn)方法。 2 TMS320VC5502的自舉引導(dǎo) 2.1 TMS320VC5502的存儲(chǔ)區(qū)以及Bootloader TMS320VC5502的存儲(chǔ)區(qū)是統(tǒng)一分配地址,即對(duì)程序和數(shù)據(jù)的訪問(wèn)在相同的物理空間。TMS320VC5502的存儲(chǔ)區(qū)共分為4個(gè)區(qū),即CE0,CEl,CE2,CE3,其字節(jié)地址分別為000000h-3FFFFFh,400000h~7FFFFFh,800000h~BFFFFFh.C00000h"FFFFFFh。片內(nèi)存儲(chǔ)器共48 K字節(jié),可分為32 K的16位字的RAM和16 K的16位字的ROM,片內(nèi)RAM的字節(jié)地址為000000h~00FFFFh,位于CEl區(qū);片內(nèi)ROM的字節(jié)地址為FF8000h~FFFF00h。 片內(nèi)ROM從FF8000h開(kāi)始的區(qū)域包含Bootloader,該程序在系統(tǒng)上電或復(fù)位后可以將用戶(hù)代碼自動(dòng)搬移到片內(nèi)RAM運(yùn)行。 2.2 自舉加載模式選擇 TMS320VC5502的引導(dǎo)模式選擇是通過(guò)3個(gè)模式選擇引腳BOOTM[0:2]配置完成的。BOOTM[0:2]引腳分別與GPl00,GPl01,GPl02相連。自舉加載模式選擇如表1所示。 TMS320VC5502每次上電復(fù)位后,在執(zhí)行完一系列初始化工作后,根據(jù)預(yù)先配置的自舉模式,通過(guò)固化在ROM內(nèi)的Bootloader程序進(jìn)行程序引導(dǎo)。系統(tǒng)設(shè)計(jì)中,采用EMIF(外部存儲(chǔ)接口)并行引導(dǎo)模式(16位數(shù)據(jù)寬度),只需將BOOTM[2:0]設(shè)置成011即可。 2.3 TMS320VC5502的引導(dǎo)表 Bootloader允許應(yīng)用代碼存放在慢速非易失性的外部存儲(chǔ)器中,然后再將代碼搬移到高速的片內(nèi)存儲(chǔ)器執(zhí)行。應(yīng)用代碼以一種Bootloader能夠理解的特殊格式編碼,這種格式就是自舉加載表。Boofloader在引導(dǎo)程序時(shí),程序代碼是以自舉加載表形式加載。自舉加載表包含了將要搬移的代碼段、程序段,以及這些段將要被搬移到的地址和加載完成后程序要執(zhí)行的地址(即程序入口地址)和其他一些配置信息。 TMS320VC55x系列DSP的自舉加載表結(jié)構(gòu)如表2所示。 其中,程序入口地址是自舉加載表加載結(jié)束后用戶(hù)程序開(kāi)始執(zhí)行的地址;寄存器配置數(shù)目決定了后面有多少個(gè)寄存器需要配置:只有當(dāng)延時(shí)標(biāo)志為0xFFFF時(shí),延時(shí)才被執(zhí)行;延時(shí)長(zhǎng)度決定了在寄存器配置后延時(shí)多少個(gè)CPU周期才進(jìn)行下一個(gè)動(dòng)作;段長(zhǎng)度、段起始地址和數(shù)據(jù)則為用戶(hù)程序中定義的各個(gè)段的內(nèi)容,并且可以重復(fù)添加;最后以0x00000000(32個(gè)01作為引導(dǎo)表的結(jié)束標(biāo)志。 若要生成引導(dǎo)表,可用CCS最終編譯生成的.out文件通過(guò)CCS自帶的hex55.exe轉(zhuǎn)換程序得到。將hex55.exe文件、.out文件、.cmd文件放在同一個(gè)文件夾中,通過(guò)DOS命令調(diào)用hex55.exe和.cmd文件,即可完成.out文件到.hex格式的引導(dǎo)表文件的轉(zhuǎn)化。.cmd文件用于提供引導(dǎo)表的相關(guān)配置信息,以下為一個(gè).cmd文件實(shí)例。
經(jīng)hex55.exe文件轉(zhuǎn)化后的.hex格式的自舉加載表文件是不能直接導(dǎo)入CCS中,CCS只支持將特別規(guī)定的DAT格式文件通過(guò)LDADDATA導(dǎo)入內(nèi)存。所以在導(dǎo)入之前必須先將自舉加載表轉(zhuǎn)化成DAT格式文件,這個(gè)工作可以用VC編寫(xiě)簡(jiǎn)單的C語(yǔ)言轉(zhuǎn)化程序?qū)崿F(xiàn)。 2.4 TMS320VC5502和Flash的連接 EMIF為外部存儲(chǔ)接口,通過(guò)EMIF接口可靈活地和各種同步或異步存儲(chǔ)器件無(wú)縫連接。通過(guò)EMIF接口可以將TMS320VC5502的存儲(chǔ)空間擴(kuò)展到128 Mbit。存儲(chǔ)空間被分為CE0"CE3四個(gè)區(qū).每區(qū)占用不同的地址。在EMIF的并行引導(dǎo)模式下,ROM固化的Bootloader程序是以字地址0x200000為首地址開(kāi)始加載程序。Ox200000即為CEl空間的首地址,所以Flash必須接在DSP的CEl空間上。 TMS320VC5502的EMIF有內(nèi)部和外部?jī)煞N地址總線。內(nèi)部地址總線為A[21:2],外部地址總線為A[19:0]。EMIF根據(jù)所用的存儲(chǔ)器數(shù)據(jù)線大小自動(dòng)將內(nèi)部地址總線移位,以便與外部地址總線連接。外存儲(chǔ)器的地址總線應(yīng)該總是連接在EMIF、的以A2開(kāi)始的地址線上。例如一個(gè)8,16或32位的異步存儲(chǔ)器的地址總線A[n:0](其中n表示外存儲(chǔ)器的地址線個(gè)數(shù))應(yīng)該連接EMIF的地址線A[n+2:2]。圖1給出TMS320VC5502和Flash的連接實(shí)例。表3為T(mén)MS320VC5502的內(nèi)部總線和外部地址總線的映象關(guān)系。 3 并行Flash的燒寫(xiě) 3.1 數(shù)據(jù)燒寫(xiě)程序設(shè)計(jì) Flash的數(shù)據(jù)可直接讀取,但對(duì)Flash的編程和擦除操作則需要通過(guò)一系列命令才能進(jìn)行。SST39VF200的寫(xiě)操作只能將1變成0,而O變成l必須通過(guò)擦除操作進(jìn)行。所以每次寫(xiě)Flash之前必須進(jìn)行片擦除,使存儲(chǔ)單元值變成0xFFFF才能進(jìn)行編程。擦除命令需要6個(gè)周期,編程命令需要4個(gè)周期,操作命令如表4所示H。 編程和擦除操作都需要一定周期的時(shí)間(SST39VF200的單字編程時(shí)間是14μs,整片擦除時(shí)間是70 ms)。用戶(hù)可以通過(guò)查詢(xún)標(biāo)志數(shù)據(jù)線DQ6和DQ7確定編程或擦除是否完畢。當(dāng)器件正處于編程或擦除狀態(tài)時(shí),連續(xù)讀任意單元的值,D06的值將一直在O、l之間交替變化。當(dāng)編程或擦除結(jié)束時(shí),讀DQ6則得到一個(gè)恒定值。這里即通過(guò)此方法判斷操作是否結(jié)束。 根據(jù)Flash的編程和擦除命令,編寫(xiě)了相應(yīng)的C語(yǔ)言程序,其中在TMS320VC55x系列1)SP中,對(duì)外接存儲(chǔ)器的訪問(wèn)要調(diào)用庫(kù)函數(shù)far_poke()和far_peek()。這2個(gè)函數(shù)包含在<extaddr.h>頭文件中,并且尋址的地址為字地址。以下給出擦除程序,寫(xiě)操作與此類(lèi)似。表5為對(duì)外接存儲(chǔ)器讀寫(xiě)的庫(kù)函數(shù)。 3.2 程序的燒寫(xiě)實(shí)現(xiàn) 系統(tǒng)在CCS仿真環(huán)境下對(duì)Flash進(jìn)行在線編程。先建立一個(gè)Flash的燒寫(xiě)工程,并在工程中將要燒寫(xiě)進(jìn)Flash的自舉加載表文件通過(guò)CCS的LOADDATA功能直接加載進(jìn)DSP的內(nèi)存。根據(jù)加載的首地址和數(shù)據(jù)長(zhǎng)度,在仿真環(huán)境下燒進(jìn)Flash中。當(dāng)然也可以直接在程序中定義一個(gè)數(shù)組,將DAT文件中的數(shù)據(jù)賦值給該數(shù)組的元素,然后將該數(shù)組的每個(gè)元素寫(xiě)入Flash。在運(yùn)行燒寫(xiě)程序之前,要先對(duì)EMIF進(jìn)行設(shè)置,因?yàn)镋MIF默認(rèn)的是接8位異步存儲(chǔ)器,可以通過(guò)調(diào)用GEL菜單中Init_CE0_Async_16命令完成。 4 結(jié)語(yǔ) 闡述了一種針對(duì)TMS320VC55x系列DSP簡(jiǎn)單有效的Flash燒寫(xiě)方法,并提出了程序自舉加載的實(shí)現(xiàn)方法。討論的加載方法包括硬件設(shè)計(jì)及相關(guān)程序,已在筆者實(shí)際開(kāi)發(fā)的高精度數(shù)據(jù)采集項(xiàng)目中使用并成功運(yùn)行。 |