王建斌,江冰
(河海大學物聯網工程學院,常州 213022)
基于CAN總線節點的遠程在線升級系統設計
王建斌,江冰
(河海大學物聯網工程學院,常州 213022)
針對特種纖維檢測控制系統各節點軟件升級困難的問題,設計了基于CAN總線應用層協議的一種遠程在線升級系統,實現了單節點、多節點同時在線升級。通過實際運行分析,該系統具有可靠性高、升級操作簡便、系統穩定的特點,對一般工業網絡中的節點升級具有參考意義。
在線升級;CAN總線;應用層協議;IAP;LPC4357;Cortex-M4
特種纖維檢測控制系統是對生產線上產出的纖維產品各種參數進行實時檢測和設備的控制裝置。系統由多個數據采集節點組成,通過CAN總線網絡將數據匯總到主節點,主節點對數據進行處理、分析后輸出相應的控制信號,實現對生產線設備的實時調整和控制。傳統情況下,如果需要針對節點進行軟件升級更新,就需要專業技術人員到生產現場,通過專用的下載設備進行程序燒錄更新,使系統維護成本大幅提高,降低了生產效率。因此,結合特種纖維檢測控制系統現有的CAN總線網絡,并利用節點微控制器的IAP功能,設計一個節點遠程在線升級系統十分有必要。
本文在實現CAN總線報文數據收發的基礎上,參考TCP/IP協議中的TFTP協議規范,設計了一個簡單實用的系統在線升級應用層協議,并結合微控制器的IAP功能,實現待升級節點軟件升級的目的。
1.1 lAP技術及其編程實現
IAP(In Application Programming,在應用中編程)是指用戶在運行應用程序過程中通過程序控制實現對片上Flash存儲器的擦除和讀/寫等操作。IAP技術是實現系統在線升級的必要前提,本系統中待升級節點采用NXP公司的基于Cortex-M4內核的微控制器LPC4357。該芯片集成了功能強大的IAP技術,可以單次最多向目標Flash中寫入4KB數據。
IAP的功能函數被固化在ROM的Boot中。以LPC4357為例,ROM的地址0x1040 0100作為指針指向IAP功能函數入口地址IAP_entry,因此當使用C語言編寫調用函數時,首先定義IAP入口地址。在進行IAP函數調用時,通過寄存器R0作為指針來傳遞命令代碼和參數。IAP命令的返回結果通過寄存器R1作為指針來傳遞。
實現節點軟件升級的關鍵一步就是將CAN總線接收的代碼數據通過IAP編程到指定的片上Flash的扇區。IAP通過以下幾個步驟實現編程操作:IAP初始化、準備扇區、擦除扇區、準備扇區、編程扇區和數據校驗。
1.2 在線升級系統總體結構
系統由檢測節點、CAN總線網絡和升級服務器組成。其中檢測節點和CAN總線網絡是特種纖維檢測控制系統的組成部分,因此,只要將升級服務器接入CAN總線網絡,就可以搭建在線升級系統的硬件平臺。升級系統總體框圖如圖1所示。

圖1 節點在線升級系統框圖
升級系統的軟件由節點端軟件和服務器端軟件組成,節點端和服務器端通過CAN總線進行數據交互,在此基礎上,設計CAN應用層協議。本文通過分析TCP/IP協議中的TFTP協議規范,設計了一款簡單實用而且適用于CAN總線網絡的系統升級協議。升級系統協議分層結構如圖2所示。

圖2 升級系統協議分層結構
2.1 TFTP協議及文件傳輸基本流程
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的應用層協議,基于UDP傳輸協議。最初用來引導無盤系統,主要用于傳輸小文件。TFTP協議報文分為:讀/寫請求報文、數據包報文、確認信息報文以及差錯報文。TFTP報文格式如圖3所示。
TFTP客戶端首先向服務器的端口69發送文件下載/上傳請求,請求的相應報文格式如圖3(a)所示。服務器接收請求后打開一個新的端口與客戶端進行通信,服務器端口69則繼續等待其他客戶端的請求,從而實現同時響應多個客戶端的文件傳輸請求。當客戶端發送的文件下載請求得到服務器ACK確認后,開始發送編號為1的數據包,數據包的報文格式如圖3(b)所示。每個數據包的大小為固定的512字節,服務器每次發送數據包之前都必須得到客戶端的ACK確認。當客戶端接收到小于固定字節的數據包時,則認為文件傳輸結束。
TFTP協議也提供了相應的錯誤處理機制。服務器端和客戶端都可實現超時重傳,只要有一端出現超時,就將重傳丟失的報文,從而有效的提高文件傳輸的正確率。在傳輸過程中出現錯誤時,服務器端向客戶端發送差錯報文。

