1 引言
隨著數(shù)字信號處理技術(shù)的快速發(fā)展,,DSP(數(shù)字信號處理器)越來越廣泛地應(yīng)用于各種數(shù)字信號處理系統(tǒng)中,。最終開發(fā)的系統(tǒng)要想脫離仿真器運(yùn)行,,必須將程序代碼存儲在非易失性存儲器中,。Flash存儲器以其大容量和可在線編程等特點(diǎn)已成為DSP系統(tǒng)的一個(gè)基本配置,。如何將程序燒寫進(jìn)Flash,,并在上電時(shí)加載到DSP內(nèi)部的RAM是Flash在DSP系統(tǒng)中應(yīng)用的兩個(gè)基本技術(shù)問題。本文以基于TI公司的TMS320VC5509A和Atmel公司的AT49LV1024 Flash開發(fā)的系統(tǒng)為背景,,詳細(xì)介紹了系統(tǒng)引導(dǎo)相關(guān)的硬件設(shè)計(jì),、燒寫軟件設(shè)計(jì)以及自舉引導(dǎo)和二次引導(dǎo)等實(shí)現(xiàn)方法。
2 TMS320VC5509A的自舉引導(dǎo)
2.1 TMS320VC5509A的自舉模式配置
TMS320VC5509A每次上電復(fù)位后,,在執(zhí)行完一系列初始化(配置堆棧寄存器,、關(guān)閉中斷、程序臨時(shí)入口,、符號擴(kuò)展,、兼容性配置)工作后,根據(jù)預(yù)先配置的自舉模式,,通過固化在ROM內(nèi)的Bootloader程序進(jìn)行程序引導(dǎo),。VC5509A的引導(dǎo)模式選擇是通過4個(gè)模式選擇引腳BOOTM[0:3]配置完成的。 BOOTM0~3引腳分別與GPIO1,、2,、3,、0相連。在本系統(tǒng)設(shè)計(jì)中,,采用EMIF(外部存儲接口)并行引導(dǎo)模式(16位數(shù)據(jù)寬度),,只需將BOOTM[3:0]設(shè)置成1011即可。
EMIF為外部存儲接口,,通過EMIF接口可以靈活地和各種同步或異步存儲器件無縫連接,。通過EMIF可以將VC5509A的存儲空間擴(kuò)展到128 Mbit(SDRAM),存儲空間共被分為CE0~CE3四個(gè)段,,每段占用不同的地址,。在EMIF的并行引導(dǎo)模式中,ROM固化的Bootloader程序是以0x200000為首地址開始加載程序,。0x200000即為CE1空間的首地址,,所以Flash必須接在DSP的CE1空間上。在加載時(shí),。EMIF的CE1空間已經(jīng)默認(rèn)配置成異步靜態(tài)隨機(jī)存儲器(SRAM)接口,,并且在時(shí)序上采用了最差情況設(shè)置(即最慢訪問速度),充分保證了時(shí)間裕量,,使得程序代碼順利地加載到DSP的內(nèi)存中,。
2.2 TMS320VC5509A的引導(dǎo)表
Bootloader在引導(dǎo)程序時(shí),程序代碼是以引導(dǎo)表格形式加載的,。TMS320VC55x的引導(dǎo)表結(jié)構(gòu)中包括了用戶程序的代碼段和數(shù)據(jù)段以及相應(yīng)段在內(nèi)存中的指定存儲位置,,此外還包括了程序人口地址、部分寄存器的配置值,、可編程延時(shí)時(shí)間等信息,。TMS320VC55x系列DSP的引導(dǎo)表結(jié)構(gòu)如表1所示。
其中,,程序入口地址是引導(dǎo)表加載結(jié)束后,,用戶程序開始執(zhí)行的地址;寄存器配置數(shù)目決定了后面有多少個(gè)寄存器需要配置,;只有當(dāng)延時(shí)標(biāo)志為0xFFFF時(shí),,延時(shí)才被執(zhí)行;延時(shí)長度決定了在寄存器配置后延時(shí)多少個(gè)CPU周期才進(jìn)行下一個(gè)動(dòng)作,;段長度,、段起始地址和數(shù)據(jù)則為用戶程序中定義的各個(gè)段的內(nèi)容,并且可以重復(fù)添加,;最后以0x00000000(32個(gè)0)作為引導(dǎo)表的結(jié)束標(biāo)志,。
若要生成引導(dǎo)表,可用CCS最終編譯生成的,,out文件通過CCS自帶的hex55.exe轉(zhuǎn)換程序得到,。將hex55.exe,、.out文件、.0cmd文件放在同一個(gè)文件夾中,,通過DOS命令調(diào)用hex55.exe,。即可完成.out文件到hex格式的引導(dǎo)表文件的轉(zhuǎn)化。.CMD文件用于提供引導(dǎo)表的相關(guān)配置信息,,以下為一個(gè).CMD文件的實(shí)例:
3 Flash的燒寫和自舉的實(shí)現(xiàn)
3.1 TMS320VC5509A和AT49LV1024的硬件沒計(jì)
AT49LV1024是Atmel公司一款3 V供電系統(tǒng)的Flash存儲器,16位位寬,,容量為64 KB(16條地址線),。VC5509A(PGE封裝)只有14條地址線,只能尋址16 KB的SRAM空間,。要想尋址64 KB地址空間的話,,F(xiàn)lash地址線的高兩位則需要通過其他I/O線控制。在本系統(tǒng)中通過GPIO4和GPIO6與Flash的高兩位地址相連實(shí)現(xiàn),,其連接示意圖如圖1所示,。但是在Bootloader自舉引導(dǎo)程序時(shí),并不能控制GPIO引腳,,也就是只能引導(dǎo)最大16 KB的程序,。對于大于16 KB的程序,則需要進(jìn)行二次引導(dǎo),。
3.2 二次引導(dǎo)技術(shù)
所謂二次引導(dǎo),,就是通過DSP內(nèi)部ROM固化的Bootloader引導(dǎo)用戶自行編寫一個(gè)引導(dǎo)程序,其功能和ROM固化的Bootloader相同,,再通過此引導(dǎo)程序加載系統(tǒng)最終運(yùn)行的程序代碼,,并在加載結(jié)束后,把PC值置為新的程序入口地址,。在用戶編寫的引導(dǎo)程序中控制GIPO4和GPIO6,,即可實(shí)現(xiàn)64 KB地址空間尋址。具體實(shí)現(xiàn)框圖如圖2所示,。
3.3 數(shù)據(jù)燒寫程序設(shè)計(jì)
Flash的數(shù)據(jù)可直接讀取,,但對Flash的編程和擦除操作則需要通過一系列命令才能進(jìn)行。AT49LV1024的寫操作只能將1變成0,,而0變成1必須通過擦除操作進(jìn)行,。所以每次寫Flash之前必須進(jìn)行片擦除,使存儲單元值變成0xFFFF,,才能進(jìn)行編程,。
擦除命令需要6個(gè)周期,操作命令如表2所示,。
編程命令需要4個(gè)周期,,操作命令如表3所示,。
編程和擦除操作都需要一定周期的時(shí)間(AT49LV1024的單字編程時(shí)間是20μ8,整片擦除時(shí)間是10 s),,用戶可以通過查詢標(biāo)志數(shù)據(jù)線DQ6和DQ7確定編程或擦除是否完畢,。當(dāng)器件正處于編程或擦除狀態(tài)時(shí),連續(xù)讀任意單元的值,,DQ6的值將一直在0,、1之間交替變化,當(dāng)編程或擦除結(jié)束時(shí),,讀DQ6則得到一個(gè)恒定值,。本文即通過此方法判斷操作是否結(jié)束。
根據(jù)Flash的編程和擦除命令,,編寫了相應(yīng)的C語言程序,,其中SetGPIO46Addr(Addr)子程序的作用是根據(jù)所傳遞的Addr值配置相應(yīng)的GPIO4和GPIO6即高兩位地址的值。
3.3.1 片擦除程序
3.3.2 單字編程程序
3.3.3 編程和擦除結(jié)束確認(rèn)程序
3.4 程序的燒寫實(shí)現(xiàn)
本系統(tǒng)在CCS仿真環(huán)境下對Flash進(jìn)行在線編程,。先建立一個(gè)Flash的燒寫工程,,并在工程中將要燒寫進(jìn)Flash的引導(dǎo)表文件通過CCS的LOADDATA功能直接加載進(jìn)DSP的內(nèi)存,根據(jù)加載的首地址和數(shù)據(jù)長度,,在仿真環(huán)境下燒進(jìn)Flash中,。值得注意的是,程序加載的內(nèi)存空間不能與Flash的燒寫程序重疊,,否則燒寫失敗,。
需要補(bǔ)充的是,經(jīng)hex55.exe文件轉(zhuǎn)化后的hex格式的引導(dǎo)表文件是不能直接導(dǎo)入CCS中的,。CCS只支持將特別規(guī)定的DAT格式文件通過LOADDATA導(dǎo)入內(nèi)存,,所以在導(dǎo)入之前必須先將引導(dǎo)表轉(zhuǎn)化成DAT格式文件,這個(gè)工作可以由VC編寫一個(gè)簡單的C語言轉(zhuǎn)化程序?qū)崿F(xiàn),。
4 結(jié)束語
本文闡述了一種針對TMS320VC55x系列DSP簡單有效的Flash燒寫方法,,并提出了程序自舉引導(dǎo)的實(shí)現(xiàn)方法,包括大程序二次引導(dǎo)的實(shí)現(xiàn)方法,。本文討論的引導(dǎo)方法包括硬件設(shè)計(jì)及相關(guān)程序,,已在筆者的實(shí)際開發(fā)CMOS圖像采集項(xiàng)目中使用并成功運(yùn)行。