蔣炯煒,雷志軍,于 鵬
(中國(guó)電子科技集團(tuán)公司第58研究所,江蘇無錫214072)
帶看門狗喂狗功能的TMS320F2812遠(yuǎn)程加載技術(shù)
蔣炯煒,雷志軍,于鵬
(中國(guó)電子科技集團(tuán)公司第58研究所,江蘇無錫214072)
為了提高系統(tǒng)可靠性,外部硬件看門狗電路的應(yīng)用越來越廣泛,但多數(shù)情況下,更新程序的同時(shí)無法完成喂狗操作,致使芯片不斷復(fù)位,無法完成軟件升級(jí)。在此基礎(chǔ)上提出了一種基于RS232的帶喂狗功能的TMS320F2812程序的遠(yuǎn)程加載方案,并詳細(xì)闡述了實(shí)現(xiàn)過程。該方案不僅擺脫了Flash編程時(shí)對(duì)JTAG接口的依賴,而且對(duì)底層Flash API函數(shù)進(jìn)行了修改,加入了喂狗程序,靈活性高,非常適用于軍用領(lǐng)域,具有較大的實(shí)用價(jià)值。
F2812;RS232;看門狗;遠(yuǎn)程更新
隨著科學(xué)技術(shù)的進(jìn)步,系統(tǒng)的可靠性越來越受到重視,特別是軍用領(lǐng)域的要求更苛刻??撮T狗電路就是提高系統(tǒng)可靠性的一種關(guān)鍵技術(shù),在出現(xiàn)死機(jī)、程序跑飛、程序有BUG導(dǎo)致不受控等情況出現(xiàn)時(shí),可以起到復(fù)位系統(tǒng)的作用??撮T狗電路分為內(nèi)部看門狗(集成在處理器內(nèi)部)和外部看門狗(基于硬件)。內(nèi)部看門狗便于設(shè)計(jì)但容易失效,在程序運(yùn)行失效時(shí)會(huì)禁止看門狗,導(dǎo)致系統(tǒng)的進(jìn)一步混亂。而外部看門狗雖然需要占用額外的電路板空間,但其不僅可以監(jiān)測(cè)VCC電源,在電壓跌落到指定的門限以下時(shí)觸發(fā)系統(tǒng)復(fù)位,而且完全不受內(nèi)部程序失效的影響,對(duì)于可靠性要求較高的設(shè)計(jì)是不可或缺的。在大多數(shù)控制場(chǎng)合兩者互相配合一起使用。
在系統(tǒng)可靠性提高的同時(shí)也帶來一個(gè)新的問題。由于大多數(shù)自動(dòng)化設(shè)備安裝在野外或整機(jī)內(nèi)部,若已安裝的設(shè)備出現(xiàn)程序缺陷或用戶提出新的需求,就需要對(duì)程序進(jìn)行遠(yuǎn)程更新。以F2812為例,更新Flash程序的過程是個(gè)先擦后寫的步驟。這一過程中程序擦除后內(nèi)部看門狗被禁止了,但是外部看門狗卻無法禁止,內(nèi)部程序也不會(huì)再對(duì)其進(jìn)行喂狗操作,導(dǎo)致的結(jié)果是外部復(fù)位芯片不斷使F2812復(fù)位,無法完成程序的更新甚至有可能使芯片出現(xiàn)“鎖死”,無法繼續(xù)使用Flash空間。為了解決這一難題,本文提出一種基于RS232的加入了看門狗喂狗功能的遠(yuǎn)程升級(jí)技術(shù)。
在軍用領(lǐng)域要求不拆機(jī)殼進(jìn)行程序升級(jí)的前提下,目前最常用的是基于RS232的遠(yuǎn)程更新技術(shù)。該技術(shù)的核心是上電后通過F2812的SCI Boot模式[1~2]完成數(shù)據(jù)傳輸。SCI Boot的詳細(xì)過程如圖1所示。
為了實(shí)現(xiàn)這一復(fù)雜過程,需要上位機(jī)不斷發(fā)送關(guān)鍵數(shù)據(jù),TI公司也提供了相應(yīng)的操作軟件SDFlash,只是該軟件并未公開源代碼,而且更新程序過程中不具備喂狗功能。
圖1 SCI Boot過程框圖
3.1外部看門狗電路
以常用的復(fù)位電路MAX706為例,說明外部看門狗電路的原理?;倦娐啡鐖D2所示。
圖2 MAX706看門狗電路
復(fù)位芯片MAX706的RESET引腳連接至DSP的復(fù)位端口,WDI引腳與DSP的任一I/O端口相連,DSP通過定時(shí)翻轉(zhuǎn)I/O口高低電平,即可完成喂狗操作。如果芯片出現(xiàn)死機(jī)等情況致使無法完成喂狗,芯片WDO引腳將輸出低電平至MR引腳,觸動(dòng)芯片的手動(dòng)復(fù)位功能,完成DSP的復(fù)位。具體看門狗時(shí)序如圖3所示。此處的關(guān)鍵時(shí)間參數(shù)有:喂狗間隔時(shí)間典型值tWD=1.6 s,也就是說一旦停止喂狗1.6 s后,WDO將輸出電平,引起復(fù)位。
圖3 MAX706看門狗時(shí)序
3.2程序更新過程
要在F2812的Flash擦除和編寫過程中實(shí)現(xiàn)喂狗功能,需要分三步走。
第一步:在喂狗間隔時(shí)間1.6 s內(nèi)完成SCI Boot,上位機(jī)將程序A(具備喂狗功能)送入F2812執(zhí)行;
第二步:程序A喂狗成功以后,需要接收來自上位機(jī)發(fā)送的程序B(帶Flash的擦除和編程功能,同時(shí)具備喂狗功能);
第三步:程序B開始執(zhí)行后,上位機(jī)再發(fā)送用戶最終程序C,燒寫到Flash中,完成升級(jí)。
需要注意的是,之所以將第一步和第二步分開是因?yàn)槿绻绦駻和程序B合并將導(dǎo)致上位機(jī)向F2812的數(shù)據(jù)傳輸時(shí)間加長(zhǎng),極有可能無法在1.6 s內(nèi)完成程序的傳輸。第一步開始到第三步結(jié)束,整個(gè)過程中都具備喂狗過程。具體流程如圖4所示。
圖4 程序更新過程框圖
3.3技術(shù)難點(diǎn)
如3.2節(jié)所述,在整個(gè)程序更新過程中必須一直進(jìn)行喂狗操作,典型的喂狗間隔時(shí)間值tWD=1.6 s,但是對(duì)于F2812來說150M系統(tǒng)時(shí)鐘下,僅僅16 k Sector的擦除和編程典型時(shí)間分別為11 s和500 ms(參考TI手冊(cè)SPRS174T)[3],如表1所示。即使更高性能的F28335的擦除和編程典型時(shí)間也分別需要2 s和500 ms(參考TI手冊(cè)SPRS439M),如表2所示。
很顯然,編程時(shí)間滿足要求,擦除時(shí)間大于1.6 s,直接調(diào)用TI提供的API函數(shù)進(jìn)行Flash的更新肯定會(huì)失敗,因此需要修改底層API函數(shù),將看門狗程序加入Flash的擦除扇區(qū)過程。
3.4解決措施
由于TI公司并未公開F2812的庫文件內(nèi)的函數(shù)源碼,因此需要通過反匯編將API函數(shù)提取出來。
首先,通過CCS建立一個(gè)新的工程,工程中包含頭文件Flash281x_API_Config.h、Flash281x_API_ Library.h和庫文件Flash2812_API_V210.lib[4]。利用API函數(shù)Flash_Erase(Uint16 SectorMask,F(xiàn)LASH_ST* FEraseStat)編寫一個(gè)擦除整個(gè)Flash扇區(qū)的主函數(shù),然后通過CCS自帶的反匯編工具將整個(gè)工程的匯編代碼一段一段提取出來。
其次,整理匯編代碼的結(jié)構(gòu),找到加入喂狗程序的地址空間。通過CCS提取出來的匯編代碼并不能直接使用,不僅語法存在問題,而且相互調(diào)用的子函數(shù)名稱和標(biāo)號(hào)也需要重新定義。更重要的是匯編代碼的函數(shù)地址是固定的,一旦向函數(shù)中增加刪減語句或是改變指令都會(huì)使地址發(fā)生變化,導(dǎo)致函數(shù)之間調(diào)用失敗。因此,需要分析函數(shù)內(nèi)部結(jié)構(gòu),刪除一些不影響功能的語句,插入喂狗的匯編代碼同時(shí)保證函數(shù)地址不發(fā)生變化。
表1 150M下F2812-Flash擦寫時(shí)間
表2 150M下F28335-Flash擦寫時(shí)間
最后,將匯編文件打包成一個(gè).asm文件加入工程中,執(zhí)行程序B時(shí)調(diào)用即可完成扇區(qū)的擦除。
CCS需要預(yù)先編譯好程序A和程序B并轉(zhuǎn)化成特定的格式。上電后,針對(duì)SCI Boot模式上位機(jī)不斷發(fā)送關(guān)鍵字符A,若收到F2812返回字符A即握手成功,否則超時(shí)連接失?。?]。握手以后就可以按照?qǐng)D4的流程進(jìn)行Flash程序更新。
如圖5所示為Flash程序更新過程,操作簡(jiǎn)單,建立連接成功后,只需選擇編譯生成的.out文件,點(diǎn)擊更新程序即可。內(nèi)部采用了分塊更新方式,具體更新狀態(tài)也可從上位機(jī)上反映出來。
圖5 Flash程序更新過程
本文根據(jù)用戶實(shí)際需求,提出了一種帶看門狗喂狗功能的更新F2812 Flash程序的方法,該方法通過反匯編修改了TI的底層API函數(shù),完成了功能擴(kuò)展并闡述了軟件設(shè)計(jì)開發(fā)的流程。實(shí)際測(cè)試成功并已經(jīng)在用戶處得到廣泛使用,對(duì)其他類似系統(tǒng)的程序遠(yuǎn)程加載具有借鑒意義。
[1]TMS320F28xSerialCommunicationsInterface(SCI)Reference Guide(Rev.B)[P].
[2]沈潤(rùn),張喆.基于串口的TMS320F28335應(yīng)用程序在線升級(jí)技術(shù)的應(yīng)用[J].化工自動(dòng)化及儀表,2015.
[3]TMS320F281x Data Sheet(Rev.L)[P].
[4]TI.TMS320F281x Flash Programming API Revision Change[EB/OL].2005,www.ti.com.cn.
[5]王敏,黃站華,孫秋實(shí),等.DSP系統(tǒng)程序遠(yuǎn)程更新的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2012.
A Technology of Remote Flash Programming to TMS320F2812 with Watchdog-feeding Function
JIANG Jiongwei,LEI Zhijun,YU Peng
(China Electronics Technology Group Corporation No.58 Research Institute,Wuxi 214035,China)
In order to improve system reliability,external hardware watchdog is increasingly used.But in most cases,the update operation cannot be implemented while feeding the watchdog,which incurs constant system resetting.A technology of remote flash programming to TMS320F2812 based on RS232 Interface is proposed with detailed execution process.The technology modifies the underlying Flash API function and enables programming while feeding the watchdog.This method is applicable for military use.
F2812;RS232;watchdog;remote flash programming
TN402
A
1681-1070(2016)10-0023-04
2016-5-25
蔣炯煒(1986—),男,江蘇無錫人,碩士,助理工程師,就職于中國(guó)電子科技集團(tuán)公司第58研究所,研究方向?yàn)镈SP芯片的應(yīng)用與測(cè)試。