周志江
摘 要:C5410內(nèi)部有16K字的ROM和64K字的RAM,而ROM是不允許用戶自行編程這給設(shè)計(jì)帶來(lái)很大的不方便。用戶只能使用RAM,但RAM掉電后數(shù)據(jù)就會(huì)丟失,所以必須為DSP設(shè)計(jì)一個(gè)能存放程序代碼的存儲(chǔ)器。文章選擇的FLASH存儲(chǔ)器是SST公司生產(chǎn)的SST39VF400A。
關(guān)鍵詞:FLASH存儲(chǔ)器;地址分配;實(shí)現(xiàn)
1 C5410與FLASH的接口設(shè)計(jì)
1.1 SST39VF400A芯片介紹
SST39VF400A是SST公司的256K×16位FLASH存儲(chǔ)器,工作電壓3.3V,支持單字節(jié)編程;支持3種擦除方式:以2 kB為單位的扇區(qū)擦除,以32 kB為單位的塊擦除和片擦除。用戶只需向其特定地址寫(xiě)入特定的指令序列,那么通過(guò)這些命令用戶即可啟動(dòng)內(nèi)部寫(xiě)狀態(tài)機(jī),從而使其自動(dòng)完成指令序列要求的內(nèi)部操作。
SST 39VF400A具有在線燒寫(xiě)功能,只要在有效的擦除工作完成后,按照特定的命令時(shí)序向其寫(xiě)入編程命令和數(shù)據(jù)就可以實(shí)現(xiàn)對(duì)它的編程。SST39VF400A常用的字編程和片擦除命令如表1所示。
表1 SST39VF400A指令序列
1.2 DSP與FLASH構(gòu)成的最小系統(tǒng)
圖1 DSP與FLASH連接圖
由圖1,F(xiàn)LASH的片選信號(hào)CE由DSP的數(shù)據(jù)空間選擇信號(hào)DS和存儲(chǔ)器選通信號(hào)MSTRB產(chǎn)生,讀使能信號(hào)OE和寫(xiě)使能信號(hào)WE由DSP的讀寫(xiě)脈沖信號(hào)R/Wj產(chǎn)生。FLASH的地址線A0~A15和DSP的A0~A15直接相連,A16和A17接地。由于DSP數(shù)據(jù)空間0000H~7FFFH為存儲(chǔ)器映象寄存器、暫存器和片內(nèi)RAM,對(duì)外部FLASH來(lái)講是不可見(jiàn)的,所以FLASH可操作的地址范圍為8000H~FFFFH。設(shè)用戶程序從FLASH中8000H單元開(kāi)始存放,則系統(tǒng)上電時(shí)引導(dǎo)程序就從數(shù)據(jù)空間的8000H單元開(kāi)始搬運(yùn)數(shù)據(jù)到DSP內(nèi)部RAM指定區(qū)域,引導(dǎo)完畢后即跳轉(zhuǎn)到RAM中程序入口地址運(yùn)行用戶程序。
為配合FLASH讀寫(xiě)的時(shí)序要求,我們通過(guò)CPLD實(shí)現(xiàn)FLASH讀寫(xiě)時(shí)序,邏輯如圖2所示。
圖2 CPLD邏輯
1.3 JTAG接口設(shè)計(jì)
對(duì)于C5410,需要引出JTAG接口,以便于仿真調(diào)試。一般情況下,只要仿真器與開(kāi)發(fā)板之間的連接電纜不超過(guò)6英寸,可以直接連接。如果超過(guò)了6英寸,則需要在數(shù)據(jù)傳輸引腳加上驅(qū)動(dòng)。圖3給出兩種情況下的JTAG接口的連接方法。
2 C5410的BOOT設(shè)計(jì)與實(shí)現(xiàn)
DSP系統(tǒng)的引導(dǎo)裝載(Bootload)是指在系統(tǒng)加電時(shí),DSP將一段存儲(chǔ)在外部的非易失性存儲(chǔ)器的代碼移植到內(nèi)部的高速存儲(chǔ)器單元中去執(zhí)行。這樣既利用了外部的存儲(chǔ)單元擴(kuò)展DSP本身有限的ROM資源,又充分發(fā)揮了DSP內(nèi)部資源的效能。盡管用戶代碼在一段時(shí)間相對(duì)是固定的,但是如果直接將其掩膜到內(nèi)部ROM中去的話,一方面受容量以及價(jià)格的限制,另一方面每次修改代碼都需要向TI公司提交代碼,由TI公司進(jìn)行掩膜,顯得不是很靈活方便。FLASH是一種高密度、非易失性的電可擦寫(xiě)存儲(chǔ)器,而且單位存儲(chǔ)比特的價(jià)格比傳統(tǒng)的EPROM要低,十分適合于低功耗、小尺寸和高性能的便攜式系統(tǒng)。除了可以采用專用的硬件編程器把代碼灌入FLASH中之外,也可以利用現(xiàn)成的DSP通過(guò)軟件編程來(lái)實(shí)現(xiàn)同樣的功能。
2.1 BOOTLOADER概述
TMS320VC5410的片內(nèi)ROM區(qū)程序如表2所示。
表2 TMS320VC5410片內(nèi)ROM區(qū)
當(dāng)DSP上電(復(fù)位)后,IPTR被恢復(fù)成默認(rèn)值111111111b,如果MP/MC=0,程序指針PC指向片內(nèi)程序區(qū)的0xFF80處,這個(gè)地址正好是ROM區(qū)中斷向量表的起始地址,在這個(gè)地址上有一條跳轉(zhuǎn)指令,使程序指針PC跳轉(zhuǎn)到F800H,開(kāi)始執(zhí)行BootLoader程序。
TMS320VC5410提供的片內(nèi)引導(dǎo)方法有:主機(jī)口HPI模式、8位串口EEPROM模式、8位或16位并口模式、8位或16位I/O模式和8位或16位串口模式等。DSP上電后,順序檢測(cè)這些引導(dǎo)模式,當(dāng)檢測(cè)到有效的引導(dǎo)模式后,則進(jìn)入相應(yīng)的引導(dǎo)模式。檢測(cè)過(guò)程參看圖4。
2.2 TMS320VC5410的BOOT設(shè)計(jì)與實(shí)現(xiàn)
參看圖4,本系統(tǒng)選取16位并行引導(dǎo)模式。INT2設(shè)置為不激活(本系統(tǒng)直接通過(guò)一個(gè)10k?贅電阻接到3.3V電源),MP/MC=0,OVLY=1,DROM=0,F(xiàn)LASH映射到DSP數(shù)據(jù)區(qū)的8000H~FFFFH。
為了實(shí)現(xiàn)DSP加電自舉,F(xiàn)LASH中的數(shù)據(jù)必須按照自舉引導(dǎo)表的格式“燒寫(xiě)”。
自舉表內(nèi)容不僅包括了欲加載的各段代碼,而且包括各段代碼長(zhǎng)度、各代碼段存放的目標(biāo)地址、程序入口地址等信息。因此若想利用自舉引導(dǎo)功能,首先必須正確建立自舉表。
2.3 FLASH在線編程
要把通過(guò)上面介紹的方法生成的自舉引導(dǎo)表文件放入FLASH中,需要使用燒錄器,而且使用燒錄器燒錄,還對(duì)FLASH的封裝提出了要求,這就限制了用戶的靈活性。
本系統(tǒng)采用了另外一種被稱為“二次加載法”的方法,具體過(guò)程如下:
建立兩個(gè)獨(dú)立的工程文件:Project.pjt和FlashBurn.pjt。前者生成的目標(biāo)文件就是要燒入到FLASH中的用戶程序,后者則是燒寫(xiě)程序。Project.pjt有兩個(gè)程序段:第一段是“.text”段,位于0x0100開(kāi)始的單元,長(zhǎng)度為0x0838。第二段為“.VECTORS”段,位于0x0080開(kāi)始的單元,長(zhǎng)度為0x0080。它實(shí)現(xiàn)中斷向量表的重新映射。程序執(zhí)行入口地址也在0x0100單位。燒寫(xiě)的只需燒寫(xiě)用戶程序的已初始化段。用戶程序各段的起始單元及其長(zhǎng)度可以參考該工程編譯鏈接后的生成的.map文件。
燒寫(xiě)工程文件Project.pjt只有一個(gè)程序段,定位在0x7000開(kāi)始的存儲(chǔ)區(qū)(注意不要與MyProject.pjt所占的程序空間有重疊),并將其_c_int00直接定位到該區(qū)域。
用戶程序燒寫(xiě)到外部FLASH的0x8000開(kāi)始的存儲(chǔ)區(qū)。
兩個(gè)工作建立并且編譯完畢后,在CCS中先打開(kāi)Project.pjt工程文件,用“File→Load Program...”菜單命令下載用戶程序目標(biāo)代碼Project.out;再打開(kāi)Project.pjt工程文件,下載FlashBurn.out,運(yùn)行FlashBurn.out,即可將FlashBurn.out代碼及其Boot引導(dǎo)信息寫(xiě)入到FLASH中。
燒寫(xiě)結(jié)束后,關(guān)掉CCS,重新給DSP上電,DSP自舉引導(dǎo)成功。
3 結(jié)束語(yǔ)
利用“二次加載”法,可以實(shí)現(xiàn)DSP程序的在線燒寫(xiě),文章以5410為例來(lái)介紹該方法,實(shí)際上可以擴(kuò)展到其它型號(hào)的DSP芯片,燒寫(xiě)成功的關(guān)鍵在于:一是要理解該方法的實(shí)質(zhì),二是要正確規(guī)劃兩種程序在內(nèi)存中的地址分配。