DSP56362的雙引導裝載方法研究與實(shí)現
關(guān)鍵詞:DSP56362;Bootstrap;雙引導模式;命令字序列
1 引言
在脫機運行的DSP系統中,用戶(hù)代碼往往都需要在上電后自動(dòng)裝載運行。目前,大多數的DSP內部都有固化的引導裝載(Bootload)程序,它能在系統加電時(shí),自動(dòng)將一段存儲在外部非易失性存儲器中的程序代碼移植到內部的高速存儲器單元中去執行。采用這種方式,既可利用外部的存儲單元來(lái)擴展DSP本身有限的ROM資源,又充分發(fā)揮了DSP內部資源的效能。
因為用戶(hù)代碼在一段時(shí)間內是相對固定的,所以可以將其固化在非易失性存貯器中。而如果將代碼掩膜到DSP內部ROM中去?一方面要受到容量以及價(jià)格的限制,另一方面,系統代碼升級也不是很靈活方便。FLASH是一種高密度、非易失性的電可擦寫(xiě)存儲器,其單位存儲比特的價(jià)格比傳統的EPROM要低,十分適合低功耗、小尺寸和高性能的脫機系統。此外,除了可以采用專(zhuān)用的硬件編程器把程序代碼燒入FLASH中之外,也可以直接利用DSP通過(guò)軟件編程來(lái)實(shí)現。本文論述的正是如何通過(guò)DSP軟件編程來(lái)實(shí)現對FLASH的讀寫(xiě)操作,同時(shí)介紹了系統雙引導裝載方案的實(shí)現方法。
2 系統描述
本系統是基于MOTOROLA公司DSP56362芯片構建的數字音效處理系統中的一部分,整個(gè)數字音效處理系統的系統框圖如圖1所示。
DSP56362是一款24位通用定點(diǎn)數字信號處理器。它采用高性能單時(shí)鐘指令周期的DSP56300內核和Motorola Symphony DSP的音頻處理性能相結合的方法來(lái)實(shí)現?具有運算速度快(100MIPS)?精度高(24bit),外設接口豐富(具有增強型串行音頻接口ESAI、并行主機接口HI08、串行主機接口SHI、數字音頻接口DAX等),價(jià)格低廉等諸多優(yōu)點(diǎn),特別適用于音頻處理。其24位的處理精度配合20位的A/D(PCM1800)和24位的D/A?PCM1744?使得整個(gè)系統具有很高的動(dòng)態(tài)范圍(96dB以上)。它高達100MIPS的運算速度保證了算法處理的實(shí)時(shí)性。其增強型串行音頻接口ESAI可以很方便地與音頻A/D、D/A直接通過(guò)I2S協(xié)議進(jìn)行連接。通過(guò)8bit的并行主機接口HI08可以方便地與負責鍵盤(pán)控制和LED顯示的單片機89C51進(jìn)行通信。
FLASH選用SST公司的39LV010?其存儲容量為128k8bit,采用3.3V供電,讀寫(xiě)周期為70ns,支持塊擦除與字節編程,是一款高性?xún)r(jià)比存儲芯片。
DSP與外部FLASH的連接示意圖如圖2所示。圖中,DSP的AA1腳和FLASH的片選信號腳CE相連。
DSP56362的4個(gè)地址屬性寄存器AAR[3~0]是24位讀寫(xiě)寄存器,它們的值可用于控制DSP芯片的AA[3~0]引腳的狀態(tài),當某個(gè)AAR寄存器中的基址與外部訪(fǎng)問(wèn)指令存取范圍相匹配時(shí),由這個(gè)AAR定義的相應地址空間(X數據、Y數據或程序)將被相應的AA線(xiàn)選通。在本系統中,正是把DSP的AA1作為FLASH的片選線(xiàn)。AA1腳相應的AAR1寄存器的值設為0xD00811H,當訪(fǎng)問(wèn)地址的高8位為11010000時(shí),外部FLASH被選通。
3?。模樱校担叮常叮驳囊龑н^(guò)程
在DSP56362內部的0xFF0000H-0xFF00BFH地址范圍內有Motorola定制的24位192字的Bootstrap ROM。該ROM內的Bootstrap引導程序可以通過(guò)用戶(hù)設置的DSP引導模式信號線(xiàn),將用戶(hù)程序從外部的8位EPROM、EEPROM、FLASH、 SHI接口或者HDI接口引導到DSP內部的高速RAM中全速運行。
當DSP56362硬件復位后,它將首先采樣外部的MODA、MODB、MODC和MODD信號線(xiàn),并將它們的狀態(tài)寫(xiě)入工作模式寄存器OMR?Operating Mode Reg-ister?的MA、MB、MC和MD位,然后使程序指針指向0xFF0000H去執行Bootstrap引導程序,Bootstrap引導程序通過(guò)對OMR的MA、MB、MC和MD位進(jìn)行判斷來(lái)決定選擇哪種引導模式。主要的引導模式如表1所列。
表1 DSP56362 Bootstrap的引導模式
MODD | MODC | MODB | MODA | 描 述 |
0 | 0 | 0 | 1 | 從字節存儲器引導 |
0 | 0 | 1 | 0 | 跳轉到程序ROM起始地址 |
0 | 1 | 0 | 1 | 從串行主機接口SHI引導(SPI從模式) |
0 | 1 | 1 | 0 | 從串行主機接口SHI引導(I2C從模式,時(shí)鐘靜止使能) |
0 | 1 | 1 | 1 | 從串行主機接口SHI引導(I2C從模式,時(shí)鐘靜止關(guān)閉) |
1 | 0 | 0 | 1 | 內部測試保留 |
1 | 1 | 0 | 0 | 從并行主機接口HDI08引導(ISA模式) |
1 | 1 | 0 | 1 | 從并行主機接口HDI08引導(HC11非復用模式) |
1 | 1 | 1 | 0 | 從并行主機接口HDI08引導(8051復用總線(xiàn)模式) |
1 | 1 | 1 | 1 | 從并行主機接口HDI08引導(68302總線(xiàn)模式) |
在本系統中,由于程序保存在外部的FLASH里,所以采用的引導模式為第一種?即從字節存儲器引導。在這種模式下?Bootstrap程序將從地址0xD00000H處開(kāi)始加載外部數據,并采用以下數據格式從外部接口下載用戶(hù)的系統程序:
(1) 最開(kāi)始的3個(gè)字節用于定義系統程序的總字數(24位)。
(2) 接著(zhù)的3個(gè)字節用于定義系統程序下載到DSP56362程序存儲器的目的地址。
(3) 其余是用戶(hù)的系統程序(每個(gè)24位的字由三個(gè)字節組成),這些程序將存儲在DSP程序存儲器內連續的地址空間里。
Bootstrap引導程序要求系統程序在外部FLASH中以地位字節(LSB)在前的順序排列每個(gè)24位字的3個(gè)字節。DSP的引導程序一旦完成數據的下載,將馬上跳轉到內部程序存儲器的起始目的地址開(kāi)始運行用戶(hù)的系統程序。
4 雙引導裝載方法
4.1 DSP56362的片內內存分配
DSP56362采用增強型哈佛結構,片內空間可分為程序空間、X數據空間、Y數據空間,每個(gè)空間都有一套獨立的24位地址總線(xiàn)和數據總線(xiàn)。在缺省情況下,DSP片內的RAM分配情況為:3kB程序RAM、5.5kB X數據RAM和5.5kB Y數據RAM。通過(guò)設置內存切換模式(MS=1)可以將2kB的Y數據RAM映射到程序RAM中,此時(shí)的片內RAM分配為:5kB程序RAM、5.5kB X數據RAM和3.5kB Y數據RAM??紤]到本系統對程序空間的需求量較大,而數據RAM相對較多,且系統對內部數據RAM的需求并不是很大,因此,將DSP設置成內存切換模式比較好。DSP56362在內存切換模式下(MS=1)的內存映像圖如圖3所示。
4.2 直接使用Bootstrap引導程序的問(wèn)題
DSP的內存切換模式需要通過(guò)軟件指令對OMR寄存器進(jìn)行設置來(lái)實(shí)現。由于只有在該指令執行后才能生效,這樣就產(chǎn)生了一個(gè)矛盾。因為若在系統程序開(kāi)始時(shí)將DSP設置為內存切換模式,那么,往往希望DSP能裝載5kB的程序指令,但是,DSP的Bootstrap引導程序是在系統復位后立即執行的,此時(shí)DSP處于缺?。ǎ停樱剑埃顟B(tài),程序RAM只有3kB,如果此時(shí)外部的指令代碼的大小超過(guò)了這個(gè)限制,引導程序就不能把它們加載進(jìn)去,而當這條設置指令生效時(shí),雖然DSP的程序空間又增加了2kB,但是引導程序已經(jīng)結束,因而這2kB的程序空間實(shí)際上沒(méi)有被利用。
另外,從DSP的Bootstrap程序流程可以看出,這個(gè)引導程序只能將系統的程序代碼數據加載到DSP內部的程序RAM,而不能將數據加載到DSP內部的X數據RAM、Y數據RAM,這樣,那些需要在數據區內定義常數的程序將無(wú)法正常運行。
4.3 雙引導模式
為了解決以上問(wèn)題,本文提出了一種雙引導模式。具體思路是:在系統程序的開(kāi)始處,設計一個(gè)用戶(hù)自己的引導模塊,用這個(gè)模塊先對DSP內部的OMR寄存器進(jìn)行相應的內存切換設置,以使DSP內部的程序RAM擴大為5kB。然后參照DSP的Boot-strap引導程序分別對系統的X、Y及P區的數據進(jìn)行加載。同時(shí)在將程序燒錄到FLASH時(shí)采用地址隔離的方式將引導模塊與系統程序分開(kāi)存放,引導模塊作為一段獨立的程序放在首地址為0xD00000H的存儲區。于是,對于DSP的Bootstrap引導程序來(lái)說(shuō),它需要引導的不是整個(gè)系統程序,而僅僅是這個(gè)引導模塊,另外加載完這個(gè)模塊后就立即跳轉到內部程序RAM中執行,此時(shí)引導模塊已獲得CPU控制權,它在完成內存切換后將繼續引導系統程序的其他部分。采用這種兩次引導的方法,不但使X、Y區的數據可以按照程序的要求進(jìn)行初始化,而且DSP的程序指令空間可以預先設置成5kB,從而非常巧妙地達到了系統的要求。該雙引導模式的引導模塊程序流程如圖4所示。
5?。疲粒蹋樱鹊牟脸妥x寫(xiě)
為了使系統能夠脫機運行,應當把系統程序燒錄到外部FLASH中去。除了可以用專(zhuān)用的編程器把代碼燒入FLASH中外,還可以用軟件編程的方法由DSP來(lái)實(shí)現同樣的功能。本系統正是采用這種軟件編程的方法實(shí)現對FLASH的擦除和讀寫(xiě)。
5.1 地址映射
利用DSP擦除和讀寫(xiě)FLASH必然會(huì )牽涉到FLASH中的地址在DSP中的映射方式。DSP56362的內存映像圖已在圖3中給出。本系統采用的是128kB的FLASH,其地址范圍為:0x000000H~0x1FFFFH。假設FLASH的起始地址0x0000H和DSP的起始地址0x000000H重合,那么FLASH中只有對應于DSP外部空間的那部分地址空間才是DSP可見(jiàn)的。為了使DSP能夠訪(fǎng)問(wèn)全部的外部FLASH空間,設計時(shí)必須進(jìn)行地址重映射。
本系統實(shí)際用到的FLASH的存儲容量不足64kB,也就是說(shuō),當訪(fǎng)問(wèn)外部FLASH時(shí),真正起作用的地址線(xiàn)是A0~A15,而高位地址線(xiàn)A23~A16可以為任意值。因此,可以考慮給訪(fǎng)問(wèn)地址加一個(gè)偏移量0xD00000H,以將FLASH的地址空間映射到DSP內部X數據RAM中,映射后的地址范圍是:0xD00000H~0xD0FFFFH。重映射后的FLASH地址空間落在X數據RAM的外部保留區內,這在DSP中是可見(jiàn)的。
5.2 擦除和讀寫(xiě)過(guò)程
在DSP將數據寫(xiě)入FLASH之前,先要刪除數據所在塊,然后才能重新寫(xiě)入。在擦除和寫(xiě)操作之前都要執行相應的命令字序列,即在指定的FLASH地址處寫(xiě)入指定的指令代碼,而讀操作則可以直接進(jìn)行。FLASH的擦除和寫(xiě)入流程圖分別如圖5、圖6所示。在本系統中,由于采用了雙引導模式,所以首先要將引導程序寫(xiě)入FLASH,然后再分別將用戶(hù)程序的P區數據、X區數據、Y區數據寫(xiě)入FLASH。
在利用DSP軟件編程進(jìn)行燒錄時(shí),可以從目標文件中提取出將要寫(xiě)入FLASH的數據,然后將這些數據打包成一個(gè)asm文件,再在燒錄程序中將這個(gè)asm文件包含進(jìn)來(lái)。接著(zhù)對燒錄程序進(jìn)行編譯、鏈接,以產(chǎn)生一個(gè)目標文件。最后,通過(guò)JTAG口將目標文件下載到DSP中運行,這樣,DSP就會(huì )通過(guò)其外部數據線(xiàn)將打包好的asm文件中的數據寫(xiě)入FLASH。在本系統中,引導程序和用戶(hù)程序將分4次燒入FLASH?為此要分別將引導程序、用戶(hù)程序P區數據、用戶(hù)程序X區數據、用戶(hù)程序Y區數據打包成asm文件。打包一個(gè)asm文件的具體步驟如下:
(1)調用MOTOROLA公司提供的ASM56300和DSPLNK程序對源文件進(jìn)行編譯、鏈接,以產(chǎn)生一個(gè)cld格式的目標文件。
(2)調用MOTOROLA公司提供的SREC程序將cld格式的目標文件轉換成MOTOROLA公司的S-RECORD文件格式,可將目標文件中的P區數據、X區數據、Y區數據提取出來(lái)并生成3個(gè)文件,其后綴分別為p、x、y。
(3)調用Srec2bin程序將S-RECORD格式的文件轉換成BINARY格式的文件。
(4)調用Bin2asm程序將BINARY格式的文件轉換成asm文件。這個(gè)asm文件由一系列的數據定義指令組成,定義的數據依次為系統程序總字節數、系統程序起始地址、系統程序對應的十六進(jìn)制操作碼,其數據結構如圖7所示。
為了驗證上面方法是否能將引導程序和用戶(hù)程序的各部分代碼成功寫(xiě)入到FLASH中,筆者編寫(xiě)了一個(gè)測試程序作為用戶(hù)程序,該測試程序的功能是將AD輸入的音頻信號不經(jīng)任何處理直接輸出。實(shí)驗證明:系統脫機運行時(shí)能夠正確地運行測試程序,從而說(shuō)明了系統引導裝載和FLASH燒錄的成功。
6 結束語(yǔ)
采用雙引導裝載方式可以克服Bootstrap引導程序不能加載X區數據和Y區數據的缺點(diǎn),還可以在系統程序運行前將DSP設置為內存切換模式,同時(shí),采用軟件編程方法可以在沒(méi)有專(zhuān)用編程器的條件下,方便、可靠地實(shí)現對FLASH的擦除和讀寫(xiě)。該方案具有一定的實(shí)用性和參考價(jià)值,也能夠用于其它DSP系統。
評論