安景新,趙昶宇
(1.海軍駐天津八三五七所軍事代表室,天津 300308;2.天津津航計算技術研究所,天津 300308)
基于PCI總線的DSP6713在線燒寫方法研究
安景新1,趙昶宇2
(1.海軍駐天津八三五七所軍事代表室,天津 300308;2.天津津航計算技術研究所,天津 300308)
基于DSP的應用程序的傳統升級方法是將控制器拆卸下來,然后利用仿真器和JTAG完成程序的燒寫工作,該方法既費時又費力。為了提高升級程序的效率,降低設備維護的成本,以DSP6713為例,提出了一種在線燒寫應用程序的方法,闡述了在線燒寫的原理,介紹了上位機端軟件、DSP端軟件和bootloader程序的設計思想,為DSP技術開發和維護人員提供了一種方便、快捷的升級程序方法。
PCI總線;DSP6713;在線燒寫;bootloader
在線燒寫技術,即在應用編程(IAP,In-Application Programming),是在系統運行的過程中的動態編程,從系統中獲取新代碼并對自身進行重新編程,用程序來改變程序的一種方法。該方法不需要借助外部手段,也不用進行任何機械操作,即可完成程序執行代碼的動態修改。通常將芯片的內部存儲區分為3個部分,即引導程序區、運行程序區和下載區。芯片接收到下載命令后,進入引導區運行引導程序,在引導程序下將用戶應用程序代碼內容下載到下載區,下載完畢并校驗通過后再將下載區的內容復制到運程程序區,運行復位程序,完成Flash的在線燒寫。
本文以TMS320C6713浮點DSP為例,提出一種基于PCI總線的DSP在線燒寫的方法,避免了在升級程序時因拆卸控制器帶來的各種問題,降低了設備的維護成本。
TMS320C6713沒有自帶FLASH存儲器,應用程序要燒寫到外擴FLASH中,由外擴FLASH引導自啟動。由于FLASH讀取速度較RAM相對比較慢,因此,6713需要在上電復位后將FLASH中的應用程序代碼引導到內部RAM中運行。
具體流程為: FLASH起始地址開始的1 Kbyte的內容存放6713的啟動程序bootloader;上電復位后,6713會由DMA或EDMA自動將FLASH起始地址開始的1 Kbyte的內容搬移到內部RAM中,開始執行bootloader程序。bootloader程序的功能是完成FLASH中應用程序到6713內部RAM的復制工作。當復制工作完成后,6713會調用c_int00()復位中斷去執行,開始執行應用程序,從而完成了6713的在線燒寫和自啟動工作。
TMS320C6713的在線燒寫軟件部分主要是由上位機端軟件和DSP端軟件構成。上位機端軟件主要完成讀取可執行代碼文件,進行格式轉換后將該文件通過PCI總線發送給DSP端,等待DSP端的響應;DSP端軟件主要接收上位機端軟件發送的可執行代碼文件,并將該文件立即燒寫到FLASH中,完成燒寫過程。此外,DSP端還需實現bootloader程序的功能。
基于TMS320C6713開發的應用程序經過CCS編譯生成的目標文件類型為.out文件,而TMS320C6713無法識別該文件類型,需要通過hex6x.exe工具將.out文件轉換成TMS320C6713可以識別的十六進制文件類型.hex文件。
2.1 上位機端軟件設計
上位機端軟件首先讀取.hex文件,通過解析hex文件內容,將其拆分為多條數據幀結構。上位機端軟件與DSP端軟件通過PCI總線進行通訊。
上位機端軟件向DSP端軟件發送的每幀數據都帶有校驗和,當DSP端程序接收到該幀數據后,通過校驗和對接收數據進行確認。確認完畢后,DSP端軟件將確認幀發送給上位機端軟件,上位機端軟件收到DSP端發送的確認幀后,再向DSP端軟件發送下一幀數據;當上位機軟件將全部數據都發送完畢后,上位機端軟件向DSP端軟件發送數據的總長度,DSP端軟件將該總長度與接收到的數據長度進行比較,將結果發送給上位機端軟件,完成整個數據的總校驗。
2.2 DSP端軟件設計
為了保證接收數據的準確性和完整性,DSP端軟件在接收數據的過程中,不執行對RAM或FLASH操作的相關代碼;同時,關閉其他的外部中斷,僅響應PCI中斷,保證了數據接收的實時性。此外,DSP端軟件將接收到的數據存儲在外擴的FLASH中,等到接收完全部數據后,再進行程序的燒寫,防止在接收數據過程中出現意外,進而導致系統程序不能正常工作。
FLASH的燒寫工作也是DSP端軟件需要實現的重要功能。在擦除或讀寫FLASH之前,必須先執行相應的命令字序列,即在指定的FLASH地址處寫入指定的指令代碼。向FLASH的指定地址中寫入數據,需要4個總線周期。前兩個是解鎖周期,第三個是建立編程命令,最后一個周期完成向編程地址中寫入編程數據。
待寫入的數據為.hex文件內容。
上位機端軟件和DSP端軟件的處理流程如圖1所示。

