張琪 楊建成 于宗洋


摘要 研究了利用總線技術對不易拆卸控制器的加載和遠程控制技術,以英飛凌公司的XC886芯片為平臺設計并實現了CAN總線遠程升級加載方案。該方案摒棄了傳統方案升級軟件需要打開控制器外殼、連接JTAG口等繁瑣過程,通過PC端監控界面與片內駐留BootLoader引導程序進行CAN總線通訊,實現用戶程序的燒寫和遠程升級。
【關鍵詞】XC886芯片 BootLoader 遠程升級CAN總線
在現代控制數字技術不斷迅猛發展的當下,嵌入式控制系統被越來越廣泛的應用在工業領域,嵌入式操作系統經常被安裝在自然環境極其惡劣的區域,亟需實現系統遠程加載。CAN總線作為一種國際標準的現場總線,具有出眾的性價比和高可靠性,因此通過CAN總線對各節點芯片進行在線升級,成為一種簡單易行且穩定可靠的方式。本項目提出一種基于CAN總線的分布式嵌入系統升級方案,實現多點或單點系統的升級。項目根據嵌入式處理系統存儲結構的特殊性和主流的軟件升級原理,建立了一套通過PC機控制遠程節點軟件升級的系統。
1 工作原理
本研究采用的嵌入式芯片采用Infineon公司的XC886芯片,程序軟件升級采用下載模式。主要思路是使用PC平臺,與嵌入式芯片駐留程序通訊。系統軟件分為PC平臺和硬件端底層引導程序(BootLoader),PC平臺負責將需要加載的更新程序轉化為要求格式,BootLoader將CAN總線發來的數據燒寫到FLASH存儲區內。先通過JTAG口將BootLoader燒寫到FLASH,然后棄用JTAG。在后續使用過程中,芯片上電后按ROM區地址順序執行,即先執行BootLoader,底層程序負責接收PC端控制命令,決定是否有目標文件更新任務:判斷有,將CAN總線上發送的用戶文件接收并通過Flash緩存固化到芯片ROM區;判斷無,運行硬件端用戶程序區。
2 過程實現
控制核心模塊使用中斷接收PC平臺發來的消息,通過ID號分辨消息是命令還是文件傳輸。該模塊是核心部分,負責與PC平臺進行通訊,傳輸和接收數據;響應PC平臺發送的命令,完成命令功能,處理接收數據。按此流程解析命令:
(1) CAN通訊初始化;
(2)等待連接命令和建立通訊連接;
(3)等待命令和命令處理:在成功建立連接后硬件端等待PC平臺發送用戶控制指令:連接斷開、程序啟動、復位、程序更新和系統狀態請求,此外異常情況:超時處理。硬件端對相應指令做出對應處理;
(4)系統狀態結束及復位狀態結束。
3 數據傳輸
數據傳輸部分采用單向傳輸,從PC端到硬件端,PC平臺發送更新程序文件到硬件端,硬件端回傳響應信號和狀態,PC端發送數據,硬件端接收數據。單個某數據幀的傳輸過程如圖1所示:
①單個某數據幀傳輸開始,PC平臺定義該幀的序列號,如果幀過大需要劃分成若干分幀,規定主幀的分幀個數。SeqM為主幀序列號,主幀的每個分幀都包含主幀序列號,用以標記。序列號存儲在某分幀的序列號字段中。LFM是在某分幀完成傳輸后所屬主幀中剩余分幀的個數,存儲在表征后續幀個數的字段中。FlashAddM為主幀在Flash的目標燒寫位置,將地址存儲在分幀的Flash相應地址字段中。
②硬件端成功接收到某分幀后,判斷數據是否無誤,正確回傳確認幀,包含主幀序列號和已接收到分幀的剩余幀數,INF為確認幀中包含的信號內容,Next代表已經準備去接收下一分幀。
③成功傳輸完前一分幀后,順次向下傳輸下一分幀,SeqM和FlashAddM均不變,LFM減去1。
④同②,剩余的各分幀成功傳輸過程與③、④相同。
⑤傳輸完最后一個分幀,LFM等于O。
⑥同②。
⑦傳輸完上一主幀后,開始下一主幀的傳輸,主幀序列號為SeqM加1,FlashAddM更新為當前主幀目標燒寫位置,LFM為主幀包含的總分幀個數減1。
4 錯誤處理機制
當檢測到接收數據幀發生錯誤時,硬件端判斷錯誤類型并反饋給PC平臺進行錯誤處理。數據傳輸錯誤處理過程如圖2。
①PC平臺發送最后一個數據幀Mn。
②硬件端成功接收該數據幀,返回請求下一分幀的信號確認幀。
③PC平臺發送數據長度為O的數據幀,通知硬件端數據傳輸完畢。
④硬件端檢查該分幀中帶有的總數據長度信息是否與接收到的數據一致,不一致時立即發送Recall反饋幀,通知PC平臺重傳全部數據。
⑤PC平臺端接到Recall后重傳數據。
5 文件讀取
文件頭部的讀寫是系統處理核心,主要依靠傳輸頭部文件函數boolCfileTrans::HandleHeader()傳輸文件頭信息,包括文件起始字符,硬件端信息,加密,用戶文件版本號及ID號。根據配置文件信息,選擇調用對應的API對文件中的數據處理。讀取頭部文件函數bool CPCCANDlg::ReadFileHead(),順序讀取文件起始字符,讀取完成后選擇Infection文件的幀格式。
struct LK HEADER Infineon
//Infection文件某幀格式
{
unsigned char LENGTH;
unsigned char FLASH_MSTART;
unsigned char FLASH_LSTART;
unsigned char SEQ;
unsigned char LEFT;
unsigned char CRC;
unsigned short reserved;
};
幀頭部信息內容包括幀長度、幀寫入Flash首地址、幀序列號、后續幀個數、CRC校驗碼。用戶選擇傳送文件目標位置、郵箱ID,PC平臺將文件分裝成多幀,調用文件傳輸函數將幀逐次發送到CAN總線上,硬件端收到信號后,將響應信號發到CAN總線上,監聽信號函數接收CAN總線上數據,包括命令及響應信號,執行相應處理分支。
6 FLASH操作
本軟件采用基于英飛凌XC886芯片的C語言編寫,XC886內嵌用戶可編程的閃存( Flash)存儲器,Flash分區特性使每個扇區都可被獨立擦除。為了適應芯片的存貯方式,地址從Ox0000開始存放中斷向量表,這樣可以執行復位過程中的尋址。用戶上一次更新后的程序代碼放置在芯片端用戶程序區,底層引導程序放置在引導區。在XC886芯片啟動后程序尋址的初始位置寫一條LJMP長跳轉指令,芯片啟動后會先進入引導區。
測試結果:完善后經過上千次軟件遠程升級測試及軟件分支可靠性測試,未出現更新過程中故障,系統表現可靠。
參考文獻
[1]何賓,朱紅林,基于GPRS的DSP程序遠程升級的研究與實現[J].計算工程與設計,2010,31(15): 3390.
[2]周立功.iCAN現場總線原理及應用[M].北京:北京航空航天大學出版社,2007:4— 7.
[3]楊元挺,卓樹峰.基于CAN總線的遠程升級系統[J],現代電子技術,2009,32 (10): 83-86.