基于CAN總線節(jié)點的遠(yuǎn)程在線升級系統(tǒng)設(shè)計
引言
本文引用地址:http://m.butianyuan.cn/article/201610/306152.htm特種纖維檢測控制系統(tǒng)是對生產(chǎn)線上產(chǎn)出的纖維產(chǎn)品各種參數(shù)進(jìn)行實時檢測和設(shè)備的控制裝置。系統(tǒng)由多個數(shù)據(jù)采集節(jié)點組成,通過CAN總線網(wǎng)絡(luò)將數(shù)據(jù)匯總到主節(jié)點,主節(jié)點對數(shù)據(jù)進(jìn)行處理、分析后輸出相應(yīng)的控制信號,實現(xiàn)對生產(chǎn)線設(shè)備的實時調(diào)整和控制。傳統(tǒng)情況下,如果需要針對節(jié)點進(jìn)行軟件升級更新,就需要專業(yè)技術(shù)人員到生產(chǎn)現(xiàn)場,通過專用的下載設(shè)備進(jìn)行程序燒錄更新,使系統(tǒng)維護(hù)成本大幅提高,降低了生產(chǎn)效率。因此,結(jié)合特種纖維檢測控制系統(tǒng)現(xiàn)有的CAN總線網(wǎng)絡(luò),并利用節(jié)點微控制器的IAP功能,設(shè)計一個節(jié)點遠(yuǎn)程在線升級系統(tǒng)十分有必要。
本文在實現(xiàn)CAN總線報文數(shù)據(jù)收發(fā)的基礎(chǔ)上,參考TCP/IP協(xié)議中的TFTP協(xié)議規(guī)范,設(shè)計了一個簡單實用的系統(tǒng)在線升級應(yīng)用層協(xié)議,并結(jié)合微控制器的IAP功能,實現(xiàn)待升級節(jié)點軟件升級的目的。
1 IAP技術(shù)及升級系統(tǒng)總體結(jié)構(gòu)
1.1 IAP技術(shù)及其編程實現(xiàn)
IAP(In Application Programming,在應(yīng)用中編程)是指用戶在運行應(yīng)用程序過程中通過程序控制實現(xiàn)對片上Flash存儲器的擦除和讀/寫等操作。IAP技術(shù)是實現(xiàn)系統(tǒng)在線升級的必要前提,本系統(tǒng)中待升級節(jié)點采用NXP公司的基于Cortex—M4內(nèi)核的微控制器LPC4357。該芯片集成了功能強(qiáng)大的IAP技術(shù),可以單次最多向目標(biāo)Flash中寫入4 KB數(shù)據(jù)。
IAP的功能函數(shù)被固化在ROM的Boot中。以LPC4357為例,ROM的地址0x 1040 0100作為指針指向IAP功能函數(shù)入口地址IAP_entry,因此當(dāng)使用C語言編寫調(diào)用函數(shù)時,首先定義IAP入口地址。在進(jìn)行IAP函數(shù)調(diào)用時,通過寄存器R0 作為指針來傳遞命令代碼和參數(shù)。IAP命令的返回結(jié)果通過寄存器R1作為指針來傳遞。
實現(xiàn)節(jié)點軟件升級的關(guān)鍵一步就是將CAN總線接收的代碼數(shù)據(jù)通過IAP編程到指定的片上Flash的扇區(qū)。IAP通過以下幾個步驟實現(xiàn)編程操作:IAP初始化、準(zhǔn)備扇區(qū)、擦除扇區(qū)、準(zhǔn)備扇區(qū)、編程扇區(qū)和數(shù)據(jù)校驗。
1.2 在線升級系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)由檢測節(jié)點、CAN總線網(wǎng)絡(luò)和升級服務(wù)器組成。其中檢測節(jié)點和CAN總線網(wǎng)絡(luò)是特種纖維檢測控制系統(tǒng)的組成部分,因此,只要將升級服務(wù)器接入CAN總線網(wǎng)絡(luò),就可以搭建在線升級系統(tǒng)的硬件平臺。升級系統(tǒng)總體框圖如圖1所示。
升級系統(tǒng)的軟件由節(jié)點端軟件和服務(wù)器端軟件組成,節(jié)點端和服務(wù)器端通過CAN總線進(jìn)行數(shù)據(jù)交互,在此基礎(chǔ)上,設(shè)計CAN應(yīng)用層協(xié)議。本文通過分析TCP/IP協(xié)議中的TFTP協(xié)議規(guī)范,設(shè)計了一款簡單實用而且適用于CAN總線網(wǎng)絡(luò)的系統(tǒng)升級協(xié)議。升級系統(tǒng)協(xié)議分層結(jié)構(gòu)如圖2所示。
2 系統(tǒng)升級協(xié)議設(shè)計
2.1 TFTP協(xié)議及文件傳輸基本流程
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的應(yīng)用層協(xié)議,基于UDP傳輸協(xié)議。最初用來引導(dǎo)無盤系統(tǒng),主要用于傳輸小文件。TFTP協(xié)議報文分為:讀/寫請求報文、數(shù)據(jù)包報文、確認(rèn)信息報文以及差錯報文。TFTP報文格式如圖3所示。
TFTP客戶端首先向服務(wù)器的端口69發(fā)送文件下載/上傳請求,請求的相應(yīng)報文格式如圖3(a)所示。服務(wù)器接收請求后打開一個新的端口與客戶端進(jìn)行通信,服務(wù)器端口69則繼續(xù)等待其他客戶端的請求,從而實現(xiàn)同時響應(yīng)多個客戶端的文件傳輸請求。當(dāng)客戶端發(fā)送的文件下載請求得到服務(wù)器ACK確認(rèn)后,開始發(fā)送編號為1的數(shù)據(jù)包,數(shù)據(jù)包的報文格式如圖3(b)所示。每個數(shù)據(jù)包的大小為固定的512字節(jié),服務(wù)器每次發(fā)送數(shù)據(jù)包之前都必須得到客戶端的ACK確認(rèn)。當(dāng)客戶端接收到小于固定字節(jié)的數(shù)據(jù)包時,則認(rèn)為文件傳輸結(jié)束。
TFTP協(xié)議也提供了相應(yīng)的錯誤處理機(jī)制。服務(wù)器端和客戶端都可實現(xiàn)超時重傳,只要有一端出現(xiàn)超時,就將重傳丟失的報文,從而有效的提高文件傳輸?shù)恼_率。在傳輸過程中出現(xiàn)錯誤時,服務(wù)器端向客戶端發(fā)送差錯報文。
2.2 系統(tǒng)升級協(xié)議的報文格式
CAN總線協(xié)議定義了5種類型的幀:數(shù)據(jù)幀、遙控幀、錯誤幀、過載幀、間隔幀。其中,數(shù)據(jù)幀用于發(fā)送單元向接收單元傳送數(shù)據(jù)。數(shù)據(jù)幀格式分為標(biāo)準(zhǔn)格式和擴(kuò)展格式,兩者區(qū)別在于標(biāo)識符分別占11位和29位,這里僅使用標(biāo)準(zhǔn)格式的數(shù)據(jù)幀作為節(jié)點和升級服務(wù)器通信的基本單位。
由于一個數(shù)據(jù)幀最多只能攜帶8字節(jié)數(shù)據(jù),而在一般文件傳輸應(yīng)用中數(shù)據(jù)以數(shù)據(jù)塊的形式進(jìn)行傳輸,因此在文件傳輸時需要進(jìn)行數(shù)據(jù)拆分、重組的操作。在應(yīng)用層的數(shù)據(jù)報文中對這一操作進(jìn)行屏蔽,具體操作通過底層協(xié)議實現(xiàn),因此這里僅需關(guān)心數(shù)據(jù)幀的數(shù)據(jù)段。升級協(xié)議的報文分為:升級命令、數(shù)據(jù)包、確認(rèn)信息、錯誤信息,相應(yīng)的報文格式如圖4所示。
升級命令由升級服務(wù)器發(fā)出,ID號用于確認(rèn)待升級節(jié)點,升級模式分為單節(jié)點升級模式和多節(jié)點同時升級模式。數(shù)據(jù)包用于服務(wù)器向節(jié)點傳輸升級所需的二進(jìn)制文件,每個數(shù)據(jù)包攜帶固定的1024字節(jié)數(shù)據(jù),這是因為節(jié)點利用IAP技術(shù)進(jìn)行軟件升級時,每次對片上Flash編程的字節(jié)數(shù)是固定的,可選512字節(jié)、1024字節(jié)、4096字節(jié)3個選項,這里選用1024字節(jié)。確認(rèn)信息和錯誤信息參考TFTP協(xié)議的相應(yīng)報文格式。
2.3 系統(tǒng)升級協(xié)議及文件傳輸流程
系統(tǒng)升級命令由升級服務(wù)器發(fā)出,節(jié)點在接收到升級命令后通過校驗ID號判斷升級模式,進(jìn)入相應(yīng)的升級狀態(tài),并向服務(wù)器發(fā)送確認(rèn)信息ACK。升級服務(wù)器接收到ACK確認(rèn)后,開始發(fā)送編號為1的數(shù)據(jù)包,節(jié)點接收到數(shù)據(jù)包就立即將1024字節(jié)數(shù)據(jù)編程到片內(nèi)Flash中,編程成功后返回ACK 1,以此類推。如果最后一個數(shù)據(jù)包N的數(shù)據(jù)長度小于1024字節(jié),則自動向數(shù)據(jù)包添加0,使數(shù)據(jù)包長度正好為1024字節(jié)。
升級服務(wù)器接收到節(jié)點確認(rèn)信息ACK N,表明節(jié)點升級完成。這里,節(jié)點端采用邊接收邊升級的方案。如果將升級文件全部接收后再進(jìn)行升級,則需要大量的RAM空間,一旦升級文件過大,節(jié)點升級就會失敗。系統(tǒng)升級流程如圖5所示。
2. 4 系統(tǒng)升級中的錯誤處理
在系統(tǒng)升級過程中,可能會出現(xiàn)發(fā)送數(shù)據(jù)包丟失、連接中斷的情況。當(dāng)服務(wù)器端發(fā)送的數(shù)據(jù)包丟失或節(jié)點端接收該數(shù)據(jù)包失敗時,節(jié)點端向服務(wù)器端發(fā)送錯誤信息。服務(wù)器端接收錯誤信息,根據(jù)錯誤內(nèi)容判斷是否需要重新發(fā)送數(shù)據(jù)包。如果服務(wù)器端在一定時間內(nèi)沒有接收到節(jié)點端的確認(rèn)信息或錯誤信息,則認(rèn)為系統(tǒng)升級失敗,服務(wù)器端會向節(jié)點端發(fā)送升級失敗的錯誤信息ERROR,節(jié)點端接收該信息后進(jìn)入升級失敗狀態(tài)。
3 節(jié)點端軟件升級協(xié)議的實現(xiàn)
檢測節(jié)點采用NXP公司的基于Cortex-M4內(nèi)核的微控制器LPC4357作為數(shù)據(jù)采集和控制核心,片上集成了1MB的Flash,分為BankA和BankB兩個存儲體,每個存儲體各占512KB。
節(jié)點程序分為兩部分:Bootloader升級程序和APP應(yīng)用程序。APP應(yīng)用程序分為兩個區(qū):默認(rèn)應(yīng)用程序區(qū)和升級應(yīng)用程序區(qū)。片上Flash功能分區(qū)如圖6所示。
Bootloader升級程序燒錄在片上Flash的BankA扇區(qū)0處,占用8KB空間。系統(tǒng)啟動時,最先執(zhí)行該處程序,首先進(jìn)行系統(tǒng)初始化操作,包括CAN總線接口初始化、IAP初始化、讀器件ID號等。初始化完成后,進(jìn)入等待升級狀態(tài)。在該狀態(tài)下,如果接收到升級服務(wù)器發(fā)送的升級命令,則進(jìn)入升級狀態(tài)。系統(tǒng)升級成功后進(jìn)入待跳轉(zhuǎn)狀態(tài),最后系統(tǒng)跳轉(zhuǎn)到升級后的應(yīng)用程序區(qū)。節(jié)點升級狀態(tài)轉(zhuǎn)換圖如圖7所示。
當(dāng)Bootloader初始化完成且等待升級命令超時后,系統(tǒng)跳轉(zhuǎn)到APP應(yīng)用程序的默認(rèn)應(yīng)用程序區(qū),開始執(zhí)行節(jié)點應(yīng)用程序。應(yīng)用程序除了完成數(shù)據(jù)采集和CAN總線數(shù)據(jù)傳輸功能,還能在接收到升級服務(wù)器的升級命令時,中止系統(tǒng)運行并跳至Bootloader區(qū),進(jìn)入系統(tǒng)升級狀態(tài)。
由于系統(tǒng)啟動時不是直接開始執(zhí)行APP應(yīng)用程序,而是從Bootloader程序跳轉(zhuǎn)進(jìn)入該處程序,因此,在APP應(yīng)用程序初始化之前必須將中斷向量表重映射,防止APP應(yīng)用程序發(fā)生中斷時進(jìn)入Bootloader程序的中斷函數(shù)。
當(dāng)升級失敗時跳轉(zhuǎn)到默認(rèn)應(yīng)用程序區(qū),使系統(tǒng)在升級出錯時依然能夠正常運行。系統(tǒng)升級時,對升級應(yīng)用程序區(qū)進(jìn)行擦除、編程操作,升級成功后進(jìn)入該程序區(qū)執(zhí)行升級后的應(yīng)用程序。Bootloader程序的待跳轉(zhuǎn)狀態(tài)根據(jù)等待超時、升級狀態(tài)分別進(jìn)入默認(rèn)應(yīng)用程序區(qū)或升級應(yīng)用程序區(qū)。
4 升級服務(wù)器端軟件設(shè)計
升級服務(wù)器是普通PC機(jī),通過USB-CAN接口卡實現(xiàn)與CAN總線的連接。因此,升級服務(wù)器首先初始化并配置USB—CAN接口卡,通過以下步驟實現(xiàn):
①打開USB—CAN接口卡對應(yīng)的COM口。
②配置相應(yīng)COM口波特率、校驗位等參數(shù)。
③通過向COM口發(fā)送配置信息,對USB—CAN接口卡進(jìn)行參數(shù)配置。
其中,應(yīng)設(shè)置USB-CAN接口卡波特率與外部CAN總線網(wǎng)絡(luò)的波特率相匹配;接著,升級服務(wù)器將對升級程序的二進(jìn)制文件進(jìn)行操作,該二進(jìn)制文件在編譯器對節(jié)點升級程序進(jìn)行編譯時生成,也可通過對生成的HEX文件進(jìn)行轉(zhuǎn)換得到。首先,升級服務(wù)器獲取文件大小N KB,將該數(shù)值N傳遞給升級命令,節(jié)點端接收升級命令的同時可獲取文件大小,從而確定IAP編程次數(shù);然后,升級服務(wù)器將該二進(jìn)制文件讀入內(nèi)存中,在升級開始后,根據(jù)升級協(xié)議的相關(guān)格式將數(shù)據(jù)進(jìn)行封裝并發(fā)送到相應(yīng)節(jié)點端。
升級服務(wù)器也可根據(jù)需要選擇不同的升級模式??晒┻x擇的升級模式有:單節(jié)點升級模式和多節(jié)點同時升級模式。單節(jié)點和多節(jié)點同時升級的區(qū)別在于,多節(jié)點升級利用了CAN總線節(jié)點可接收廣播數(shù)據(jù)的特性,通過配置USB—CAN接口卡的ID過濾器,升級服務(wù)器可接收相應(yīng)節(jié)點發(fā)送的確認(rèn)信息,實現(xiàn)多個節(jié)點同時升級的操作。升級服務(wù)器的軟件界面如圖8所示。
結(jié)語
本文結(jié)合特種纖維檢測控制系統(tǒng)現(xiàn)有的CAN總線網(wǎng)絡(luò)和節(jié)點的IAP功能,設(shè)計了節(jié)點在線升級系統(tǒng)。參考TFTP協(xié)議,設(shè)計了一種適用于CAN總線網(wǎng)絡(luò)的系統(tǒng)升級協(xié)議。通過將節(jié)點端的片上Flash進(jìn)行功能分區(qū),實現(xiàn)了在升級出現(xiàn)錯誤時維持節(jié)點穩(wěn)定運行。根據(jù)實際應(yīng)用需要,服務(wù)器端選擇相應(yīng)升級模式,提高了升級效率。系統(tǒng)的實際運行結(jié)果表明,升級操作簡單高效,節(jié)點在升級后運行穩(wěn)定,系統(tǒng)性能良好。CAN總線網(wǎng)絡(luò)和智能節(jié)點廣泛應(yīng)用在工業(yè)控制等領(lǐng)域,該系統(tǒng)為節(jié)點升級的實際需求提供了一種可行的解決方案。
評論