基于CAN總線(xiàn)節點(diǎn)的遠程在線(xiàn)升級系統設計
引言
本文引用地址:http://dyxdggzs.com/article/201610/306152.htm特種纖維檢測控制系統是對生產(chǎn)線(xiàn)上產(chǎn)出的纖維產(chǎn)品各種參數進(jìn)行實(shí)時(shí)檢測和設備的控制裝置。系統由多個(gè)數據采集節點(diǎn)組成,通過(guò)CAN總線(xiàn)網(wǎng)絡(luò )將數據匯總到主節點(diǎn),主節點(diǎn)對數據進(jìn)行處理、分析后輸出相應的控制信號,實(shí)現對生產(chǎn)線(xiàn)設備的實(shí)時(shí)調整和控制。傳統情況下,如果需要針對節點(diǎn)進(jìn)行軟件升級更新,就需要專(zhuān)業(yè)技術(shù)人員到生產(chǎn)現場(chǎng),通過(guò)專(zhuān)用的下載設備進(jìn)行程序燒錄更新,使系統維護成本大幅提高,降低了生產(chǎn)效率。因此,結合特種纖維檢測控制系統現有的CAN總線(xiàn)網(wǎng)絡(luò ),并利用節點(diǎn)微控制器的IAP功能,設計一個(gè)節點(diǎn)遠程在線(xiàn)升級系統十分有必要。
本文在實(shí)現CAN總線(xiàn)報文數據收發(fā)的基礎上,參考TCP/IP協(xié)議中的TFTP協(xié)議規范,設計了一個(gè)簡(jiǎn)單實(shí)用的系統在線(xiàn)升級應用層協(xié)議,并結合微控制器的IAP功能,實(shí)現待升級節點(diǎn)軟件升級的目的。
1 IAP技術(shù)及升級系統總體結構
1.1 IAP技術(shù)及其編程實(shí)現
IAP(In Application Programming,在應用中編程)是指用戶(hù)在運行應用程序過(guò)程中通過(guò)程序控制實(shí)現對片上Flash存儲器的擦除和讀/寫(xiě)等操作。IAP技術(shù)是實(shí)現系統在線(xiàn)升級的必要前提,本系統中待升級節點(diǎn)采用NXP公司的基于Cortex—M4內核的微控制器LPC4357。該芯片集成了功能強大的IAP技術(shù),可以單次最多向目標Flash中寫(xiě)入4 KB數據。
IAP的功能函數被固化在ROM的Boot中。以LPC4357為例,ROM的地址0x 1040 0100作為指針指向IAP功能函數入口地址IAP_entry,因此當使用C語(yǔ)言編寫(xiě)調用函數時(shí),首先定義IAP入口地址。在進(jìn)行IAP函數調用時(shí),通過(guò)寄存器R0 作為指針來(lái)傳遞命令代碼和參數。IAP命令的返回結果通過(guò)寄存器R1作為指針來(lái)傳遞。
實(shí)現節點(diǎn)軟件升級的關(guān)鍵一步就是將CAN總線(xiàn)接收的代碼數據通過(guò)IAP編程到指定的片上Flash的扇區。IAP通過(guò)以下幾個(gè)步驟實(shí)現編程操作:IAP初始化、準備扇區、擦除扇區、準備扇區、編程扇區和數據校驗。
1.2 在線(xiàn)升級系統總體結構
系統由檢測節點(diǎn)、CAN總線(xiàn)網(wǎng)絡(luò )和升級服務(wù)器組成。其中檢測節點(diǎn)和CAN總線(xiàn)網(wǎng)絡(luò )是特種纖維檢測控制系統的組成部分,因此,只要將升級服務(wù)器接入CAN總線(xiàn)網(wǎng)絡(luò ),就可以搭建在線(xiàn)升級系統的硬件平臺。升級系統總體框圖如圖1所示。