圖3 TFTP報文格式
2.2 系統升級協議的報文格式
CAN總線協議定義了5種類型的幀:數據幀、遙控幀、錯誤幀、過載幀、間隔幀。其中,數據幀用于發送單元向接收單元傳送數據。數據幀格式分為標準格式和擴展格式,兩者區別在于標識符分別占11位和29位,這里僅使用標準格式的數據幀作為節點和升級服務器通信的基本單位。
由于一個數據幀最多只能攜帶8字節數據,而在一般文件傳輸應用中數據以數據塊的形式進行傳輸,因此在文件傳輸時需要進行數據拆分、重組的操作。在應用層的數據報文中對這一操作進行屏蔽,具體操作通過底層協議實現,因此這里僅需關心數據幀的數據段。升級協議的報文分為:升級命令、數據包、確認信息、錯誤信息,相應的報文格式如圖4所示。
升級命令由升級服務器發出,ID號用于確認待升級節點,升級模式分為單節點升級模式和多節點同時升級模式。數據包用于服務器向節點傳輸升級所需的二進制文件,每個數據包攜帶固定的1024字節數據,這是因為節點利用IAP技術進行軟件升級時,每次對片上Flash編程的字節數是固定的,可選512字節、1024字節、4096字節3個選項,這里選用1024字節。確認信息和錯誤信息參考TFTP協議的相應報文格式。

圖4 升級協議報文格式
2.3 系統升級協議及文件傳輸流程
系統升級命令由升級服務器發出,節點在接收到升級命令后通過校驗ID號判斷升級模式,進入相應的升級狀態,并向服務器發送確認信息ACK。升級服務器接收到ACK確認后,開始發送編號為1的數據包,節點接收到數據包就立即將1024字節數據編程到片內Flash中,編程成功后返回ACK 1,以此類推。如果最后一個數據包N的數據長度小于1024字節,則自動向數據包添加0,使數據包長度正好為1024字節。
升級服務器接收到節點確認信息ACK N,表明節點升級完成。這里,節點端采用邊接收邊升級的方案。如果將升級文件全部接收后再進行升級,則需要大量的RAM空間,一旦升級文件過大,節點升級就會失敗。系統升級流程如圖5所示。

圖5 系統升級流程
2.4 系統升級中的錯誤處理
在系統升級過程中,可能會出現發送數據包丟失、連接中斷的情況。當服務器端發送的數據包丟失或節點端接收該數據包失敗時,節點端向服務器端發送錯誤信息。服務器端接收錯誤信息,根據錯誤內容判斷是否需要重新發送數據包。如果服務器端在一定時間內沒有接收到節點端的確認信息或錯誤信息,則認為系統升級失敗,服務器端會向節點端發送升級失敗的錯誤信息ERROR,節點端接收該信息后進入升級失敗狀態。
檢測節點采用NXP公司的基于Cortex-M4內核的微控制器LPC4357作為數據采集和控制核心,片上集成了1MB的Flash,分為Bank A和Bank B兩個存儲體,每個存儲體各占512KB。
節點程序分為兩部分:Bootloader升級程序和APP應用程序。APP應用程序分為兩個區:默認應用程序區和升級應用程序區。片上Flash功能分區如圖6所示。

圖6 片上Flash功能分區
Bootloader升級程序燒錄在片上Flash的Bank A扇區0處,占用8KB空間。系統啟動時,最先執行該處程序,首先進行系統初始化操作,包括CAN總線接口初始化、IAP初始化、讀器件ID號等。初始化完成后,進入等待升級狀態。在該狀態下,如果接收到升級服務器發送的升級命令,則進入升級狀態。系統升級成功后進入待跳轉狀態,最后系統跳轉到升級后的應用程序區。節點升級狀態轉換圖如圖7所示。
當Bootloader初始化完成且等待升級命令超時后,系統跳轉到APP應用程序的默認應用程序區,開始執行節點應用程序。應用程序除了完成數據采集和CAN總線數據傳輸功能,還能在接收到升級服務器的升級命令時,中止系統運行并跳至Bootloader區,進入系統升級狀態。

