萬禮華,但功禮
(重慶金美通信有限責任公司,重慶400030)
基于UDS的ECU在線重編程設計與實現
萬禮華,但功禮
(重慶金美通信有限責任公司,重慶400030)
結合國內外OEM廠商廣泛采用的診斷協議UDS,對Can總線下的ECU在線重編程進行研究和設計,并對具體的軟件實現進行闡述。本方案能防止ECU在線重編程過程中出現異常時,ECU被鎖死;可自恢復,刷新功能永不丟失。
統一診斷協議;重編程;引導程序;第一引導程序;第二引導程序
汽車電子產品開發對安全性、可靠性指標要求很高,同時ECU的開發周期較長,所以程序更新的情況在開發過程及售后都可能出現。為了對ECU硬件本身不造成破壞,同時方便售后服務,汽車行業制定了標準的通信協議,采用專門的診斷設備,通過標準的通信接口對ECU控制軟件或標定數據更新。當前,汽車上的各個ECU之間都具有一個或多個整車通信網絡實現各ECU之間的控制及通信。通常,這些汽車ECU之間都具有標準的診斷協議,能通過診斷儀在整車通信網絡實現故障碼的讀取,在整車通信網絡上通過診斷儀實現ECU控制軟件更新及標定數據更新,能方便ECU控制軟件開發及售后服務。國內外各大汽車廠商廣泛使用的一種車載診斷協議是UDS(汽車通用診斷服務)。
汽車ECU重編程分為離線重編程、在線重編程兩種方法。在線重編程是在ECU安裝在整車網絡上的代碼更新,離線重編程是在ECU未安裝在整車網絡上的代碼更新。本方案中的代碼重編程是采用基于CAN總線UDS協議的在線重編程技術。
ECU的在線重編程是指ECU安裝在整車網絡中時,通過整車通信網絡刷新其中的應用程序、標定數據、以及Bootloader本身(SBL),從而實現改善控制器性能、提高安全性、改善排放、改善燃油經濟性。當前,ECU供應商、OEM廠商、授權售后技術中心、技術工程師通過連接到整車網絡的診斷儀實現ECU的在線重編程。通過這種方法能方便、安全、經濟地實現應用軟件、標定數據、bootloader本身的刷新。Bootloader、應用軟件采用統一的診斷協議(即UDS)與診斷儀通信。
Bootloader是一段固化在FLASH中的代碼,它和標定數據、應用程序位于FLASH中不同的分塊中,這樣,能夠分別單獨地擦除Bootloader本身(SBL)、標定數據和應用程序。為了簡化ECU復位后的工作流程,本方案中應用程序的復位相量和Bootloader的復位相量相同,上電復位后,ECU首先運行Bootlader,然后跳轉到應用程序。
3.1 總體架構
方案實現的ECU在線重編程Bootloader由Bootloader(FBL)和Bootloader(SBL)兩部分組成FBL用于更新SBL,其代碼放在代碼保護區;SBL用于更新標定數據和應用程序。由于FBL放在代碼保護區,保證FBL代碼永遠不會被破壞,FBL通過BDM固化在FLASH中。SBL存放在代碼區,能夠通過診斷儀進行更新。本方案中所指的Bootloader本身更新指的是SBL更新。采用這種方法能夠保證用戶在更新Bootloader本身(SBL)的過種中,出現突然復位、供電異常、與診斷儀通訊失敗、FLASH擦寫錯誤等異常情況時,ECU不會被鎖死,重新上電后通過診斷儀仍然能夠更新Bootloader本身(SBL)及應用程序和標定數據。
與傳統的離線模式重編程方式不同,由于整車通信數據在整車網絡中傳輸,必須考慮其它控制器的反應,必須對目標ECU作出正確識別,必須保證數據的完整性等。基于UDS協議的ECU在線重編程包括以下步驟:
(1)進入擴展會話(extended session);
(2)識別ECU:識別ECU ID,FBL軟件ID,SBL軟件ID,應用軟件ID,標定數據ID;
(3)關閉網絡上所有ECU的故障識別、存儲功能,在線重編程期間禁止檢測、記錄故障;
(4)關閉整車通信數據傳遞:使網絡上只有診斷消息和網絡管理消息傳遞,為在線重編程讓出足夠的帶寬;
(5)解鎖ECU,使ECU能夠進入編程會話;
(6)進入編程會話(programming session),從bootloader進入編程會話;從應用程序進入編程會話;
(7)擦除FLASH數據:擦除SBL代碼或擦除標定數據/應用程序;
(8)下載數據:下載新的程序、數據到ECU的FLASH中;
(9)檢驗數據:檢查下載的數據,如果檢驗正確,使ECU_Status有效;
(10)復位ECU:軟件復位ECU;
(11)開啟網絡上ECU的故障識別、存儲功能:重新開啟網絡上其它控制器的故障識別與存儲功能;
(12)開啟整車通信數據傳遞:重新開啟網絡上其它控制器實現整車通信數據傳遞;
3.2 軟件設計
3.2.1 ECU工作流程
ECU上電復位后首先進入FBL,測試Ecu_Status標志,如果Ecu_Status=0xE0,ECU跳轉到SBL,否則程序在FBL中運行;在SBL中,測試Ecu_Status標志,Ecu_Status>=0xF0,ECU跳轉到APP,否則程序在SBL中運行。ECU工作流程如圖1所示。
ECU切換到編程會話SBL0x85。ECU可以在應用程序中進入編程會話SBL0x85,也可以在SBL中進入編程會話SBL0x85。程序在應用程序中運行時,ECU收到進入編程會話命令(DSC85),并且ECU未處于工作狀態時,ECU進入編程會話SBL0x85,控制權轉移到SBL中。程序在SBL中運行時,ECU收到進入編程會話命令(DSC85),ECU直接進入編程會話SBL0x85,控制權在SBL中。
ECU切到編程會話FBL0x85。ECU可以在SBL中進入編程會話FBL0x85,也可以在FBL中進入編程會話FBL0x85。程序在SBL中運行時,ECU收到擦除命令Ecu_Status時,ECU直接進入編程會話FBL0x85,控制權轉移到FBL中。程序在FBL中運行時,ECU收到進入編程會話命令(DSC85),ECU直接進入編程會話FBL0x85,控制權在FBL中。
應用程序在線重編程工作流程:診斷儀通過CAN總線向ECU發送S19文件格式的二進制文件,ECU將下載的代碼燒到應用程序區域,ECU應用程序代碼更新,下次上電或復位后,運行新的應用程序。
3.2.2 ECU中程序更新功能的相關UDS服務
ECU程序更新需要的功能必須與相應的UDS協議一致,這樣才能保證ECU能通過診斷儀進行代碼更新。ECU程序更新功能的相關UDS服務如表1所示。

