許金鵬,李軍偉*,李連強,汪志瑩,董文龍
1.山東理工大學交通與車輛工程學院,山東 淄博 255049;2.一汽解放青島汽車有限公司,山東 青島 266217;3.北京裕峻汽車技術研究院,北京 100016
電控制動系統(electronic brake system,EBS)的制動性能與人們的行車安全密切相關,EBS控制器的升級優化是行車安全的重要保障。傳統的升級方式是拆開EBS控制器的外殼,利用各種調試接口,使用寫入器對控制器進行升級維護。這種升級方式的缺點是需要單獨引出下載接口,升級過程操作復雜,費時費力,同時有泄露源程序的風險。現在的升級方式主要是通過EBS的控制器局域網絡(controller area network,CAN)接口升級程序,該升級方式可以提高保密性,減少現場升級維護的時間及成本[1-3]。文獻[4]中基于S32R274芯片開發汽車電子控制單元引導加載程序,為單片機固件升級系統開發提供了技術參考。文獻[5]中將基于S32K148芯片的引導加載程序與汽車網關結合,實現了車輛網關模塊開發。本文中針對S32K144主控芯片,設計開發EBS固件升級系統,結合循環冗余校驗(cyclic redundancy check,CRC)算法,提高升級過程中的可靠性與穩定性,解決實際工程中EBS升級困難的問題。
EBS包括主控制器、前橋控制器和后橋控制器3個控制器。主控制器接收駕駛員發出的制動信號,信息處理后,發送給前、后橋控制器。前、后橋控制器接收到主控制器發來的信號后,控制常閉增壓電磁閥工作,輸出高壓氣體,分別控制前、后制動器工作。主控制器位于車輛內部,前、后橋控制器分別位于車輛的前、后橋位置,由于所在位置均不易拆卸,EBS后期升級維護比較困難。本文中采用CAN總線作為通信媒介,通過上位機向指定控制器發送特定的控制報文,指定控制器調用Flash模塊實現程序刷寫,實現EBS固件升級。
主控制器、前橋控制器和后橋控制器的主控芯片均為S32K144,控制器升級系統底層程序開發主要分為CAN模塊、Flash模塊、中斷向量表的重映射、S19文件解析、CRC校驗5部分。
1.2.1 CAN模塊
CAN模塊實現控制器主控芯片S32K144與上位機的通信。CAN模塊時鐘頻率設置為8 MHz,波特率設置為500 kbit/s,報文傳輸格式設置為標準幀,上位機向EBS控制器發送報文的標識符(identification,ID)定義為0x601,EBS控制器向上位機發送報文的ID定義為0x602。CAN模塊的接收緩沖區開啟ID濾波器,只接收固定ID的報文,防止升級過程中其他報文干擾,提高工作效率。
1.2.2 Flash模塊
Flash模塊實現對控制器單片機內存空間的擦除和寫入。S32K144芯片擁有512 kB的P_Flash內存空間,P_Flash內存空間主要存儲運行程序,斷電時不丟失數據,分為128個扇區,最小擦除單位為1個扇區,S32K144芯片的Flash不支持邊讀邊寫,需將執行擦除和寫入部分的代碼復制到隨機存取存儲器(random access memory,RAM)中運行,設置Flash通用命令寄存器FTFC_FCCOB0為0x09,可擦除某個扇區。設置FTFC_FCCOB0寄存器的為0x07,可寫入數據至單片機內存中。在單片機寫入前必須將該區域擦除,才能保證數據正確寫入。
S32K144單片機Flash內存空間存儲地址分為2部分:升級系統分配地址段為0x00000000~0x00008FFF,用來存儲固件升級系統的底層程序;用戶程序分配地址段為0x00009000~0x0007FFFF,用來存儲用戶程序。
1.2.3 中斷向量表的重映射
EBS固件升級系統底層程序的中斷向量表使用默認地址,地址段為0x00000000~0x00000400,將用戶程序中鏈接文件m_interrupts起始位置修改為0x00009000,可實現用戶程序中斷向量表重映射,用戶程序中斷向量表地址為0x00009000~0x00009400。
1.2.4 S19文件解析
S19文件由S32DS IDE開發環境編譯生成,用來存儲用戶程序。S19文件包括記錄數據的類型、剩余數據字節數、存儲地址、數據及校驗和,前2個字符用ASCII碼表示,其余數據用十六進制表示。記錄數據的類型字節數為2個,用S0、S1、S2、S3、S5、S7、S8、S9表示,S0表示記錄的開始,代表S19文件開始;S1、S2、S3分別表示需要寫入至單片機內存中的數據存儲地址長度為2個字節、3個字節、4個字節;S5不是每個S文件必須包含的,表示S1、S2、S3的個數;S7、S8、S9表示中止記錄,代表S19文件結束;剩余數據字節數表示存儲地址、數據以及校驗和的總字節數,字節數為1個;存儲地址表示該行S19數據在單片機中的具體地址;數據表示需更新寫入的代碼,字節數為0~32;校驗和字節數為1[6]。
S19文件寫入單片機內存時,要對S19文件每行數據解析與校驗,保證每行數據正確傳輸,具體流程如圖1所示。