升級系統的軟件由節點(diǎn)端軟件和服務(wù)器端軟件組成,節點(diǎn)端和服務(wù)器端通過(guò)CAN總線(xiàn)進(jìn)行數據交互,在此基礎上,設計CAN應用層協(xié)議。本文通過(guò)分析TCP/IP協(xié)議中的TFTP協(xié)議規范,設計了一款簡(jiǎn)單實(shí)用而且適用于CAN總線(xiàn)網(wǎng)絡(luò )的系統升級協(xié)議。升級系統協(xié)議分層結構如圖2所示。

2 系統升級協(xié)議設計
2.1 TFTP協(xié)議及文件傳輸基本流程
TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的應用層協(xié)議,基于UDP傳輸協(xié)議。最初用來(lái)引導無(wú)盤(pán)系統,主要用于傳輸小文件。TFTP協(xié)議報文分為:讀/寫(xiě)請求報文、數據包報文、確認信息報文以及差錯報文。TFTP報文格式如圖3所示。

TFTP客戶(hù)端首先向服務(wù)器的端口69發(fā)送文件下載/上傳請求,請求的相應報文格式如圖3(a)所示。服務(wù)器接收請求后打開(kāi)一個(gè)新的端口與客戶(hù)端進(jìn)行通信,服務(wù)器端口69則繼續等待其他客戶(hù)端的請求,從而實(shí)現同時(shí)響應多個(gè)客戶(hù)端的文件傳輸請求。當客戶(hù)端發(fā)送的文件下載請求得到服務(wù)器ACK確認后,開(kāi)始發(fā)送編號為1的數據包,數據包的報文格式如圖3(b)所示。每個(gè)數據包的大小為固定的512字節,服務(wù)器每次發(fā)送數據包之前都必須得到客戶(hù)端的ACK確認。當客戶(hù)端接收到小于固定字節的數據包時(shí),則認為文件傳輸結束。
TFTP協(xié)議也提供了相應的錯誤處理機制。服務(wù)器端和客戶(hù)端都可實(shí)現超時(shí)重傳,只要有一端出現超時(shí),就將重傳丟失的報文,從而有效的提高文件傳輸的正確率。在傳輸過(guò)程中出現錯誤時(shí),服務(wù)器端向客戶(hù)端發(fā)送差錯報文。
2.2 系統升級協(xié)議的報文格式
CAN總線(xiàn)協(xié)議定義了5種類(lèi)型的幀:數據幀、遙控幀、錯誤幀、過(guò)載幀、間隔幀。其中,數據幀用于發(fā)送單元向接收單元傳送數據。數據幀格式分為標準格式和擴展格式,兩者區別在于標識符分別占11位和29位,這里僅使用標準格式的數據幀作為節點(diǎn)和升級服務(wù)器通信的基本單位。
由于一個(gè)數據幀最多只能攜帶8字節數據,而在一般文件傳輸應用中數據以數據塊的形式進(jìn)行傳輸,因此在文件傳輸時(shí)需要進(jìn)行數據拆分、重組的操作。在應用層的數據報文中對這一操作進(jìn)行屏蔽,具體操作通過(guò)底層協(xié)議實(shí)現,因此這里僅需關(guān)心數據幀的數據段。升級協(xié)議的報文分為:升級命令、數據包、確認信息、錯誤信息,相應的報文格式如圖4所示。
升級命令由升級服務(wù)器發(fā)出,ID號用于確認待升級節點(diǎn),升級模式分為單節點(diǎn)升級模式和多節點(diǎn)同時(shí)升級模式。數據包用于服務(wù)器向節點(diǎn)傳輸升級所需的二進(jìn)制文件,每個(gè)數據包攜帶固定的1024字節數據,這是因為節點(diǎn)利用IAP技術(shù)進(jìn)行軟件升級時(shí),每次對片上Flash編程的字節數是固定的,可選512字節、1024字節、4096字節3個(gè)選項,這里選用1024字節。確認信息和錯誤信息參考TFTP協(xié)議的相應報文格式。
2.3 系統升級協(xié)議及文件傳輸流程
系統升級命令由升級服務(wù)器發(fā)出,節點(diǎn)在接收到升級命令后通過(guò)校驗ID號判斷升級模式,進(jìn)入相應的升級狀態(tài),并向服務(wù)器發(fā)送確認信息ACK。升級服務(wù)器接收到ACK確認后,開(kāi)始發(fā)送編號為1的數據包,節點(diǎn)接收到數據包就立即將1024字節數據編程到片內Flash中,編程成功后返回ACK 1,以此類(lèi)推。如果最后一個(gè)數據包N的數據長(cháng)度小于1024字節,則自動(dòng)向數據包添加0,使數據包長(cháng)度正好為1024字節。
升級服務(wù)器接收到節點(diǎn)確認信息ACK N,表明節點(diǎn)升級完成。這里,節點(diǎn)端采用邊接收邊升級的方案。如果將升級文件全部接收后再進(jìn)行升級,則需要大量的RAM空間,一旦升級文件過(guò)大,節點(diǎn)升級就會(huì )失敗。系統升級流程如圖5所示。