圖1 ECU工作流程圖

表1 ECU程序更新功能相關UDS服務
3.2.3 ECU軟件內存映射
采用FreeScale MC9S12XEQ512微控制器,ECU軟件的內存映射圖如圖2所示。FBL程序區為0x780000至0x783fff,大小為16K;FBL中斷向量區為0x7ff400至0x7ff7ff,大小為1K;SBL程序區為0x784000至0x787fff,大小為16K;SBL中斷向量區為0x7ff800至0x7ffbff,大小為1K;APP程序區為0x7b0000至0x7fbfff,大小為304K;APP中斷向量區為0x7ffc00至0x7fffff,大小為1K;標定數據區為0x788000至0x7affff,大小為160K。其中FBL程序區及FBL中斷向量區放在代碼保護區,在線重編程過程中不會被破壞,以防止在線重編程異常時,重新上電后通過FBL仍然能夠重新進行SBL、標定數據/APP程序在線重編程。S12系列單片機通過修改中斷向量基地址寄存器IVBR進行中斷向量表重映射,為FBL、SBL、APP分別分配不同的中斷向量表。SBL和APP中斷是指除復位中斷外的其它中斷。為了簡化程序工作流程,SBL中程序復位,APP中程序復位都將調用FBL中的復位中斷程序。
Ecu_Status為0x00、0xff時SBL、APP程序被禁止運行,程序控制權在FBL中;Ecu_Status為0xe0時,APP程序被禁止運行,程序控制權在SBL中;Ecu_Status為0xf0時,SBL、APP程序允許運行,程序控制權在APP中。ECU狀態“Ecu_Status”管理如下:

