周洋洋,趙昶宇
(1.海軍駐天津地區(qū)兵器設(shè)備軍事代表室,天津 300308;2.天津津航計(jì)算技術(shù)研究所,天津 300308)
DSP28335 是用于實(shí)時(shí)信號(hào)處理的微處理器,具有浮點(diǎn)運(yùn)算功能,它接口豐富,控制精度高,且預(yù)算速度快,因此廣泛應(yīng)用于嵌入式系統(tǒng)的各個(gè)領(lǐng)域。通常將芯片的內(nèi)部存儲(chǔ)區(qū)分為引導(dǎo)程序區(qū)、運(yùn)行程序區(qū)和下載區(qū)3 個(gè)部分。芯片接收到下載命令后,進(jìn)入引導(dǎo)區(qū)運(yùn)行引導(dǎo)程序,在引導(dǎo)程序下將用戶(hù)應(yīng)用程序代碼內(nèi)容下載到下載區(qū),下載完畢并校驗(yàn)通過(guò)后再將下載區(qū)的內(nèi)容復(fù)制到運(yùn)行程序區(qū),運(yùn)行復(fù)位程序,完成Flash 的在線(xiàn)燒寫(xiě)。
本文以DSP28335 為例,提出一種基于CAN 總線(xiàn)的DSP在線(xiàn)燒寫(xiě)的方法,避免了在升級(jí)程序時(shí)因拆卸控制器帶來(lái)的各種問(wèn)題,降低了設(shè)備的維護(hù)成本。
DSP28335 自帶FLASH 存儲(chǔ)器,在代碼運(yùn)行前,將代碼從FLASH 中拷貝到RAM 中運(yùn)行,能夠顯著提高程序的運(yùn)行效率。用戶(hù)編寫(xiě)的應(yīng)用程序固化到非易失性存儲(chǔ)器FLASH 中,系統(tǒng)每次上電復(fù)位后,便開(kāi)始運(yùn)行FLASH 程序引導(dǎo)流程,具體流程為:調(diào)用InitBoot 函數(shù)把器件初始化成C28X 工作模式;然后調(diào)用SelectBootMode 函數(shù),檢測(cè)相應(yīng)GPIO 引腳的電平狀態(tài),判斷為FLASH 引導(dǎo)模式;引導(dǎo)結(jié)束后PC 指針將跳轉(zhuǎn)至FLASH 中0x33FFF6 地址單元處,并執(zhí)行其中的代碼,用戶(hù)需要在該地址存放一條指令;最后執(zhí)行跳轉(zhuǎn)指令將會(huì)跳轉(zhuǎn)到C 環(huán)境初始化函數(shù)c_int00,只有當(dāng)c_int00 運(yùn)行后,才開(kāi)始執(zhí)行Main()函 數(shù)。
DSP28335 的在線(xiàn)燒寫(xiě)軟件部分主要是由上位機(jī)端軟件和DSP 端軟件構(gòu)成。
上位機(jī)端軟件主要完成讀取可執(zhí)行代碼文件,進(jìn)行格式轉(zhuǎn)換后將該文件通過(guò)CAN 總線(xiàn)發(fā)送給DSP 端,等待DSP端的響應(yīng)。
DSP 端軟件主要完成和上位機(jī)端軟件的握手,接收上位機(jī)端軟件發(fā)送的可執(zhí)行代碼文件,并將該文件立即燒寫(xiě)到FLASH 中,完成燒寫(xiě)過(guò)程;此外DSP 端還需實(shí)現(xiàn)bootloader程序的功能。
基于DSP28335開(kāi)發(fā)的應(yīng)用程序經(jīng)過(guò)CCS編譯生成的目標(biāo)文件類(lèi)型為.out 文件,而DSP28335 無(wú)法識(shí)別該文件類(lèi)型,需要通過(guò)hex2000.exe 工具將.out 文件轉(zhuǎn)換成DSP28335 可以識(shí)別的二進(jìn)制數(shù)據(jù)流文件。
上位機(jī)端軟件首先讀取.hex 文件,通過(guò)解析.hex 文件內(nèi)容,將其拆分為多條數(shù)據(jù)幀結(jié)構(gòu)。上位機(jī)端軟件與DSP 端軟件通過(guò)CAN 總線(xiàn)進(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)。
DSP 端軟件主要包括引導(dǎo)程序和用戶(hù)應(yīng)用程序,前者不僅用來(lái)和上位機(jī)軟件進(jìn)行CAN 總線(xiàn)通訊接收DSP 程序可執(zhí)行代碼文件,并將接收到的可執(zhí)行代碼文件燒寫(xiě)到FLASH中,而且會(huì)在系統(tǒng)上電復(fù)位后會(huì)判斷是執(zhí)行FLASH 燒寫(xiě)工作還是運(yùn)行用戶(hù)應(yīng)用程序工作;后者是用來(lái)和上位機(jī)軟件進(jìn)行CAN 總線(xiàn)通訊接收DSP 程序可執(zhí)行代碼文件,并將接收到的可執(zhí)行代碼文件燒寫(xiě)到FLASH 中。
為保證接收數(shù)據(jù)的準(zhǔn)確性和完整性,DSP 端軟件在接收數(shù)據(jù)的過(guò)程中,不執(zhí)行對(duì)RAM 或FLASH 操作的相關(guān)代碼;同時(shí),關(guān)閉其他的外部中斷,僅響應(yīng)CAN 總線(xiàn)接收中斷,保證了數(shù)據(jù)接收的實(shí)時(shí)性。此外,DSP 端軟件將接收到的數(shù)據(jù)存儲(chǔ)在外擴(kuò)的FLASH 中,等接收完全部數(shù)據(jù)后,再進(jìn)行程序的燒寫(xiě),防止在接收數(shù)據(jù)過(guò)程中出現(xiàn)意外而導(dǎo)致系統(tǒng)程序不能正常工作。
FLASH 的燒寫(xiě)工作也是DSP 端軟件需要實(shí)現(xiàn)的重要功能。在擦除或讀寫(xiě)FLASH 之前,必須先執(zhí)行相應(yīng)的命令字序列,即在指定的FLASH 地址處寫(xiě)入指定的指令代碼。
向FLASH 的指定地址中寫(xiě)入數(shù)據(jù),需要四個(gè)總線(xiàn)周期。前兩個(gè)是解鎖周期,第三個(gè)是建立編程命令,最后一個(gè)周期完成向編程地址中寫(xiě)入編程數(shù)據(jù)。待寫(xiě)入的數(shù)據(jù)為.Hex 文件內(nèi)容。
引導(dǎo)程序框圖和應(yīng)用程序框圖的處理流程如圖1 所示。
圖1 引導(dǎo)程序框圖和應(yīng)用程序框圖示意流程圖
DSP28335 在線(xiàn)燒寫(xiě)分為以下4 個(gè)步驟:①利用CCS 開(kāi)發(fā)工具,將要升級(jí)的應(yīng)用程序編譯生成.out 文件,利用hex2000.exe 工具將.out 文件轉(zhuǎn)換成.hex 文件;②利用仿真器將被燒寫(xiě)的引導(dǎo)程序固化到DSP 中FLASH 的相應(yīng)地址中;③完成步驟②后重新上電復(fù)位,利用上位機(jī)端軟件將被燒寫(xiě)的DSP 應(yīng)用程序發(fā)送到DSP 中;④DSP 重新上電,即可自動(dòng)運(yùn)行新更新的應(yīng)用程序,完成DSP 的在線(xiàn)程序燒寫(xiě)。
本文研究的基于CAN 總線(xiàn)的DSP28335 的在線(xiàn)燒寫(xiě)方法極大釋放了軟件維護(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í)用性。