余楚禮 夏鵬 齊同啟 馬敬德
(天津清源電動車輛有限責任公司)
根據GB/T 32960—2016《電動汽車遠程服務與管理系統技術規范》[1]要求,電動汽車需要配備車聯網終端,用于監控車輛的運行狀態、故障狀態、電池狀態、電機狀態及運行里程等信息。由于監控需求的變化,車聯網終端的軟件和配置文件的更新是必須的。傳統的車載電控單元的更新方法是使用串口或者CAN卡逐臺更新[2],效率低下,會消耗大量的人力物力。車聯網終端本身是可以和服務器進行通信的,因此讓車聯網直接聯網更新自身軟件程序和配置文件是完全可行的。車聯網終端設計和平臺設計相關的研究很多[3-7],但是車聯網終端的遠程更新相關的研究很少。文章設計了一種更新系統,讓車聯網終端能借助4G網絡對自身固件進行更新。由于網絡傳輸和數據存儲過程中的不可靠性,數據的每一步確認都使用了md5校驗,來確保刷寫到終端程序的完整性。

系統由車載終端、服務器及PC客戶端3個部分組成,這3個部分完成固件更新的整體進程如下。
1)PC客戶端將開發人員持續完善的新固件程序傳輸到服務器,同時發送固件程序數據的md5校驗碼和版本號。服務器接收PC客戶端的新固件程序數據和md5校驗碼,并計算接收到的新固件程序數據的md5校驗碼,核對無誤后將固件程序數據、md5校驗碼及版本號存入到數據庫。
2)服務器接收終端的登錄請求和終端的版本信息,比較版本號,如果版本號不一致,發送更新的指令。
3)終端接收服務器發送的固件程序數據存入到閃存中,接收md5校驗碼和版本號存入到閃存中,計算固件程序數據的md5校驗碼,核對無誤后設置更新標志。
4)終端重啟,讀取更新標志,如果需要更新,計算閃存中新固件程序數據的md5校驗碼,核對無誤后刷寫終端的程序閃存更新固件,并更新版本號,清除更新標志。
由于固件更新過程中要進行多次的傳輸和寫入,因此為了確保數據的完整性,采用了md5校驗的方法保證數據的完整性。
md5是計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。md5算法具有4個特點:1)壓縮性。任意長度的數據,算出的md5值長度都是固定的。2)容易計算。從原數據計算出md5值很容易。3)抗修改性。對原數據進行任何改動,哪怕只修改1個字節,所得到的md5值都有很大區別。4)強抗碰撞。已知原數據和其md5值,想找到一個具有相同md5值的數據(即偽造數據)是非常困難的。
基于以上原因,md5能夠保證數據的完整性。
現代的汽車電控單元一般都會設計Boot Loader程序,Boot Loader程序的作用是用來更新固件程序和引導進入固件程序。
車聯網終端的程序由Boot Loader程序和固件程序兩部分組成,啟動過程如下。
1)Boot Loader程序首先從閃存讀取固件升級標志位。如果沒有更新要求,直接跳轉到步驟3)。
2)讀取存儲在閃存上的固件,計算md5,并和存儲在閃存上的md5進行比較,如果相同,進行固件更新,在固件程序更新完成后,清除固件程序更新標志位;如果md5校驗失敗,不進行固件更新,直接清除固件更新標志位,跳轉到固件程序。
3)固件程序開啟CAN卡、GPS模塊及4G模塊。通過4G模塊連接服務器,連接成功后發送Sim卡的iccid卡號進行登錄。登錄成功后,發送當前固件版本信息,接收服務器端的反饋信息。如果服務器不要求更新固件,按照文獻[1]的要求周期發送相關信息。如果服務器要求更新固件,則固件程序接收數據和md5校驗碼,寫入到閃存中,核對無誤后設置更新標志。待下次上電后,Boot Loader程序檢查更新標志,如果更新標志被設置了,則刷寫程序Fl ash更新固件程序。
車聯網終端程序的流程,如圖1所示。

圖1 車聯網終端啟動流程圖
PC客戶端負責將新版固件程序傳送到服務器。PC客戶端的程序流程如下:
1)載入包含新固件程序的文件,計算md5校驗碼;
2)請求服務器接收新固件;
3)發送新固件程序的數據、md5校驗碼及版本號到服務器;
4)接收服務器的反饋,完成更新過程。
PC客戶端運行流程,如圖2所示;PC客戶端操作顯示界面,如圖3所示。

圖2 PC客戶端運行流程圖

圖3 PC客戶端操作顯示界面
客戶端選擇Load File載入數據后,填入新的版本號,選擇Update后即可以將新固件程序寫入到服務器數據庫,當終端連接服務器時完成更新。
服務器端相關程序分為兩部分。
第1部分是響應PC客戶端的固件更新命令,具體流程:1)接收到PC客戶端固件程序更新請求,命令PC客戶端發送相關數據;2)接收PC客戶端發送的新固件程序數據、md5校驗碼及版本號;3)計算新固件程序數據的md5,核對無誤后寫入到數據庫;4)通知PC客戶端新固件程序更新成功。
服務器端響應PC客戶端的運行流程,如圖4所示。

圖4 服務器端響應PC客戶端的運行流程圖
第2部分程序是響應車聯網終端的,具體流程:1)響應車聯網終端的登錄請求,如果身份驗證合格,接收連接;2)接收車聯網終端的版本信息數據,并與服務器端數據庫內的版本數據進行比對,告知車聯網終端是否需要更新;3)如果無需更新,直接按照GB/T 32960的要求執行;4)如果需要更新,發送新固件程序數據、md5校驗碼及版本號到車聯網終端。
服務器端響應車聯網終端的運行流程,如圖5所示。

圖5 服務器端響應車聯網終端的運行流程圖
文章基于GB/T 32960設計了車聯網終端的固件自更新系統,實際測試顯示固件程序更新系統運行穩定可靠。由于使用4G模塊進行聯網下載,徹底擺脫了人力干預,無需車主去售后服務站進行固件更新,減輕了售后服務站的工作難度;同時固件程序的更新能夠做到更及時以便修復潛在的bug。因為固件程序的安全要求很高,整個更新的過程中進行了4次md5計算校驗,確保寫入到車聯網終端上的固件程序的完整性。