圖1 解析與校驗一行S19記錄流程圖
由圖1可知:解析S19文件時先判斷該行寫入的數據首字符是否為S,若是則解析記錄數據的類型,確定存儲地址的長度,若不是S會返回錯誤指令;對剩余數據字節數、存儲地址、數據、校驗和分別進行解析;解析完畢后根據校驗和對該行需要寫入的數據進行校驗,校驗通過該行S19數據會寫入至單片機內存中,不通過則返回錯誤指令。
1.2.5 CRC校驗
EBS固件升級系統對數據的通信安全要求非常嚴格,如果用戶程序不能正確升級,控制器無法正常工作。CRC是數據通信中常用的查錯校驗方法,該方法基于線性編碼理論,對傳輸數據按照一定的規則進行多項式計算,保證數據傳輸的完整性和正確性[7]。基本原理為:將發送方發送的m位信息序列作為1個多項式的系數,按照某種規則產生CRC碼并發送出去;接收方接收到CRC碼,根據接收到的信息序列按照一定規則進行解析,確定傳輸過程是否出現錯誤。
發送方在編碼前由原始數據產生原始多項式p(x),p(x)最高次冪為m-1,選用CRC_16查表校驗法,生成多項式k(x)=x16+x15+x2+1,最高次冪為16,將原始多項式p(x)與x16相乘后除以k(x),所得的余式為q(x)[8],即為產生的CRC碼,將CRC碼按照一定的規則編碼后,得到的多項式
T(x)=x16p(x)+q(x)。
接收方將T(x)除以k(x),若余數為0,則傳輸正確,否則傳輸錯誤。S19所有傳輸數據寫入單片機內存后,對寫入的所有數據進行CRC計算,得到校驗碼A。上位機對發送給控制器的S19數據也進行同樣的CRC算法,得到校驗碼B,對比校驗碼A、B,若相同則證明寫入到控制器單片機內存的程序和S19文件完全相同,不同則證明寫入錯誤。
S32K144單片機使用ARM Cortex M系列的內核,每次單片機上電或復位后從Reset_Handler復位向量開始,對內部系統及RAM等進行初始化后再跳轉到main函數執行程序[9]。EBS 3個控制器芯片相同,升級工作流程相同,控制器升級工作流程如圖2所示。

圖2 控制器升級工作流程
1)當控制器上電或復位后,對單片機應用環境初始化,對時鐘模塊、CAN模塊、Flash模塊等初始化。
2)在主函數中等待3 s,如果3 s內收到來自上位機的升級指令,進入用戶升級程序,如果未收到來自上位機的升級指令,跳出升級程序,直接執行用戶程序。
3)執行用戶升級程序,對原來用戶程序的Flash區域進行擦除,擦除地址為0x9000~0x7FFFF。
4)單片機內存接收來自上位機傳輸的S19數據,接收1幀S19文件數據后保存至數組中,同時應答上位機。
5)上位機發送完1行S19數據后,發出完畢命令,控制器接收到命令后,將保存在數組中的整行S19文件數據進行解析校驗,校驗通過后應答上位機。
6)循環往復,直至上位機發送完畢所有S19文件數據。
7)單片機接收完來自上位機S19文件的所有數據后,對寫入至單片機內部所有數據進行CRC校驗,并與S19文件數據CRC校驗碼對比;若校驗通過,則回應上位機升級成功,跳轉至新用戶程序的開始地址執行程序;若校驗未通過,則回應上位機升級失敗,不執行新的用戶程序。
調用某公司CAN分析儀的相關庫函數,發送和接收CAN報文,實現上位機與控制器之間的信息交互[10]。
使用PyCharm中的工具包pyqt5調用QT Designer庫[11],搭建EBS固件升級系統上位機圖形界面,對搭建好的界面生成對應的Python界面配置代碼,如圖3所示。