2. 4 系統升級中的錯誤處理
在系統升級過(guò)程中,可能會(huì )出現發(fā)送數據包丟失、連接中斷的情況。當服務(wù)器端發(fā)送的數據包丟失或節點(diǎn)端接收該數據包失敗時(shí),節點(diǎn)端向服務(wù)器端發(fā)送錯誤信息。服務(wù)器端接收錯誤信息,根據錯誤內容判斷是否需要重新發(fā)送數據包。如果服務(wù)器端在一定時(shí)間內沒(méi)有接收到節點(diǎn)端的確認信息或錯誤信息,則認為系統升級失敗,服務(wù)器端會(huì )向節點(diǎn)端發(fā)送升級失敗的錯誤信息ERROR,節點(diǎn)端接收該信息后進(jìn)入升級失敗狀態(tài)。
3 節點(diǎn)端軟件升級協(xié)議的實(shí)現
檢測節點(diǎn)采用NXP公司的基于Cortex-M4內核的微控制器LPC4357作為數據采集和控制核心,片上集成了1MB的Flash,分為BankA和BankB兩個(gè)存儲體,每個(gè)存儲體各占512KB。
節點(diǎn)程序分為兩部分:Bootloader升級程序和APP應用程序。APP應用程序分為兩個(gè)區:默認應用程序區和升級應用程序區。片上Flash功能分區如圖6所示。

Bootloader升級程序燒錄在片上Flash的BankA扇區0處,占用8KB空間。系統啟動(dòng)時(shí),最先執行該處程序,首先進(jìn)行系統初始化操作,包括CAN總線(xiàn)接口初始化、IAP初始化、讀器件ID號等。初始化完成后,進(jìn)入等待升級狀態(tài)。在該狀態(tài)下,如果接收到升級服務(wù)器發(fā)送的升級命令,則進(jìn)入升級狀態(tài)。系統升級成功后進(jìn)入待跳轉狀態(tài),最后系統跳轉到升級后的應用程序區。節點(diǎn)升級狀態(tài)轉換圖如圖7所示。

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

結語(yǔ)
本文結合特種纖維檢測控制系統現有的CAN總線(xiàn)網(wǎng)絡(luò )和節點(diǎn)的IAP功能,設計了節點(diǎn)在線(xiàn)升級系統。參考TFTP協(xié)議,設計了一種適用于CAN總線(xiàn)網(wǎng)絡(luò )的系統升級協(xié)議。通過(guò)將節點(diǎn)端的片上Flash進(jìn)行功能分區,實(shí)現了在升級出現錯誤時(shí)維持節點(diǎn)穩定運行。根據實(shí)際應用需要,服務(wù)器端選擇相應升級模式,提高了升級效率。系統的實(shí)際運行結果表明,升級操作簡(jiǎn)單高效,節點(diǎn)在升級后運行穩定,系統性能良好。CAN總線(xiàn)網(wǎng)絡(luò )和智能節點(diǎn)廣泛應用在工業(yè)控制等領(lǐng)域,該系統為節點(diǎn)升級的實(shí)際需求提供了一種可行的解決方案。
評論