圖1 上位機端軟件和DSP端軟件的處理示意流程圖
2.3 bootloader程序設計
bootloader程序的主要功能是將應用程序段從FLASH復制到DSP的內部RAM中,再跳轉到程序的入口處開始執行主程序。DSP上電復位后,DMA/EDMA自動拷貝1 KB數據到地址0處,然后從0地址處開始執行引導代碼指令。使用DMA/EDMA可以快速、靈活地實現DSP存儲空間內數據的搬移。數據搬移的源/目的可以是片內存儲器、片內外設或外部器件。
bootloader的示例程序如下:
main()
{
init();//初始化DSP
init_DMA();初始化DMA
*(int*)DMA_OPT=0x29300001;//開始拷貝
while(!((*(int*)DMACIPR)&0x00000001));
*(int*)DMACIPR|=0x00000001;
asm(“NOP 8”);
asm(“MVK.s2 0x00003820,B0”);//跳轉到應用程序代碼
asm(“B.s2 B0”);
asm(“NOP 6”);
}
上述代碼中的0x00003820是DSP程序.map文件中的boot.obj地址。c_int00函數定義為程序代碼入口,c_int00函數在系統復位后首先被執行,引導程序進入main主程序。c_int00函數包含在boot.obj中,boot.obj鏈接在rt s6700.lib運行支持庫內?!癕VK.s2 0x00003820,B0”可實現跳轉到應用程序代碼,開始執行應用程序。
6713在線燒寫分為以下4個步驟:①利用CCS開發工具將要升級的應用程序編譯生成.out文件,利用hex6x.exe工具將.out文件轉換成.hex文件;②利用DSP仿真器將DSP端軟件燒寫完畢,此時DSP具有在PCI總線下燒寫程序的功能;③利用上位機端軟件將被燒寫的應用程序發送到DSP中;④DSP重新上電,即可自動運行新更新的應用程序,完成DSP的在線程序燒寫。
本文研究的基于PCI總線的DSP6713在線燒寫方法和傳統的燒寫程序的方法相比,具有明顯的優勢,極大地降低了軟件維護人員的工作量,提高了軟件升級的質量和效率。該方法已成功應用到某型號DSP控制系統中,經過實際應用證明,軟件燒寫過程快速、穩定、可靠。
該技術的研究使DSP的程序的更新可以脫離仿真器,為程序的更新和程序的遠程維護提供了方便,具有很強的實用性。
[1]劉德生,李杰.基于JTAG的DSP外部Flash在線編程與引導技術[J].電子技術應用,2005(03).
[2]李方慧.TMS320C6000系列DSPs芯片的原理與應用[M].北京:電子工業出版社,2000.
〔編輯:張思楠〕
TP368.1
A
10.15913/j.cnki.kjycx.2017.13.087
2095-6835(2017)13-0087-02