圖2 ECU軟件內存映射圖
重編程開始時,Ecu_Status被置為0x00;
FLASH擦除完成時,Ecu_Status被置為0xff;
重編程標定數據/應用程序完成時,Ecu_Status被置為0xf0;
重編程Bootloader(SBL)完成時,Ecu_Status被置為0xe0;
LOG信息為重編程記錄信息,其中每條記錄包括48字節數據,1K能記錄21條重編程記錄信息。每一條記錄信息包括24字節的ECU識別信息和24字節的重編程版本信息。
3.2.4 ECU的在線重編程請求服務處理
ECU在收到診斷儀發出的請求服務后,首先對請求服務的合法性進行判斷,如圖3所示,然后對有效的請求服務進行處理,如圖4所示。

圖3 請求服務過濾處理

圖4 有效服務處理
提出了一種基于UDS的ECU在線重編程方案。提出了ECU和雙Bootloader方案,FBL放在代碼保護區,SBL放在代碼區。在APP更新及Bootloader自身更新過程中,出現各種異常,重新上電后,ECU不會死鎖,Bootloader可自恢復,刷新功能永不丟失。
[1]ISO15765,2004,Road vehicles—Diagnostics on Controller Aera Networks(CAN)[S].Switzerland:ISO,2004.
[2]ISO14229,2006,Road vehicles—Unified diagnostic services(UDS)[S].Switzerland:ISO,2006.
[3]廖洪良,孫澤昌.基于KWP2000的ECU在線編程研究及應用[J].微計算機信息,2008,24(3):250-253.LIAO Hong lang,SUN Ze chang.Research and application of the ECU on-board reprogramming based on KWP2000[J].CONTROL&AUTOMATION,2008,24(3):250-253.
[4]崔俊鋒,袁濤.車身混合網絡中CAN/LIN網關的設計與實現[J].微計算機信息,2006,(3Z):201-204. CUIJun feng,YUAN Tao.Design and Implementation of a CAN/LIN Gateway in Automotive Mixing Body Network[J].CONTROL&AUTOMATION,2006,3(2):201-204.
[5]韓鑫,鮑可進.CAN總線網絡層協議棧開發測試[J].計算機工程,2011,37(15):232-237.HAN Xin,BAO Ke-jin.Development and Test of CAN Bus Network Layer Protocol Stack[J].Computer Engineering,2011,37(15):232-237.
[6]張宏,詹德凱.基于CAN總線的汽車故障診斷系統研究與設計[J].汽車工程,2008,30(10):934-937.ZHANG Hong,ZHAN De kai,LIN Chang jia.Design of Vehicle Fault Diagnosis System Based on CAN Bus[J].Automotive Engineering,2008,30(10):934-937.
Research and Im p lement of ECU on Board Reprogramm ing Based on UDS
WAN Li-hua,DAN Gong-li
(Chongqing Jinmei Communication Co.,Ltd.,Chongqing 400030,China)
In this paper,the research and design for the ECU on board reprogramming are conducted according to diagnostic protocol UDSwhich iswidely used bymanymajor OEMs in the world,and some software design details are discussed as well.It can avoid dead lock while some abnormal error occurs during ECU on board reprogramming.The ECU can perform recovery itself and the refresh function never loses.
UDS;Reprogramming;Bootloader;FBL;SBL
10.3969/j.issn.1002-2279.2014.06.017
TP19
:A
:1002-2279(2014)06-0058-04
萬禮華(1974-),男,重慶市人,碩士,高級工程師,主研方向:嵌入式軟件開發,圖像處理等。
2014-04-15