倪慶生,倪云龍,潘曉陽,袁盛俊
(中科芯集成電路有限公司,江蘇無錫214072)
TMS320F28335是TI(Texas Instruments)公司一款性能優(yōu)越的C2000系列數(shù)字信號處理芯片,可實現(xiàn)快速數(shù)字信號處理,并通過本身多種外設(shè)接口實現(xiàn)外設(shè)的快速控制。隨著嵌入式系統(tǒng)集成化程度越來越高,TMS320F28335一旦形成產(chǎn)品應用于現(xiàn)場,將使仿真器升級程序變得費時費力。
目前通過串口升級的方法比較成熟,但只能實現(xiàn)一對一升級,無法進行組網(wǎng)?,F(xiàn)場設(shè)備越多則需要的線纜越多,將導致布線越困難[1]。而已有通過CAN(Controller Area Network)升級的方法介紹也是多用于一對一升級,沒有進行CAN組網(wǎng)驗證[2-3]。在實際現(xiàn)場往往存在多個設(shè)備通過CAN總線進行組網(wǎng)的現(xiàn)象,所以需要同時考慮CAN網(wǎng)絡(luò)[4]實際的通信情況對在線升級的影響。因此,基于CAN總線的多主通信方式以及非破壞性仲裁機制[5],本文設(shè)計了基于CAN總線的TMS320F28335遠程在線升級方法。
上位機程序的功能主要包括:
配置遠程在線升級使用的CAN盒,使波特率、幀類型與下位機程序設(shè)置相對應,并增加濾波設(shè)置,在硬件上過濾掉CAN網(wǎng)絡(luò)中的非升級數(shù)據(jù)。
對CCS(Code Composer Studio)編譯應用程序生成的.hex文件信息進行提取,主要獲取應用程序的升級地址和需要升級的數(shù)據(jù)。由于TMS320F28335片內(nèi)RAM資源有限,因此將需要升級的應用程序進行分組,每組包括16 Byte的信息和240 Byte的數(shù)據(jù),然后通過CAN總線傳輸[6]。每組數(shù)據(jù)傳輸完成后,需要等待底層程序響應并給予應答,上位機程序確認無誤后再進行下一組數(shù)據(jù)的傳輸。
另外上位機程序還集成了修改目標板的設(shè)備ID(Identifier)號功能,用于區(qū)分CAN網(wǎng)絡(luò)中各節(jié)點、修改CAN波特率和CAN幀類型功能以適用不同的CAN網(wǎng)絡(luò)環(huán)境。上位機程序的軟件流程如圖1所示。
圖1 上位機軟件流程
上位機界面如圖2所示。
圖2 上位機界面
下位機程序主要包括應用程序和底層程序。
應用程序是需遠程在線升級的程序,最終通過CCS編譯生成目標.hex文件;可與上位機程序進行必要的通訊,循環(huán)查詢是否收到上位機升級指令,若收到則復位跳轉(zhuǎn)至底層程序,無需目標板重新上電。其余功能根據(jù)用戶需求而定。
底層程序的主要功能包括對TMS320F28335進行必要的初始化。通過查看片內(nèi)Flash是否有應用程序和規(guī)定時間內(nèi)是否收到上位機升級指令來決定是否能升級標記,然后再根據(jù)升級標記來決定底層程序是否跳轉(zhuǎn)到應用程序。若升級程序則調(diào)用擦除函數(shù)擦除片內(nèi)Flash,然后接收上位機發(fā)送的應用程序,每組數(shù)據(jù)接收完成后做校驗并判斷數(shù)據(jù)的正確性,并根據(jù)升級地址將數(shù)據(jù)燒寫到指定片內(nèi)Flash區(qū)域,最后給予上位機應答。待應用程序升級成功后,升級標記不再使能,并可自動跳轉(zhuǎn)至應用程序[7-8]。若不升級程序則直接跳轉(zhuǎn)至應用程序。下位機程序的整體軟件流程如圖3所示。
圖3 下位機程序整體軟件流程
試驗中發(fā)現(xiàn),在底層程序擦除TMS320F28335片內(nèi)Flash時,掉電可導致底層程序概率性失效。查看TI官方文檔[9],文中多次提到在擦除函數(shù)擦除Flash的過程中,不可將其打斷。一旦底層程序失效,將無法再進行在線升級。為避免該問題,故將底層程序燒寫到SPI(Serial Peripheral Interface)[10]接口外掛的EEPROM內(nèi),并 配 置 硬 件 相 關(guān)GPIO(General-Purpose Input/Output)引腳將其做成SPI BOOT模式。應用程序?qū)υ撈珽EPROM沒有寫權(quán)限,防止應用程序意外修改EEPROM內(nèi)存儲的底層程序。
根據(jù)原理搭建了試驗環(huán)境,選擇CAN網(wǎng)絡(luò)直線型拓撲結(jié)構(gòu)(見圖4)。
圖4 試驗環(huán)境示意圖
CAN盒:型號為周立功的USBCAN-II,負責記錄CAN網(wǎng)絡(luò)中的通信數(shù)據(jù),并通過上位機顯示網(wǎng)絡(luò)負載率。試驗中發(fā)現(xiàn)其記錄負載率平均值的最大值在90%~91%之間。不同CAN盒上位機負載率計算可能存在差異。本文以該CAN盒負載率計算值為基準。
干擾節(jié)點:通過控制干擾節(jié)點個數(shù),以及干擾節(jié)點數(shù)據(jù)發(fā)送頻率,可控制網(wǎng)絡(luò)的負載率。
本文測試環(huán)境中的CAN總線長分別約為70 m和40 m。由于總線長對波特率的限制,故本文只在波特率為500 kb/s、250 kb/s環(huán)境下進行測試。CAN標準數(shù)據(jù)幀為44~108 bit,最高可以插入23個填充位[11]。因此本文設(shè)置干擾節(jié)點發(fā)送的每幀數(shù)據(jù)幀約為121 bit,加上數(shù)據(jù)幀之間的幀間隔最少為3 bit。因此在波特率為250 kb/s時,其網(wǎng)絡(luò)每秒理論上最多可傳輸約2065 frame。同理波特率為500 kb/s時,其網(wǎng)絡(luò)每秒理論上最多可傳輸約4129 frame。波特率為250 kb/s、CAN網(wǎng)絡(luò)滿載時情況如圖5所示。
圖5 CAN網(wǎng)絡(luò)滿載圖
分別控制節(jié)點數(shù)、總線長、網(wǎng)絡(luò)負載率和目標節(jié)點優(yōu)先級4個影響因素,波特率為250 kb/s和500 kb/s時的試驗數(shù)據(jù)分別如表1和2所示。
表1 波特率250 kb/s試驗數(shù)據(jù)
當目標節(jié)點優(yōu)先級最低時,干擾節(jié)點每秒發(fā)送的理論幀數(shù)大于該波特率下每秒所能發(fā)送的最大幀數(shù)時,在線升級失敗,原因在于優(yōu)先級低的節(jié)點會無法搶占總線發(fā)送數(shù)據(jù)。而此時減少干擾節(jié)點數(shù),在線升級會概率性成功,原因在于干擾節(jié)點越少,網(wǎng)絡(luò)出現(xiàn)空閑的幾率越大,因此會提高在線升級概率。
當目標節(jié)點優(yōu)先級最高時,即使網(wǎng)絡(luò)滿載甚至超載,在線升級依然成功。
根據(jù)現(xiàn)場復雜的應用環(huán)境,同時針對CAN網(wǎng)絡(luò)的實際通訊情況,本文的設(shè)計方法實現(xiàn)了CAN網(wǎng)絡(luò)中任意節(jié)點的在線升級,在目標節(jié)點優(yōu)先級最低時,測得在線升級的極限條件。而當CAN網(wǎng)絡(luò)滿載時,可通過修改目標節(jié)點優(yōu)先級后完成在線升級。本文分別在波特率為250 kb/s、500 kb/s的情況下進行驗證,并通過大量試驗驗證了該方法的穩(wěn)定與可靠性,可有效減少現(xiàn)場工作人員的工作量。該方法同樣對其他嵌入式處理器芯片實現(xiàn)在線升級有借鑒意義。經(jīng)實測在總線長為70 m、CAN網(wǎng)絡(luò)空載時,波特率為250 kb/s,升級99 kB的.hex程序用時70 s左右。
表2 波特率500 kb/s試驗數(shù)據(jù)