TMS320VC5509在線(xiàn)燒寫(xiě)Flash并自舉啟動(dòng)方法研究
摘 要:為了解決TMS320VC55X系列DSP系統程序代碼的保存問(wèn)題,設計了一種利用JTAG接口,在線(xiàn)燒寫(xiě)Flash并實(shí)現自舉啟動(dòng)的方法。這種在線(xiàn)編程的方法利用并行外部存儲器加載(EMIF)接口將TMS320VC5509和Flash芯片相連接,通過(guò)搬移程序將應用程序的已初始化段按照C55X系列DSP引導表格式燒寫(xiě)進(jìn)外部擴展的Flash存儲器中,從而實(shí)現自舉啟動(dòng)。該方法為DSP系統的軟件維護和升級帶來(lái)了方便,具有實(shí)際的應用價(jià)值。
關(guān)鍵詞: TMS320VC5509;自舉啟動(dòng);在線(xiàn)編程;Flash
隨著(zhù)數字信號處理技術(shù)的快速發(fā)展,DSP被廣泛應用于各種數字信號處理系統中。最終開(kāi)發(fā)的系統若要脫離仿真器運行,必須將程序代碼存儲在非易失性存儲器中。Flash是一種可在線(xiàn)進(jìn)行電擦寫(xiě)而掉電后信息又不丟失的存儲器,它具有功耗低、容量大、擦寫(xiě)速度快等特點(diǎn)。如何將程序燒寫(xiě)進(jìn)Flash,并在上電時(shí)加載到DSP內部的RAM中,是Flash在DSP系統應用中的兩個(gè)基本問(wèn)題[1]。本文基于TI公司的TMS320VC5509A和AMD公司的AM29LV800開(kāi)發(fā)系統,詳細闡述了在線(xiàn)燒寫(xiě)Flash并實(shí)現自舉啟動(dòng)的方法。
1 硬件電路設計
圖1為T(mén)MS320VC5509A與AM29LV800的連接示意圖[2],Flash擴展在CE1空間,起始地址為200000。由于TMS320VC5509A只有14根地址線(xiàn)A0~A13,又因為Flash作為數據存儲空間使用時(shí)的地址編碼采用字尋址方式,則DSP的A0信號無(wú)效,所以AM29LV800芯片的低13位地址線(xiàn)A0~A12連接TMS320VC5509A的地址線(xiàn)A1~A13,高6位地址線(xiàn)A13~A18由緩沖串口來(lái)擴展。AM29LV800是低功耗Flash,工作在2.7 V~3.6 V電壓下,一般存儲數據可以保存100年以上,可以重復編程次數高達10萬(wàn)次。A18~A0為外部地址管腳,DQ0~DQ15為16條數據線(xiàn),CE為片選控制管腳,OE為輸出控制管腳,WE為寫(xiě)入控制管腳。
2 自啟動(dòng)過(guò)程分析及啟動(dòng)表結構
DSP系統的bootloader是指在系統上電時(shí)將一段存儲在外部非易失性存儲器中的程序搬移到DSP片內或片外擴展的高速RAM中并執行的代碼。Bootloader程序永久性地存儲在DSP以FF8000H開(kāi)始的ROM中,DSP系統在復位后PC=FF8000H,即從Bootloader程序首地址開(kāi)始執行。
TMS320VC5509 DSP的Bootloader有多種加載方式[3],如表1所示,設置DSP的GPIO0-GPIO3,DSP在復位時(shí)讀取這4個(gè)引腳上的狀態(tài)以確定所使用的啟動(dòng)模式。本文使用16-bit EMIF加載方式,雖然連線(xiàn)復雜,需要考慮并行非易失存儲器Flash與EMIF接口的匹配關(guān)系,但是它的優(yōu)點(diǎn)很多:不需要外部時(shí)鐘驅動(dòng),非易失存儲器種類(lèi)多樣,容量較大,除了存儲下載表之外,還可存儲系統需要保存的關(guān)鍵數據,以便在掉電時(shí)保存信息。
在這些加載模式下,下載程序之前先要生成一張載入表,即引導表。引導表的結構如圖2所示,引導表攜帶的信息有代碼段和數據段信息,向DSP下載程序的入口點(diǎn)地址、寄存器配置信息和可編程延時(shí)信息。
讀引導表可知以下信息:程序入口地址是引導表加載結束后用戶(hù)程序開(kāi)始執行的地址,也就是用戶(hù)程序生成的map文件中顯示的入口地址;需配置寄存器數表明后面有多少個(gè)需要配置的寄存器;當延時(shí)標志為0xFFFF時(shí),執行延時(shí),延時(shí)長(cháng)度決定了在寄存器配置后延時(shí)多少個(gè)CPU周期才進(jìn)行下一個(gè)動(dòng)作;段字節數、段起始地址和數據表示用戶(hù)程序中定義的各個(gè)段的內容;引導表以32個(gè)0為結束標志。
生成引導表的方法:通過(guò)在DOS環(huán)境下使用hex55.exe轉換工具。在轉換操作之前, 先把用戶(hù)程序生成的
.out文件、包含轉換選項的CMD文件hex5509.cmd和轉換工具hex55.exe放在同一個(gè)文件夾里,在DOS方式下先將路徑修改為文件所在的位置,然后在此路徑下運行命令hex55 hex5509.cmd,即可生成想要的.hex文件。
在轉換時(shí),提供引導表的相關(guān)配置信息的CMD文件這里被命名為hex5509.cmd,文中用到的hex5509.cmd的內容為:
-boot /*創(chuàng )建一個(gè)引導表*/
-v5510:2 /*選擇合適的DSP引導表格式*/
LED.out /*輸入文件*/
-o FLASH.hex /*輸出文件*/
-a /*輸出格式為straight ASCII*/
-parallel16 /*16位并行異步加載模式*/
-memwidth 16
-romwidth 16
-e 0x000004d4 /*程序的入口地址*/
-map LED.map /*輸出map文件*/
-delay 0xffff /*延時(shí)*/
3 Flash燒寫(xiě)
Flash的讀操作與傳統EPROM讀操作相同。由于芯片使用軟件保護模式進(jìn)行操作,用戶(hù)編程時(shí),只要向指定的地址寫(xiě)入指定的序列,就可以啟動(dòng)Flash芯片內部的寫(xiě)狀態(tài)機,完成指定的操作。表2為Flash的操作命令說(shuō)明(對芯片的擦除和編程都是按照字進(jìn)行的),表中所有的數據都是十六進(jìn)制數。
Flash的正確操作順序:先復位,再擦除,最后編程。按照表2提供的操作命令時(shí)序來(lái)實(shí)現對AM29LV800的擦除和編程,PA為編程地址,PD為編程數據。Flash擴展在CE1空間,起始地址是200000,所以操作時(shí)所有地址必須加上200000。例如燒寫(xiě)工程中擦除部分命令為:
deminaddr = (int *)CESECT1;
addbias = 0x0555;
*(deminaddr+addbias) = 0x00aa;
addbias = 0x02aa;
*(deminaddr+addbias) = 0x0055;
addbias = 0x0555;
*(deminaddr+addbias) = 0x0080;
addbias = 0x0555;
*(deminaddr+addbias) = 0x00aa;
addbias = 0x02aa;
*(deminaddr+addbias) = 0x0055;
addbias = 0x0555;
*(deminaddr+addbias) = 0x0010;
delay(100)
芯片擦除需要占用6個(gè)總線(xiàn)周期,而芯片編程需要4個(gè)總線(xiàn)周期,依照表3的數據,在每個(gè)總線(xiàn)周期對相應地址寫(xiě)入命令字就可以了。用戶(hù)一般都是對芯片進(jìn)行寫(xiě)操作,寫(xiě)操作只能使‘1’變‘0’,而擦除只能使‘0’變?yōu)椤?’。圖3為擦除和編程命令波形圖,清楚地顯示了擦除和編程操作過(guò)程。
判斷編程或擦除的結束是當把編程或擦除的命令字按照其時(shí)序寫(xiě)入Flash 時(shí),在寫(xiě)編程命令時(shí)序或擦除命令時(shí)序的最后一個(gè)WE上升沿到來(lái)之后,AM29LV800會(huì )自動(dòng)運行一個(gè)嵌入在Flash內部的算法來(lái)判斷編程或擦除操作是否結束。采用觸發(fā)位校驗的方法,檢測數據切換位DQ6(Toggle Bit)的狀態(tài),連續讀數據會(huì )使DQ6的值在‘0’和‘1’之間來(lái)回切換,當編程或擦除結束時(shí),DQ6就停止值的切換[4]。因此,可以通過(guò)連續兩次讀DQ6的值來(lái)判斷編程或擦除是否結束,當兩次讀得的值相同時(shí),說(shuō)明編程或擦除結束,否則沒(méi)有。觸發(fā)位檢測算法流程圖如圖4所示。
4 程序的燒寫(xiě)實(shí)現
本系統在CCS仿真環(huán)境下對Flash進(jìn)行在線(xiàn)編程。先建立一個(gè)Flash的燒寫(xiě)工程,并在工程中將要燒寫(xiě)進(jìn)Flash的引導表文件通過(guò)CCS的LOAD DATA功能直接加載進(jìn)DSP的內存,根據加載的首地址和數據長(cháng)度,在仿真環(huán)境下燒寫(xiě)進(jìn)Flash中。值得注意的是,程序加載的內存空間不能與Flash的燒寫(xiě)程序重疊,否則燒寫(xiě)失敗。燒寫(xiě)完成以后,關(guān)掉電源,拔掉仿真器電纜,讓仿真器和計算機脫開(kāi):重新打開(kāi)電源,實(shí)驗板上指示燈閃爍,表明燒寫(xiě)進(jìn)Flash程序正在運行,自啟動(dòng)成功。
需要補充的是,經(jīng)過(guò)hex55.exe文件轉化后的hex文件的引導表文件不能直接導入CCS中,CCS只支持將特別規定的DAT格式文件通過(guò)LOAD DATA導入內存,所以在導入之前必須先將引導表轉化成DAT格式文件,這個(gè)工作可以由VC編寫(xiě)一個(gè)簡(jiǎn)單的C語(yǔ)言轉化程序實(shí)現。
本文闡述了一種針對TMS320VC5509A DSP簡(jiǎn)單有效的Flash燒寫(xiě)方法,并提出了程序自舉引導的實(shí)現方法??梢杂行У亟鉀Q程序代碼存儲問(wèn)題和DSP脫機自舉問(wèn)題,不僅提高了調試效率,也增加了系統的靈活性。本文討論的引導方法包括硬件設計及相關(guān)程序,已經(jīng)在筆者的實(shí)際開(kāi)發(fā)語(yǔ)音項目中使用并成功運行。
評論