安景新,趙昶宇
(1.海軍駐天津八三五七所軍事代表室,天津 300308;2.天津津航計(jì)算技術(shù)研究所,天津 300308)
基于PCI總線的DSP6713在線燒寫(xiě)方法研究
安景新1,趙昶宇2
(1.海軍駐天津八三五七所軍事代表室,天津 300308;2.天津津航計(jì)算技術(shù)研究所,天津 300308)
基于DSP的應(yīng)用程序的傳統(tǒng)升級(jí)方法是將控制器拆卸下來(lái),然后利用仿真器和JTAG完成程序的燒寫(xiě)工作,該方法既費(fèi)時(shí)又費(fèi)力。為了提高升級(jí)程序的效率,降低設(shè)備維護(hù)的成本,以DSP6713為例,提出了一種在線燒寫(xiě)應(yīng)用程序的方法,闡述了在線燒寫(xiě)的原理,介紹了上位機(jī)端軟件、DSP端軟件和bootloader程序的設(shè)計(jì)思想,為DSP技術(shù)開(kāi)發(fā)和維護(hù)人員提供了一種方便、快捷的升級(jí)程序方法。
PCI總線;DSP6713;在線燒寫(xiě);bootloader
在線燒寫(xiě)技術(shù),即在應(yīng)用編程(IAP,In-Application Programming),是在系統(tǒng)運(yùn)行的過(guò)程中的動(dòng)態(tài)編程,從系統(tǒng)中獲取新代碼并對(duì)自身進(jìn)行重新編程,用程序來(lái)改變程序的一種方法。該方法不需要借助外部手段,也不用進(jìn)行任何機(jī)械操作,即可完成程序執(zhí)行代碼的動(dòng)態(tài)修改。通常將芯片的內(nèi)部存儲(chǔ)區(qū)分為3個(gè)部分,即引導(dǎo)程序區(qū)、運(yùn)行程序區(qū)和下載區(qū)。芯片接收到下載命令后,進(jìn)入引導(dǎo)區(qū)運(yùn)行引導(dǎo)程序,在引導(dǎo)程序下將用戶應(yīng)用程序代碼內(nèi)容下載到下載區(qū),下載完畢并校驗(yàn)通過(guò)后再將下載區(qū)的內(nèi)容復(fù)制到運(yùn)程程序區(qū),運(yùn)行復(fù)位程序,完成Flash的在線燒寫(xiě)。
本文以TMS320C6713浮點(diǎn)DSP為例,提出一種基于PCI總線的DSP在線燒寫(xiě)的方法,避免了在升級(jí)程序時(shí)因拆卸控制器帶來(lái)的各種問(wèn)題,降低了設(shè)備的維護(hù)成本。
TMS320C6713沒(méi)有自帶FLASH存儲(chǔ)器,應(yīng)用程序要燒寫(xiě)到外擴(kuò)FLASH中,由外擴(kuò)FLASH引導(dǎo)自啟動(dòng)。由于FLASH讀取速度較RAM相對(duì)比較慢,因此,6713需要在上電復(fù)位后將FLASH中的應(yīng)用程序代碼引導(dǎo)到內(nèi)部RAM中運(yùn)行。
具體流程為: FLASH起始地址開(kāi)始的1 Kbyte的內(nèi)容存放6713的啟動(dòng)程序bootloader;上電復(fù)位后,6713會(huì)由DMA或EDMA自動(dòng)將FLASH起始地址開(kāi)始的1 Kbyte的內(nèi)容搬移到內(nèi)部RAM中,開(kāi)始執(zhí)行bootloader程序。bootloader程序的功能是完成FLASH中應(yīng)用程序到6713內(nèi)部RAM的復(fù)制工作。當(dāng)復(fù)制工作完成后,6713會(huì)調(diào)用c_int00()復(fù)位中斷去執(zhí)行,開(kāi)始執(zhí)行應(yīng)用程序,從而完成了6713的在線燒寫(xiě)和自啟動(dòng)工作。
TMS320C6713的在線燒寫(xiě)軟件部分主要是由上位機(jī)端軟件和DSP端軟件構(gòu)成。上位機(jī)端軟件主要完成讀取可執(zhí)行代碼文件,進(jìn)行格式轉(zhuǎn)換后將該文件通過(guò)PCI總線發(fā)送給DSP端,等待DSP端的響應(yīng);DSP端軟件主要接收上位機(jī)端軟件發(fā)送的可執(zhí)行代碼文件,并將該文件立即燒寫(xiě)到FLASH中,完成燒寫(xiě)過(guò)程。此外,DSP端還需實(shí)現(xiàn)bootloader程序的功能。
基于TMS320C6713開(kāi)發(fā)的應(yīng)用程序經(jīng)過(guò)CCS編譯生成的目標(biāo)文件類(lèi)型為.out文件,而TMS320C6713無(wú)法識(shí)別該文件類(lèi)型,需要通過(guò)hex6x.exe工具將.out文件轉(zhuǎn)換成TMS320C6713可以識(shí)別的十六進(jìn)制文件類(lèi)型.hex文件。
2.1 上位機(jī)端軟件設(shè)計(jì)
上位機(jī)端軟件首先讀取.hex文件,通過(guò)解析hex文件內(nèi)容,將其拆分為多條數(shù)據(jù)幀結(jié)構(gòu)。上位機(jī)端軟件與DSP端軟件通過(guò)PCI總線進(jìn)行通訊。
上位機(jī)端軟件向DSP端軟件發(fā)送的每幀數(shù)據(jù)都帶有校驗(yàn)和,當(dāng)DSP端程序接收到該幀數(shù)據(jù)后,通過(guò)校驗(yàn)和對(duì)接收數(shù)據(jù)進(jìn)行確認(rèn)。確認(rèn)完畢后,DSP端軟件將確認(rèn)幀發(fā)送給上位機(jī)端軟件,上位機(jī)端軟件收到DSP端發(fā)送的確認(rèn)幀后,再向DSP端軟件發(fā)送下一幀數(shù)據(jù);當(dāng)上位機(jī)軟件將全部數(shù)據(jù)都發(fā)送完畢后,上位機(jī)端軟件向DSP端軟件發(fā)送數(shù)據(jù)的總長(zhǎng)度,DSP端軟件將該總長(zhǎng)度與接收到的數(shù)據(jù)長(zhǎng)度進(jìn)行比較,將結(jié)果發(fā)送給上位機(jī)端軟件,完成整個(gè)數(shù)據(jù)的總校驗(yàn)。
2.2 DSP端軟件設(shè)計(jì)
為了保證接收數(shù)據(jù)的準(zhǔn)確性和完整性,DSP端軟件在接收數(shù)據(jù)的過(guò)程中,不執(zhí)行對(duì)RAM或FLASH操作的相關(guān)代碼;同時(shí),關(guān)閉其他的外部中斷,僅響應(yīng)PCI中斷,保證了數(shù)據(jù)接收的實(shí)時(shí)性。此外,DSP端軟件將接收到的數(shù)據(jù)存儲(chǔ)在外擴(kuò)的FLASH中,等到接收完全部數(shù)據(jù)后,再進(jìn)行程序的燒寫(xiě),防止在接收數(shù)據(jù)過(guò)程中出現(xiàn)意外,進(jìn)而導(dǎo)致系統(tǒng)程序不能正常工作。
FLASH的燒寫(xiě)工作也是DSP端軟件需要實(shí)現(xiàn)的重要功能。在擦除或讀寫(xiě)FLASH之前,必須先執(zhí)行相應(yīng)的命令字序列,即在指定的FLASH地址處寫(xiě)入指定的指令代碼。向FLASH的指定地址中寫(xiě)入數(shù)據(jù),需要4個(gè)總線周期。前兩個(gè)是解鎖周期,第三個(gè)是建立編程命令,最后一個(gè)周期完成向編程地址中寫(xiě)入編程數(shù)據(jù)。
待寫(xiě)入的數(shù)據(jù)為.hex文件內(nèi)容。
上位機(jī)端軟件和DSP端軟件的處理流程如圖1所示。
圖1 上位機(jī)端軟件和DSP端軟件的處理示意流程圖
2.3 bootloader程序設(shè)計(jì)
bootloader程序的主要功能是將應(yīng)用程序段從FLASH復(fù)制到DSP的內(nèi)部RAM中,再跳轉(zhuǎn)到程序的入口處開(kāi)始執(zhí)行主程序。DSP上電復(fù)位后,DMA/EDMA自動(dòng)拷貝1 KB數(shù)據(jù)到地址0處,然后從0地址處開(kāi)始執(zhí)行引導(dǎo)代碼指令。使用DMA/EDMA可以快速、靈活地實(shí)現(xiàn)DSP存儲(chǔ)空間內(nèi)數(shù)據(jù)的搬移。數(shù)據(jù)搬移的源/目的可以是片內(nèi)存儲(chǔ)器、片內(nèi)外設(shè)或外部器件。
bootloader的示例程序如下:
main()
{
init();//初始化DSP
init_DMA();初始化DMA
*(int*)DMA_OPT=0x29300001;//開(kāi)始拷貝
while(!((*(int*)DMACIPR)&0x00000001));
*(int*)DMACIPR|=0x00000001;
asm(“NOP 8”);
asm(“MVK.s2 0x00003820,B0”);//跳轉(zhuǎn)到應(yīng)用程序代碼
asm(“B.s2 B0”);
asm(“NOP 6”);
}
上述代碼中的0x00003820是DSP程序.map文件中的boot.obj地址。c_int00函數(shù)定義為程序代碼入口,c_int00函數(shù)在系統(tǒng)復(fù)位后首先被執(zhí)行,引導(dǎo)程序進(jìn)入main主程序。c_int00函數(shù)包含在boot.obj中,boot.obj鏈接在rt s6700.lib運(yùn)行支持庫(kù)內(nèi)?!癕VK.s2 0x00003820,B0”可實(shí)現(xiàn)跳轉(zhuǎn)到應(yīng)用程序代碼,開(kāi)始執(zhí)行應(yīng)用程序。
6713在線燒寫(xiě)分為以下4個(gè)步驟:①利用CCS開(kāi)發(fā)工具將要升級(jí)的應(yīng)用程序編譯生成.out文件,利用hex6x.exe工具將.out文件轉(zhuǎn)換成.hex文件;②利用DSP仿真器將DSP端軟件燒寫(xiě)完畢,此時(shí)DSP具有在PCI總線下燒寫(xiě)程序的功能;③利用上位機(jī)端軟件將被燒寫(xiě)的應(yīng)用程序發(fā)送到DSP中;④DSP重新上電,即可自動(dòng)運(yùn)行新更新的應(yīng)用程序,完成DSP的在線程序燒寫(xiě)。
本文研究的基于PCI總線的DSP6713在線燒寫(xiě)方法和傳統(tǒng)的燒寫(xiě)程序的方法相比,具有明顯的優(yōu)勢(shì),極大地降低了軟件維護(hù)人員的工作量,提高了軟件升級(jí)的質(zhì)量和效率。該方法已成功應(yīng)用到某型號(hào)DSP控制系統(tǒng)中,經(jīng)過(guò)實(shí)際應(yīng)用證明,軟件燒寫(xiě)過(guò)程快速、穩(wěn)定、可靠。
該技術(shù)的研究使DSP的程序的更新可以脫離仿真器,為程序的更新和程序的遠(yuǎn)程維護(hù)提供了方便,具有很強(qiáng)的實(shí)用性。
[1]劉德生,李杰.基于JTAG的DSP外部Flash在線編程與引導(dǎo)技術(shù)[J].電子技術(shù)應(yīng)用,2005(03).
[2]李方慧.TMS320C6000系列DSPs芯片的原理與應(yīng)用[M].北京:電子工業(yè)出版社,2000.
〔編輯:張思楠〕
TP368.1
A
10.15913/j.cnki.kjycx.2017.13.087
2095-6835(2017)13-0087-02