[朱志斌 張祥]
基于LIN總線ECU遠(yuǎn)程升級系統(tǒng)的設(shè)計與實(shí)現(xiàn)
[朱志斌 張祥]
LIN總線 MC9S12G128 ISO15765-2 ISO14229-1 兩級Bootloader
朱志斌
重慶郵電大學(xué)光通信與網(wǎng)絡(luò)重點(diǎn)實(shí)驗(yàn)室,重慶集誠汽車電子有限責(zé)任公司,碩士研究生,主研方向?yàn)槠囯娮印?/p>
張祥
重慶集誠汽車電子有限責(zé)任公司,軟件工程師,主研方向?yàn)槠囯娮印?/p>
隨著汽車電子行業(yè)的不斷發(fā)展,LIN總線憑借著其低成本性、配置靈活性、良好的工藝性在汽車網(wǎng)絡(luò)中占據(jù)著不可替代的地位[1]。然而,當(dāng)對LIN總線上的汽車電子控制單元ECU(Electronic Control Unit)進(jìn)行固件升級時將會遇到很大阻礙--相關(guān)人員需要將待升級的ECU從汽車上拆卸下來然后打開ECU的保護(hù)殼,用專門的燒錄器把更新好的代碼燒寫進(jìn)去,最后再把ECU裝回車上。這種方法不僅麻煩而且還很容易造成硬件的損壞。因此,設(shè)計出一種通過LIN總線對ECU進(jìn)行在線升級的系統(tǒng)顯得尤為必要。本方案下位機(jī)的bootloader亦可稱為兩級bootloader。第一級bootloader主要實(shí)現(xiàn)初始化堆棧指針、分配內(nèi)存映射、初始化外圍硬件設(shè)備、判斷是否請求升級等功能,該部分程序從flash中加載運(yùn)行(Load Flash And Execute,LFAE)[2]。第二級bootloader主要實(shí)現(xiàn)程序的下載功能,該部分程序直接從RAM中加載運(yùn)行(Load RAM And Execute,LRAE)[3]。只有當(dāng)應(yīng)用程序請求升級時LRAE才會通過上位機(jī)下載至下位機(jī)的RAM中執(zhí)行,由于LRAE不常駐在程序中所以在一定程度上增強(qiáng)了程序的安全性。
遠(yuǎn)程系統(tǒng)升級架構(gòu)如圖1。
圖1 系統(tǒng)架構(gòu)圖
LIN網(wǎng)絡(luò)的節(jié)點(diǎn)分為主機(jī)節(jié)點(diǎn)和從機(jī)節(jié)點(diǎn)。文中主要針對LIN網(wǎng)絡(luò)中的主機(jī)節(jié)點(diǎn)進(jìn)行升級。采用硬件觸發(fā)機(jī)制使網(wǎng)絡(luò)中的主機(jī)進(jìn)入一級Bootloader,此時待升級的主機(jī)轉(zhuǎn)化為從機(jī)。上位機(jī)通過CANOE連接到汽車LIN網(wǎng)絡(luò)中,在升級的過程中上位機(jī)臨時充當(dāng)LIN主機(jī)的角色,通過調(diào)度機(jī)制分別將二級Bootloader和待升級的程序下載至待升級的ECU中,從而完成遠(yuǎn)程升級。
Bootloader又稱引導(dǎo)加載程序,是單片機(jī)通電后首先獲得CPU控制權(quán)的程序,它主要實(shí)現(xiàn)兩個功能[8]:
(1)初始化堆棧指針、分配內(nèi)存映射、初始化外圍硬件設(shè)備等;
(2)對flash中已存在的程序進(jìn)行升級;
在汽車LIN網(wǎng)絡(luò)中,擁有一套在線升級系統(tǒng)不僅可以減少對固件的損壞而且還可以極大提高汽車ECU開發(fā)效率[9]。本方案的下位機(jī)實(shí)現(xiàn)依托于飛思卡爾MC9S12G128實(shí)現(xiàn),G128 擁有128K flash 、8K RAM。其空間劃分如圖2。
圖2 S12G內(nèi)存劃分
S12G 系列微控制器允許在重新編程過程中不需要額外的高壓源[10]。LARE中Falsh 擦寫函數(shù)的工作頻率是從總線頻率獲得的,其大小應(yīng)在在0.8M-1M之間。通過設(shè)置FDIVLD寄存器獲得工作頻率[10]。S12G系列有一個內(nèi)存控制器,該內(nèi)存控制器可以執(zhí)行有效的flash命令。Flash的相關(guān)命令通過兩個寄存器(FCCOB和FCCOBIX)的配合實(shí)現(xiàn)[10]。由于擦寫函數(shù)用到的是全局地址,所以局部地址要先轉(zhuǎn)換成全局地址才可以直接被擦寫函數(shù)使用而且必須在擦除之后才能夠?qū)懭耄駝t會造成程序跑飛。在擦除寫入的過程是不允許被其他程序打斷的,所以在擦寫函數(shù)執(zhí)行時盡量關(guān)閉所有中斷和看門狗。
S12G系列微控制器的中斷向量表默認(rèn)放在0x0F頁的0xff80-0xffff處,復(fù)位向量在0xfffe-0xffff處。由于S12G系列微控制器有一個中斷向量基址寄存器IVBR,所以用戶可以通過修改IVBR可以順利實(shí)現(xiàn)Bootloader與APP使用各自的中斷向量而互不干擾。需要注意的地方是APP的所有用到的中斷向量都必須放在未分頁區(qū),而Bootloader使用默認(rèn)的中斷向量表即可。
本升級系統(tǒng)可分為三個時期:編程前期、編程中期、編程后期。根據(jù)ISO14229-1下位機(jī)有三種運(yùn)行模式:默認(rèn)模式、編程模式、擴(kuò)展模式。三種模式之間的切換關(guān)系如圖3。
圖3 狀態(tài)轉(zhuǎn)移圖
編程前期主要實(shí)現(xiàn)下位機(jī)進(jìn)入編程模式的功能,在進(jìn)入編程模式之前下位機(jī)首先要驗(yàn)證上位機(jī)的合法性,上位機(jī)會根據(jù)配置文件的步驟發(fā)送0x27 0x01 進(jìn)行請求安全認(rèn)證,下位機(jī)接收到該信息返回四個隨機(jī)數(shù)sand[4],上位機(jī)收到隨機(jī)數(shù)后根據(jù)雙方統(tǒng)一的加密算法f(sand)進(jìn)行加密,并把結(jié)果通過0x27 0x02 result1 result2 result3 result4 返回給下位機(jī),下位機(jī)進(jìn)行同樣加密并對比兩個加密結(jié)果一致則可以進(jìn)入編程模式,不一致則拒絕進(jìn)入。
編程中期上位機(jī)主要通過0x34,0x36,0x37,0x31四項(xiàng)服務(wù)進(jìn)行LARE與應(yīng)用程序數(shù)據(jù)的下載,更多詳細(xì)的介紹請讀者參考文獻(xiàn)[7] 。
編程后期主要任務(wù)是校驗(yàn)下載數(shù)據(jù)的正確性以及復(fù)位下位機(jī)。進(jìn)行程序校驗(yàn)時,上位機(jī)會把發(fā)送的所有數(shù)據(jù)通過雙方統(tǒng)一的算法fcrc(data)獲得校驗(yàn)值CRC,通過0x31 01 服務(wù)把CRC 傳送給下位機(jī),下位機(jī)讀取寫入的所有數(shù)據(jù)進(jìn)行相同算法并對比CRC,結(jié)果一致回復(fù)正響應(yīng)并寫入應(yīng)用程序有效標(biāo)志,升級成功,否則回復(fù)負(fù)響應(yīng)升級失敗。
下位機(jī)Bootloader分為兩種模式:LARE和LFAE。兩種模式不可同時運(yùn)行[2][3]。LFAE主要實(shí)現(xiàn)初始化外圍設(shè)備、堆棧大小、RAM以及判斷請求升級標(biāo)志是否有效和應(yīng)用程序是否有效的功能。其軟件流程圖如圖4。
圖4 LFAE流程
LARE主要實(shí)現(xiàn)程序的擦除寫入、校驗(yàn)數(shù)據(jù)、寫入應(yīng)用程序有效標(biāo)志和復(fù)位下位機(jī)。升級結(jié)束后LARE命令下位機(jī)復(fù)位,RAM區(qū)被重新初始化從而會清除LARE程序,因此LARE不會常駐在程序中從而在一定程度上保證了flash中程序的安全性。LARE軟件流程圖如圖5。
圖5 LARE程序流程
本方案上位機(jī)是用vs2010 MFC實(shí)現(xiàn)。其應(yīng)用層是在ISO14229-1的架構(gòu)之上結(jié)合自己的需要設(shè)計出診斷流程上位機(jī)整體實(shí)現(xiàn)架構(gòu)如圖6。
圖6 上位機(jī)架構(gòu)表
為了提高該系統(tǒng)的通用性,上位機(jī)又增加了讀取配置文件的功能,配置文件格式如圖7。
圖7 配置文件截圖
系統(tǒng)升級時上位機(jī)首先讀取配置文件中[init]中的內(nèi)容從而完成上位機(jī)的基本配置,主要包括:上位機(jī)物理ID,上位機(jī)功能ID,下位機(jī)ID,下位機(jī)功能ID,波特率。配置結(jié)束后上位機(jī)根據(jù)[stepn](n從1開始依次遞增直至升級流程結(jié)束)中的內(nèi)容執(zhí)行相應(yīng)的服務(wù),如:request表示終端要發(fā)送的數(shù)據(jù),respond 表示下位機(jī)正確響應(yīng),retry 表示如果此步驟失敗重試次數(shù),numstep 表示該步驟失敗后向前或向后幾步開始繼續(xù)執(zhí)行。用戶可以根據(jù)需求自行修改波特率、ID、升級順序、發(fā)送的數(shù)據(jù)等信息,從而極大的提高上位機(jī)的兼容性。
該功能的測試由三部分組成:PC機(jī)、CANOE、待升級ECU。其連接示意圖如圖8。
圖8 升級系統(tǒng)連接圖
產(chǎn)品功能測試使用公司已量產(chǎn)的某款BCM(車身控制器)程序。每次下載完成后測試程序功能,正常則表示升級成功否則為升級失敗。該測試根據(jù)程序大小共分為四組,每組分別進(jìn)行100次升級,時間取平均值。關(guān)于代碼的大小通過適當(dāng)?shù)貙υ揃CM程序刪減一些功能或增加一些無效的代碼進(jìn)行控制。其升級用時時間與理論用時時間對比如表1:(LIN的傳輸速率V = 19.2kbit/s,flash擦寫函數(shù)擦除16k用時約Td16= 167ms,寫入1k字節(jié)標(biāo)準(zhǔn)用時約Tw1=32ms)[10]假設(shè)需要升級的程序?yàn)镹 K。則理論用時時間:
t = 150*(N*1024)/(19.2*8) +(N/16)*Td16+N*Tw1
表1 升級用時時間
由表1分析可知該Bootloader執(zhí)行的時間與理論時間差距主要取決于0x27服務(wù)的加密算法時間、升級完成后讀取flash中的數(shù)據(jù)并進(jìn)行校驗(yàn)時間以及升級流程所用到的時間。本實(shí)驗(yàn)結(jié)果表明該方案具有較強(qiáng)的系統(tǒng)穩(wěn)定性。本方案的Bootloader總大小為7 354字節(jié),其中LARE 4 893字節(jié) LFAE 2 461字節(jié)。若按傳統(tǒng)方案設(shè)計該Bootloader需全部放入flash中,而按本文的方案只需將LFAE駐留在flash中,Bootloader占用flash空間相比傳統(tǒng)方案降低了66.5%。不僅如此,升級完成后由于復(fù)位ECU會重新初始化RAM區(qū),在應(yīng)用程序運(yùn)行時LARE不會駐留在程序中從而極大地提高了程序的安全性。
本文以飛思卡爾MC9S12G1128為系統(tǒng)平臺,提出一種基于LIN總線進(jìn)行升級的系統(tǒng)解決方案,實(shí)現(xiàn)了對汽車CLIN總線ECU的在線升級。并且將ISO15765-2順利移植到LIN網(wǎng)絡(luò)診斷幀中。 本文的兩級Bootloader方案不僅可減少對flash占用空間而且還具有很強(qiáng)的穩(wěn)定性。而對上位機(jī),用戶只需根據(jù)自己需要修改配置文件即可獲得自己所需升級流程的上位機(jī)。該方案在基于LIN總線Bootloader開發(fā)設(shè)計中具有一定的參考價值。
1LIN Specification Package( Revision 2.2A).Munich,Germany;Motorola,2003
2Daniel M,Scotland E. LFAE bootloader example and interface for use with AN2546[Z].Freescale Semiconductor,Inc.,2004
3Martvn G.HCS12 load RAM and execute bootloader user guide [Z] .Freescale Semiconductor,Inc.,2004
4蘇洪.基于LIN總線的車窗防夾控制系統(tǒng)研究[D].黑龍江:哈爾濱工業(yè)大學(xué),2015,06
5Swedish Standards Institute.ISO 15765-2 Road Vehicles Diagnosties on CAN-Part2:Network Layer Services[S].2004
6唐樂.基于can總線的通用性汽車ECU故障診斷儀的研究與設(shè)計[D].重慶:重慶郵電大學(xué),2012,05
7International Organization for Standardization. ISO14229-2006 road vehicles unified diagnostics services(UDS)Specilica-tionand Requirements(v2)[S].2006
8王亞剛.嵌入式Bootloader機(jī)制的分析與移植[J].計算機(jī)工程,2010,36(6):267-269
9郭凱凱.can總線UDS的研究與設(shè)計[D].安徽:安徽理工大學(xué),2013.06
10MC9S12G Family Reference Manual(0.41Revision)[M].Austin,Texas;Freescale Semiconductor,2010
10.3969/j.issn.1006-6403.2016.09.008
2016-08-12)
針對汽車LIN(Local Interconnect Network)節(jié)點(diǎn)進(jìn)行程序更新困難的問題,文章設(shè)計并開發(fā)出了一種通過汽車LIN總線對ECU(Electronic Control Unit)進(jìn)行遠(yuǎn)程在線升級的系統(tǒng)。該系統(tǒng)的應(yīng)用層采用國際診斷協(xié)議ISO14229-1,傳輸層在ISO15765-2協(xié)議的基礎(chǔ)上進(jìn)行改進(jìn)使其移植到汽車LIN網(wǎng)絡(luò)的診斷幀中?;贚IN總線設(shè)計具有兩級Bootloader功能的下位機(jī),該方案設(shè)計不僅可以減少CAN 和LIN網(wǎng)絡(luò)之間數(shù)據(jù)格式的轉(zhuǎn)換量、提高flash空間的利用率而且增強(qiáng)了系統(tǒng)的安全性。該系統(tǒng)設(shè)計已經(jīng)在某款已量產(chǎn)的基于飛思卡爾MC9S12G128的車身控制器(BCM)中得到充分驗(yàn)證。