馬宏偉 吳長水



摘 ?要:統一診斷協議UDS是診斷服務的標準化規范,控制器ECU是電子控制單元。針對車載ECU在使用過程中,傳統的控制器ECU應用軟件升級方案比較煩瑣,需要將ECU拆卸下來在進行升級。本文以MPC5634M單片機作為控制器,基于UDS協議設計了一種ECU應用軟件在線升級方案。Bootloader是ECU上電后首先運行的軟件程序,CAN是一種串行通信。在CodeWarrior集成開發環境下,進行MPC5634M單片機Bootloader底層驅動開發,在VS平臺下進行上位機設計,通過周立功USB轉CAN,實現上位機和下位機CAN通信,并對ECU在線升級功能進行驗證。實驗結果表明:此設計通過CAN總線能穩定可靠的進行ECU在線系統升級,解決了傳統控制器ECU拆卸下來在進行應用程序升級的煩瑣問題,達到了應用軟件升級方便的設計需求。
關鍵詞:MPC5634M;UDS協議;在線升級
中圖分類號:TP311.52 ? ? 文獻標識碼:A
Abstract: The unified diagnostic protocol (UDS) is the standard specification for diagnostic services, and the controller ECU is the electronic control unit. The current updating scheme for the traditional controller ECU (Electronic Control Unit) application is so complicated that it should be dismantled for updating. In order to solve the above problem, a new scheme for online updating the ECU application is designed based on UDS protocol, using MPC5634M single-chip microcomputer as the controller. Bootloader is the first software program to run after ECU is powered on, and CAN (Controller Area Network) is a kind of serial communication. Under the CodeWarrior integrated development environment, the MPC5634M single-chip Bootloader bottom-layer driver development is carried out, and the host computer is designed on the Visual Studio platform. Through transferring Zhou Ligong USB to CAN (i.e, a product provided by Zhou Ligong Company), the communications between the host computer and the slave computer CAN is realized, and the ECU online updating function is verified. The results of the experiment show that this newly-designed scheme enables the ECU online system to update stably through the CAN bus, which meets the design requirements of convenient application updating and solve the problem of the existing scheme.
Keywords: MPC5634M; UDS protocol; online updating
1 ? 引言(Introduction)
在車載控制器ECU的使用過程中,通常需要進行應用層軟件的更新升級。傳統的ECU應用層程序升級方案比較煩瑣,需要將控制器ECU拆卸下來,使用專用的程序下載仿真器進行燒寫,嚴重影響了產品的開發周期。相比之下,控制器ECU在線升級可以很好的解決這一問題。
UDS協議[1]是在汽車電子ECU環境下的一種診斷通信協議,結合CAN通信機制可以縮短汽車電子開發周期和降低生產成本。目前,進行控制器ECU在線升級的研究有很多,例如:文獻基于CAN總線對CCP協議進行自定義,實現了控制器的在線升級[2]。文獻采用S19格式文件進行程序燒寫,實現了ECU在線升級[3]。文獻在控制器的Bootloader設計中,對CAN驅動和Flash驅動設計進行了詳細介紹[4]。文獻基于CAN FD軟件升級設計中,采用外部觸發方式進行ECU軟件升級[5],如果升級過程中出現掉電等現象,無法保證ECU再次上電后正確運行程序。本文在詳細分析UDS協議下載流程的基礎下,通過對MPC5634M底層相關驅動的配置開發,以及基于VS平臺進行上位機的設計,最終實現基于UDS協議的ECU在線升級。
2 ?UDS協議及系統組成(UDS protocol and system composition)
如表1所示,UDS協議定義了一系列服務命令,不同的服務命令都有自己獨立標識符。在CAN通信機制下,由上位機發起請求,下位機根據不同的請求命令進行響應。
2.1 ? UDS協議幀類型
根據傳輸的數據字節數是否大于8字節,可將UDS幀類型分為單幀和多幀,其中多幀包含首幀、連續幀和流控制幀,單幀的傳輸比較簡單,通常的一問一答數據傳輸即為單幀傳輸;多幀的傳輸相對復雜,在傳輸的過程中,首先需要對多包數據進行拆分,然后再按照一定序列進行重組。
多幀的傳輸過程,如圖1所示,發送端首先發送首幀,告知接收端將要接收的數據字節數;接收端接收到首幀后返回流控制幀,流控制幀主要有三個參數,流狀態(FS);塊的大小(BS)主要包含了接收端可以接收數據大小等信息;STmin表示兩個連續幀的時間間隔,超過規定的時間間隔會認為發送錯誤;接著發送端發送連續幀,參數SN表示幀的連續號,在發送連續幀的過程中,需要對連續幀進行編號,每發送一個連續幀,幀的連續號就會增加1,當增加到15時自動清零并重新計數,當數據發送完成后,發送端停止發送連續幀。
2.2 ? UDS編程步驟
基于UDS協議的ECU在線升級系統,是按照UDS規定的相關服務命令進行應用程序更新[6]。UDS編程步驟在遵循標準化步驟的基礎下,可根據需要進行自定義。本文設計的編程步驟,如圖2所示。
ECU收到上位機診斷會話服務請求后,ECU由默認的診斷會話子模式切換到編程會話子模式,為編程做準備。
在進行ECU軟件升級前,需要對ECU進行解鎖,即上位機向ECU發送Seed請求,ECU返回一個隨機種子,上位機通過加密算法計算出密鑰發送給ECU,ECU根據該密鑰檢測是否和自身密鑰匹配。如果兩者密鑰相等則安全訪問成功,否則返回錯誤消息。
通過例程控制服務調用底層Flash擦除函數,擦除原有的應用程序內存區,為下載新應用程序做準備。
ECU收到請求下載服務請求后,根據當前所處的編程會話模式,對下載前地址進行校驗,以確保用戶對該地址具有訪問權限。獲得訪問權限后,進入下一步的數據傳輸服務。
ECU收到數據傳輸服務請求后,如果具備訪問應用程序內存地址權限,則開始進入數據傳輸。在數據傳輸期間,數據傳輸服務會多次執行直到數據傳輸結束。
ECU收到請求退出服務后,終止上位機與ECU之間的數據傳輸。
通過調用例程控制服務采用CRC校驗算法檢驗下載到ECU中數據塊完整性,即ECU計算下載數據CRC值并與上位機發送的CRC值進行比較,若兩者相等,則程序數據塊下載成功。再次調用該服務主要是用來檢查數據塊的邏輯性和兼容性。
在校驗完下載程序的正確性后,ECU會收到復位服務請求。該服務主要用來進行ECU復位,并將程序啟動地址跳轉到應用程序首地址。
2.3 ? 系統組成
本文設計的ECU在線升級方案主要由下位機控制器ECU、上位機在線升級軟件和USB轉CAN三部分組成,如圖3所示。
下位機采用具有CAN接口的MPC5634M單片機作為控制器,在CodeWarrior集成開發環境下進行開發。上位機基于Visual Studio平臺進行開發,主要采用周立功公司提供的一套完整附帶函數聲明的Virtual CAN Interface(VCI)函數庫進行設計,根據需要調用相關庫函數即可完成上位機軟件的開發。通信模塊采用周立功USB轉CAN接口卡,主要實現下位機和上位機的數據通信。
3 ? Bootloader設計(Bootloader design)
Bootloader程序是ECU上電后首先運行軟件程序,主要完成各個模塊的初始化,使系統處于恰當的狀態,為應用程序的運行提供正確的環境[7-10]。
3.1 ? 硬件選型
NXP公司針對車用而設計的MPC5634M微控制器,提供了兩路FlexCAN通信和Flash編程等模塊。FlexCAN通信模塊符合CAN2.0B標準協議,支持擴展幀和標準幀,每次傳輸數據長度最大為8字節,數據Buffer為64字節,通信速率高達1Mbit。Flash編程模塊提供了高達1.5MB的可編程非易失性閃存,支持64位數據總線,時鐘頻率高達80MHz,可配置軟硬件讀寫訪問保護,可設置擦除塊地址空間,每次可寫入64位地址空間。
3.2 ? Flash內存分配
Bootloader程序通常固化在Flash內存中[11],一般通過專用仿真器下載完成后,不能進行修改,而Application程序需要不斷地進行升級完善。為保證Application程序更新時不發生程序混亂,必須進行合理的內存空間分配,以達到Bootloader程序和Application程序無交叉覆蓋[12-14]。
本文設計的Flash內存分布,如圖4所示。將0x00000000—0x0000FFFF低地址64kB空間劃分為Bootloader程序區,其中0x00000000—0x00000008地址空間用于存放Bootloader程序的啟動半字和復位向量,0x00000009—0x0000FFFF地址空間用于存放底層相關驅動程序。0x00010000—0x0017FFFF高地址空間劃分為Application程序區,其中0x00010000—0x00010008地址空間為Application程序地啟動半字和復位向量,0x00010009—0x0017FFF7地址空間存放Application程序,0x0017FFF8—0x0017FFFF地址空間作為Application程序軟件升級標志位。本文分別設置Bootloader程序和Application程序的啟動半字和復位向量,這樣可以同時獨立開發、調試Bootloader程序和Application程序,降低產品的開發周期。
3.3 ? CAN和Flash驅動配置
控制器MPC5634M的Bootloader CAN和Flash配置主要是在CodeWarrior集成開發環境下進行編程設置,具體的配置如下:
CAN通信的驅動配置主要涉及CAN節點初始化、波特率、接收中斷函數等。CAN初始化函數void CANA_Init(unsigned char speed)主要完成CAN節點使能,定義最大緩沖Buffer為64字節,提供125KB、250KB、500KB三種模式的波特率,可由用戶根據需要進行軟件選擇,SIU.PCR[83].R定義為CAN Tx引腳,為開漏輸出,SIU.PCR[84].R定義為CAN Rx引腳。CAN接收中斷函數void CANA_RX_ISR(void)主要處理來自上位機請求會話,其中UDS編程函數uds_handler(RxDATA, RxLENGTH)就在CAN中斷函數中調用。
Flash驅動配置主要是Flash的初始化、Flash扇區擦除和Flash扇區編程。Flash初始化函數unsigned char FlashInitAndUnlock(void)主要完成Flash各個扇區的初始化,提供訪問Flash內存的權限,初始化成功將返回0,否則返回1。Flash擦除函數unsigned char EraseFlash(void)主要完成擦除Flash內存區域的Application應用程序,主要配置是將要擦除內存塊的首地址,該函數在UDS編程過程中的例程控制服務中被調用。Flash編程函數unsigned char ProgramFlash(UINT32 dest, UINT32 source, UINT32 size)主要完成對特定內存塊的編程,需要配置編程的首地址,并添加校驗算法,即下載文件格式是否正確,下載程序是否完整,該函數也是在UDS編程過程中的例程控制服務中被調用。
3.4 ? Bootloader工作流程
本文設計的控制器ECU復位或重啟后,由地址0x00000008跳出進入啟動程序地址0x00000009,在啟動程序內首先判斷軟件升級標志是否置位,若軟件升級標志置位,則進入Bootloader下載模式,進行Application程序升級,否則,跳轉到Application程序首地址0x00010000,執行Application程序。軟件升級標志位處于Flash內存的最后一個雙字節地址0x0017FFF8—0x0017FFFF,這樣可保證Application程序在更新過程中如果出現掉電等現象,Flash最后一個雙字節地址軟件升級標志位值不會發生變化,再次重新啟動控制器可以繼續執行Application程序更新,避免了控制器重新啟動后執行有錯誤Application程序的可能。
本文設計的Bootloader具體工作流程如下:在Application程序升級模式下運行Bootloader程序,首先判斷下載文件格式是否是S19文件,若是S19文件,則調用Flash擦除函數擦除Application程序所在內存空間為Flash編程做準備,接著調用Flash編程函數進行S19文件下載,S19文件下載完成后校驗數據完整性,若S19文件下載完成,則清除軟件升級標志位,否則將S19文件未下載完成記錄寫入Flash,并清除軟件升級標志位進行ECU復位。在Application程序運行模式下,如果接收到Application程序升級請求,則軟件升級標志置位,ECU進入復位模式,隨后進行Application程序在線更新。
4 ? 上位機設計(Upper computer design)
上位機軟件采用C++語言編程,在VS2015平臺上進行GUI編程和通信驅動設計。由于本文上位機和下位機通信主要是進行Application程序升級,因此,用戶需要進行自定義編程。
周立功USB轉CAN通信設備提供了一套完整Virtual CAN Interface(VCI)函數庫,包括ControlCAN.lib,ControlCAN.DLL庫文件,以及VC版本函數ControlCAN.h聲明文件[15]。主要函數庫調用設計如下:首先自定義源文件usb_can.cpp包含ControlCAN.h頭文件,以方便調用相關函數,在Visual Studio2015編輯環境下設置連接到ControlCAN.lib文件。接著進行打開CAN設備函數char Open_USBCAN()編程,該函數的主要作用是進行CAN通信打開,初始化CAN通信以及啟動CAN通信,中間任何一個環節出現錯誤,都會進行錯誤提示。其次進行CAN發送函數MY_VCI_Transmit()和CAN接收函數MY_VCI_Receive()編程,函數內部添加CAN幀檢測機制,主要用來檢測CAN收發過程中出現的單幀、多幀、首幀、流控制幀、連續幀格式是否錯誤。
本文在MFC框架下設計的上位機GUI界面,如圖5所示。該界面設計簡單,方便操作,具有識別S19文件功能,同時還具有CAN通信握手檢測功能、UDS報文顯示功能和程序下載進度顯示功能,以及程序完整性檢測功能。
5 ? 軟件測試(Software testing)
本次測試中,將CAN通信波特率設置為500KB,選用的下載S19文件大小為17kB,在自主設計的上位機和下位機軟件上進行測試,如圖6所示。下面僅對最后一列報文進行分析:上位機發送021101CCCCCCCCCC報文,其中02中的0表示單幀,2表示有效數據字節數為2字節,11表示ECU復位,01表示ECU復位服務子功能的硬件復位,后四字節數據無效用CC進行填充,上位機接收025101AAAAAAAAAA報文,其中02中的0表示單幀,2表示有效數據字節數為2字節,UDS報文規定肯定響應報文格式第二字節為請求報文第二字節加40,否則為7F,51表示ECU復位服務請求響應為積極響應,01表示ECU復位服務子功能的硬件復位,后四字節數據無效用AA進行填充。
實驗結果表明:本文設計的ECU在線升級系統,能準確按照UDS協議幀格式進行單幀、首幀、流控制幀、連續幀的傳輸,達到了設計需求,滿足控制器Application程序在線升級功能。
6 ? 結論(Conclusion)
通過該研究對UDS協議編程流程、Bootloader功能設計以及上位機開發有了更深的理解,設計的ECU在線升級系統滿足Application程序在線升級功能,降低了ECU開發周期,為ECU在線升級提供了一種設計思路。同時,本文設計的ECU在線升級系統程序采用兩個獨立的啟動半字和復位向量,可同時開發Bootloader程序和Application程序,降低程序開發、調試難度,縮短開發周期。
參考文獻(References)
[1] ISO14229:2013,Road vehicles-Unified diagnostic services(UDS)-Specificationand requirements[S].
[2] 朱少輝,夏超英.基于CAN總線的ECU在線編程技術[J].單片機與嵌入式系統應用,2014,14(1):24-27.
[3] 李嬌嬌,張宏偉,陳金干.基于LabVIEW新能源汽車控制器刷新軟件設計[J].軟件工程,2020,2(23):16-18.
[4] 張成雨,楊朝陽.基于CAN總線的車載應用Bootloader設計[J].湖北汽車工業學院學報,2017,4(31):68-69.
[5] 楊朝陽,阮海庭,羅永革,等.基于CAN FD的在線編程系統設計[J].計算機與嵌入式系統應用,2019(5):1-5.
[6] 汪春華,白穩峰,劉胤博,等.基于CAN總線UDS服務Bootloader應用開發[J].汽車電子與測量技術,2017,40(2):166-170.
[7] 羅峰,孫澤昌.汽車CAN總線系統原理設計與應用[M].北京:電子工業出版社,2010.
[8] 曾其林,肖大偉,王志民,等.基于CAN Bootloader的整車控制器程序更新系統設計[J].東方電氣評論,2016,30(120):20-23.
[9] 王琦.基于CAN總線的Bootloader研究與實現[D].南京:南京郵電大學,2016.
[10] 王濤.基于CAN診斷汽車控制器刷新軟件的設計與實現[D].成都:電子科技大學,2015.
[11] 溫暖,楊維明,彭菊紅,等.基于MCU的嵌入式系統的Bootloader設計[J].微電子學與計算機,2018,35(3):80-82.
[12] 顧東袁,傅曉婕,陳愛軍,等.基于STM32的Bootloader實驗系統設計[J].實驗技術與管理,2019,36(11):89-93.
[13] 詹克旭.基于UDS協議的汽車ECU升級方案[J].計算機應用與軟件,2019,36:191-196.
[14] 劉樂樂.基于CAN FD的車載Bootloader研究與實現[D].北京:中國地質大學,2017.
[15] 廣州周立功單片機發展有限公司.CAN-bus通用測試軟件及接口函數使用手冊[Z].廣州周立功單片機有限公司,2004.
作者簡介:
馬宏偉(1994-),男,碩士生.研究領域:汽車電子控制技術.
吳長水(1978-),男,博士,副教授.研究領域:汽車電子控制技術.