圖7 節點升級狀態轉換圖
由于系統啟動時不是直接開始執行APP應用程序,而是從Bootloader程序跳轉進入該處程序,因此,在APP應用程序初始化之前必須將中斷向量表重映射,防止APP應用程序發生中斷時進入Bootloader程序的中斷函數。
當升級失敗時跳轉到默認應用程序區,使系統在升級出錯時依然能夠正常運行。系統升級時,對升級應用程序區進行擦除、編程操作,升級成功后進入該程序區執行升級后的應用程序。Bootloader程序的待跳轉狀態根據等待超時、升級狀態分別進入默認應用程序區或升級應用程序區。
升級服務器是普通PC機,通過USB-CAN接口卡實現與CAN總線的連接。因此,升級服務器首先初始化并配置USB-CAN接口卡,通過以下步驟實現:
①打開USB-CAN接口卡對應的COM口。
②配置相應COM口波特率、校驗位等參數。
③通過向COM口發送配置信息,對USB-CAN接口卡進行參數配置。
其中,應設置USB-CAN接口卡波特率與外部CAN總線網絡的波特率相匹配;接著,升級服務器將對升級程序的二進制文件進行操作,該二進制文件在編譯器對節點升級程序進行編譯時生成,也可通過對生成的HEX文件進行轉換得到。首先,升級服務器獲取文件大小N KB,將該數值N傳遞給升級命令,節點端接收升級命令的同時可獲取文件大小,從而確定IAP編程次數;然后,升級服務器將該二進制文件讀入內存中,在升級開始后,根據升級協議的相關格式將數據進行封裝并發送到相應節點端。
升級服務器也可根據需要選擇不同的升級模式。可供選擇的升級模式有:單節點升級模式和多節點同時升級模式。單節點和多節點同時升級的區別在于,多節點升級利用了CAN總線節點可接收廣播數據的特性,通過配置USB-CAN接口卡的ID過濾器,升級服務器可接收相應節點發送的確認信息,實現多個節點同時升級的操作。升級服務器的軟件界面如圖8所示。

圖8 CAN總線節點升級服務器軟件界面
本文結合特種纖維檢測控制系統現有的CAN總線網絡和節點的IAP功能,設計了節點在線升級系統。參考TFTP協議,設計了一種適用于CAN總線網絡的系統升級協議。通過將節點端的片上Flash進行功能分區,實現了在升級出現錯誤時維持節點穩定運行。根據實際應用需要,服務器端選擇相應升級模式,提高了升級效率。系統的實際運行結果表明,升級操作簡單高效,節點在升級后運行穩定,系統性能良好。CAN總線網絡和智能節點廣泛應用在工業控制等領域,該系統為節點升級的實際需求提供了一種可行的解決方案。
[1]杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003.
[2]汪小燕,連曉平,董燕,等.基于TFTP協議的嵌入式系統開發方法設計與實現[J].華中科技大學學報,2006,34(12):56 -58.
[3]李真花,崔健.CAN總線輕松入門與實踐[M].北京:北京航空航天大學出版社,2011.
[4]王邦繼,劉慶想,李相強,等.CAN總線應用層協議的研究與實現[J].計算機工程與應用,2011,47(20):14-16.
[5]朱飛龍,楊鳴.基于IAP功能單片機的遠程更新系統設計[J].機電工程,2010,27(9):76-79.
[6]梁松濤.基于TFTP協議的嵌入式遠程數據傳輸系統的研究[D].北京:北京工業大學,2008.
王建斌(碩士研究生),研究方向為嵌入式系統應用;江冰(教授),研究領域為通信與信息系統。
Remote Online Upgrade System Based on CAN Bus Node
Wang Jianbin,Jiang Bing
(College of Internet of Things Engineering,Hohai University,Changzhou 213022,China)
Aiming at the nodes software upgrading difficulty of special fiber detection and control system,a remote online upgrade system based on CAN bus application layer protocol is designed.The single node upgrade mode and multi-nodes upgrade mode are achieved.Experimental results indicate that the system is high reliable,convenient to operate and stable,and the system has
ignificance for the node upgrading in general industrial network.
online upgrade;CAN bus;application layer protocol;IAP;LPC4357;Cortex-M4
TP399
A
??薛士然
2015-02-06)