圖3 上位機界面
由圖3可知,上位機界面主要分為CAN配置、下載設置2部分。CAN配置功能包括配置波特率、打開CAN卡、復位CAN卡以及關閉CAN卡。下載設置功能包括發送指定控制器(主控制器、前橋控制器、后橋控制器)升級命令報文、加載S19文件、開始更新、導出信息。發送指定控制器(主控制器、前橋控制器、后橋控制器)升級命令報文對應上位機3個不同按鍵,對應的升級命令分別為0xFF01、0xFF02、0xFF03。上位機顯示界面分為3個部分:顯示運行狀態、進度條、運行窗口。顯示運行狀態將上位機當前運行狀態在窗口中顯示,進度條顯示當前下載進度,運行窗口實時顯示S19文件下載到第幾行。
為實現上位機與控制器的正常通信,需要自定義通信協議[12-13]。本通信協議使用的CAN報文為標準幀,上位機使用CAN分析儀分別與主控制器、前橋控制器及后橋控制器進行通信,上位機與主控制器通信過程如圖4所示。

圖4 上位機與主控制器間的通信過程
1)上位機通過ID為0x601的報文發送主控制器開始升級命令(0xFF01),主控制器接收到命令后進入用戶升級程序。先對保存用戶程序的Flash區域進行擦除,擦除成功后,通過ID為0x602的報文向上位機發送0xAC,表示連接成功。
2)上位機收到0xAC后,通過ID為0x601的報文發送主控制器要刷寫的S19文件數據,主控制器接收數據后回應0xAC,發送1行S19數據完畢后,上位機通過ID為0x601的報文向主控制器發送0xFE,表示1行S19發送完畢。
3)主控制器收到0xFE后,將保存的1行S19數據寫入到指定的單片機內存,寫入成功后,通過ID為0x602的報文向上位機發送0xAC,表示刷寫成功。
4)循環往復,直至上位機將所有的S19文件數據發送完畢。
5)上位機通過ID為0x601的報文向主控制器發送0xFB以及該S19文件的CRC校驗碼,主控制器接收后對寫入到單片機內存的數據進行CRC校驗,得到另1個校驗碼,比較2個校驗碼,相同則表示數據寫入成功,主控制器通過報文ID為0x602的報文發送0xAB,表示寫入成功;不同表示寫入失敗,主控制器通過報文ID為0x602的報文發送0xAE,表示CRC校驗失敗,寫入失敗。
6)S19文件數據成功寫入后,主控制器跳出用戶升級程序,執行新的用戶程序,實現用戶程序在線升級。
7)某控制器在用戶程序刷寫時,另2個控制器正常工作。如3個控制器都需進行程序寫入,先選擇1個控制器進行程序寫入,完成后對下1個控制器進行程序寫入,依次完成在線升級。
在商用車氣壓制動系統臺架上進行EBS固件升級試驗。通過S32DS軟件對用戶程序編譯后生成S19文件,上位機CAN卡配置完畢后,點擊主控制器按鍵,完成上位機與主控制器的連接,之后點擊“加載文件”“開始更新”按鈕,主控制器開始升級用戶程序。升級后所有的按鈕變為不可使用狀態,防止誤觸導致程序下載失敗。當上位機的運行狀態框中出現“S文件更新完成”后,主控制器完成升級,使用相同的方式對前橋和后橋的控制器進行程序更新。
EBS系統的3個控制器升級完畢后,使用J_Link讀取單片機內存中的數據,并與下載的S19文件進行對比,驗證程序下載的完整性以及準確性。通過對比用戶程序的S19文件以及讀取的單片機內存數據,二者完全一致,用戶程序正確下載至單片機內存中。
將EBS的3個控制器安裝在商用車氣壓制動系統臺架上,進行制動試驗,踩下制動踏板后,前、后制動控制器工作,打開電磁閥,氣罐中的壓縮氣體被輸送到對應管路中實現制動,完成EBS控制器系統升級。
1)EBS固件升級系統實現了基于CAN總線通信技術的在線升級,方便了后期技術人員對EBS控制器的升級維護。
2)EBS固件升級系統對用戶程序進行了雙重校驗,S19文件每行數據按照S19文件解析校驗方式進行校驗,所有數據寫入單片機內存后進行1次CRC校驗,提高了升級系統的準確性。
3)EBS固件升級系統能夠滿足實際工程要求,解決了實車環境中EBS控制器升級困難的問題,提升了后期維護升級的便利性、安全性。