吳進軍,方繼根,王西峰,趙錦濤,李晨風(fēng),謝志鵬
隨著新能源汽車的發(fā)展,越來越多的車載ECU被應(yīng)用于新能源汽車電子控制領(lǐng)域。同時,由于新能源汽車具有繁多的品種和匹配測試需求,使得車載ECU程序刷寫越來越被主機廠所重視,程序刷寫的速度和可靠性要求一再提高。
其對于開發(fā)的需求也在上升[1],而對于一個主機廠而言,開發(fā)一套自己的軟件刷新的基礎(chǔ)軟件,用于車輛的驗證和重復(fù)開發(fā),可以大大降低其開發(fā)的成本和時間[2]。
在CAN總線的發(fā)源地德國,寶馬、奔馳、保時捷、奧迪和大眾等全球知名廠家一起成立了HIS(Hersteller Initiative software)技術(shù)聯(lián)盟,制定了自己的刷新標(biāo)準。國內(nèi)的主機廠根據(jù)相應(yīng)的國際標(biāo)準,或采用統(tǒng)一的標(biāo)準,也有指定第三方軟件開發(fā)商(Vector、KPIT、Mentor等)開發(fā)基礎(chǔ)的Flashloader軟件[3]。而在國內(nèi),由于汽車電子技術(shù)起步的原因,早期并沒有主機廠進行相關(guān)方面的研究,近一兩年來,也逐步出現(xiàn)了針對各類單片機的CANBootloader的實現(xiàn)[4],但并沒有形成商業(yè)化的軟件,軟件本身也并不完善。
CAN總線作為最為常見的車載通訊方式,具有通訊速率高,可靠性高等特點。
整個系統(tǒng)在通訊過程中采用了兩種通訊方式,第一種是基于電腦可以識別的USB通訊,第二種是應(yīng)用于車載OBD所能夠接受的CAN通訊,因而,在二者之間,采用了USB轉(zhuǎn)CAN的設(shè)備進行信號的轉(zhuǎn)化。此USB轉(zhuǎn)CAN的設(shè)備支持0K~1000K的波特率范圍、擁有2000幀的內(nèi)部緩存、支持CAN幀的掩碼屏蔽、擴展幀和標(biāo)準幀的切換。因而可以得到如圖1的通訊結(jié)構(gòu)圖。
圖1 通訊結(jié)構(gòu)圖Fig.1 Communication structure diagram
ECU的燒錄過程大致可以分為三個環(huán)節(jié)。第一個環(huán)節(jié)是數(shù)據(jù)傳輸,指的從ECU和PC建立通訊到ECU的FLASH部分(程序段)數(shù)據(jù)從PC傳送給單片機的環(huán)節(jié);第二個環(huán)節(jié)是數(shù)據(jù)校驗,通過數(shù)據(jù)校驗的方式,判斷傳輸數(shù)據(jù)的正確與否;第三個環(huán)節(jié)是FLASH的擦除和寫入,將通過第二個環(huán)節(jié)校驗成功后的數(shù)據(jù)放入對應(yīng)的FLASH區(qū)域進行編程。
由于應(yīng)用對象的單片機為XC2000系列,其具有內(nèi)部CAN-BSL是固化的,無法修改的特點。且根據(jù)官方提供的源碼中表明,其不存在數(shù)據(jù)校驗等功能,且其對起始幀的幀消息限制僅僅為第一個字節(jié)和第二個字節(jié)均為0x5555,不滿足SAE J1939的協(xié)議。同時在非專用網(wǎng)絡(luò)上,這種不限制幀ID的方式,會導(dǎo)致其響應(yīng)其他恰好有數(shù)據(jù)位0x5555的非起始幀[5]。因而是需要對其編程方式進行重新設(shè)計,在單片機的FLASH區(qū)域,單獨開辟出一塊區(qū)域來用于BootLoader。整個刷寫的原理如圖2所示。
圖2 CAN刷寫原理圖Fig.2 CAN brushing schematic diagram
在XC2364單片機Bootloader區(qū)域內(nèi),PC端通過握手和數(shù)據(jù)傳輸?shù)姆绞?,向XC2364單片機的PSRAM段傳輸數(shù)據(jù)。在單片機執(zhí)行PSRAM段程序時,通過PC端數(shù)據(jù)傳輸?shù)姆绞?,將單片機的用戶段數(shù)據(jù)傳輸給單片機并寫入用戶段區(qū)域。
由于XC2000系列的單片機的RAM有限,同時為了方便其FLASH的編程,因而,選擇單頁編程,即將用戶段數(shù)據(jù)程序一次編程128個字節(jié)的方式。同時考慮到代碼的更新時間與用戶代碼的干擾,選擇在上電后的幾秒內(nèi)檢測單片機的用戶段數(shù)據(jù)更新。此外還可以根據(jù)需要,設(shè)置單片機的跳轉(zhuǎn)來實現(xiàn)ESC程序的實時刷寫。由此,我們可以得到整個燒錄的流程為圖3。
圖3 CAN燒錄流程Fig.3 CAN burning process
其中深色箭頭為CAN幀傳輸?shù)姆较?,黑色箭頭為程序的執(zhí)行方向。其中,深色箭頭由單片機往PC機傳輸?shù)拇蠖嗍琼憫?yīng)報文,包括肯定響應(yīng)和否定響應(yīng),由PC機發(fā)送給單片機的大多是數(shù)據(jù)報文,也有部分響應(yīng)報文。其中,在FLASH寫入環(huán)節(jié)的CRC校驗過程是由上位機發(fā)送校驗數(shù)據(jù),單片機根據(jù)前面的數(shù)據(jù)進行計算,計算完成后進行比對,比對通過后發(fā)送CRC通過的響應(yīng)。
對于單片機數(shù)據(jù)的操作分為兩種,第一種是數(shù)據(jù)轉(zhuǎn)碼,第二種是數(shù)據(jù)校驗,數(shù)據(jù)轉(zhuǎn)碼應(yīng)用于將編寫獲得的程序代碼數(shù)字轉(zhuǎn)化為ECU控制器內(nèi)應(yīng)當(dāng)具有的二進制碼規(guī)律,數(shù)據(jù)校驗則是指在傳輸過程中的數(shù)據(jù)校驗操作。下面將就兩部分進行介紹。
這里的文件轉(zhuǎn)碼主要指的是將keil編譯完成的H86文件,轉(zhuǎn)碼成可以被用于CAN發(fā)送的data數(shù)組。而對于hex(H86)文件,其每一行均滿足以下規(guī)則。因而,可以根據(jù)這一規(guī)則將數(shù)據(jù)進行轉(zhuǎn)化。整個轉(zhuǎn)化的思路見圖5。其中,判斷是否有效包括了有效數(shù)據(jù)表示符和末尾的和校驗值比對兩個環(huán)節(jié)。對于整個hex文件的轉(zhuǎn)碼我們可以采用流程圖的方式進行展示。
圖4 H86文件解讀規(guī)則Fig.4 H86 file interpretation rules
圖5 H86文件解讀流程Fig.5 H86 Document interpretation process
整個刷寫流程的數(shù)據(jù)校驗為兩種,一種是和校驗,一種是CRC校驗。
由于軟件的編寫環(huán)境是LabVIEW,為了方便實現(xiàn)數(shù)據(jù)校驗,PC端在編寫和校驗和CRC校驗的時候采用了調(diào)用庫文件的方式:先利用VC完成了動態(tài)連接庫文件的編寫,再通過LabVIEW完成庫文件的調(diào)用。
和校驗是一種比較簡單的校驗方式,其適用對校驗數(shù)據(jù)的準確度不是很高,或者數(shù)據(jù)量不是很大的場合。其原理是對所有需要校驗的數(shù)據(jù)按字節(jié)進行不計進位的加合,對加合的結(jié)果進行比對。
CRC校驗即循環(huán)冗余校驗碼 (Cyclic Redundancy Check)。其通過多項式計算進行結(jié)果獲取。其具體算法是約定一個多項式即生成多項式。將生成多項式寫為2進制碼,將信息碼右移生成多項式項數(shù)-1位,用生成多項式去除信息碼移位后的結(jié)果。得到的余數(shù)就是CRC掩碼。
此處的生成多項式采用CRC CCITT。CRC校驗相對較為復(fù)雜,因而比較適合小批量的數(shù)據(jù)進行精確校驗,以節(jié)省校驗時間。同時,為了加快CRC校驗的速度,采用了查表法進行CRC的計算。
綜合考慮軟件的復(fù)雜程度和兩種校驗的特點。最終選擇在數(shù)據(jù)轉(zhuǎn)碼時采用和校驗,最終數(shù)據(jù)全部傳輸完成時進行和校驗,單頁數(shù)據(jù)傳輸時采用CRC16 CCITT校驗。這樣,既充分發(fā)揮了兩種校驗的特點,保證了校驗的合理性,又照顧了數(shù)據(jù)傳輸?shù)男省?/p>
對于英飛凌的Memory,其官方文件—XC2000系列單片機應(yīng)用手冊(以下簡稱應(yīng)用手冊)[6]中有詳細的介紹。在這里,將只介紹與編程相關(guān)的部分。英飛凌的XC2000與XE166系列單片機均采用“馮諾依曼”體系架構(gòu),這意味著代碼和數(shù)據(jù)的訪問使用同一個線性地址空間。單片機總的可尋址空間為16MB,分256段,每段的大小為64KB。
將只采用片上存儲,且操作的主要對象為FLASH和PSRAM。因而根據(jù)FLASH段的不同功能,將FLASH段分為BootLoader區(qū)和用戶區(qū)。由于有一部分區(qū)域被BootLoader區(qū)給占用,用戶區(qū)的起始地址從原先的C00000變?yōu)榱?C10000,因而整個線性地址空間的分區(qū)如圖6所示。
圖6 單片機memory分區(qū)示意圖Fig.6 Schematic diagram of single chip memory zoning
利用C00000-C10000作為ECU的BootLoader區(qū)域,一方面是因為單片機上電復(fù)位的入口在C00000處,使得單片機在上電復(fù)位后能夠執(zhí)行BootLoader的代碼,另一方面也避免了C09000-C10000地址保留段的影響。同時,現(xiàn)有的ESC控制器的程序總代碼量在250K左右,而此單片機的FLASH段的總大小為832K,占用的BootLoader區(qū)域的大小為64K,因而可以保證盡管有區(qū)域被Boot-Loader所占用,仍然能滿足用戶正常的代碼空間需求。
英飛凌的應(yīng)用手冊對其FLASH的編程有所介紹,此外,其自帶的BootLoader也在其官方的文件[7]中進行了細說。下面以應(yīng)用手冊中的內(nèi)容進行FLASH擦寫部分的介紹。
首先,由于FLASH的自我保護,當(dāng)前正在執(zhí)行FLASH的某個模塊時,無法對其進行寫操作。官方的自帶的BootLoader執(zhí)行時,其代碼的執(zhí)行區(qū)域并不是用戶可以操作的FLASH模塊,因此FLASH是可以操作的。因而當(dāng)采用自己的BootLoader時,需要尋找一塊并不屬于FLASH的區(qū)域進行代碼的執(zhí)行。而在XC2000系列的單片機中,其可以執(zhí)行代碼的區(qū)域為程序FLASH/ROM以及程序SRAM(PSRAM)。而由于SRAM的特點,其掉電后,數(shù)據(jù)丟失。因而,需要先通過FLASH區(qū)段的程序?qū)SRAM段的程序進行接收后再跳轉(zhuǎn)至PSRAM中執(zhí)行。
其次,根據(jù)應(yīng)用手冊的描述,XC2000系列單片機的片上FLASH的結(jié)構(gòu)可以劃分。該FLASH存儲器有4個陣列,前三個陣列為256K,最后一個陣列為64K,前3個陣列每個由64個扇區(qū)組成,每個扇區(qū)由32頁組成。一個扇區(qū)的大小為1K,一頁的大小為128字節(jié)。由于單片機的片上RAM有限,不適合大規(guī)模存儲數(shù)據(jù),同時為了操作簡便,本文中采用了按扇區(qū)擦除的,按頁進行編寫的方式。
整個FLASH的操作參考應(yīng)用手冊的匯編歷程。扇區(qū)的擦除根據(jù)應(yīng)用手冊是一個三周期命令。頁編程分為三步:進入該頁,加載該頁數(shù)據(jù),編程該頁。其中,進入該頁是對頁面操作最初的步驟,加載該頁數(shù)據(jù)為將數(shù)據(jù)加載到該頁FLASH內(nèi),編程該頁則是將數(shù)據(jù)固化,保證數(shù)據(jù)在掉電后不會丟失。
根據(jù)新能源汽車實用的需求,提出了一種基于CAN總線的程序刷寫方式,并根據(jù)英飛凌XC2000系列單片機,完成了刷寫系統(tǒng)的軟硬件設(shè)計。與傳統(tǒng)的車載ECU刷寫方式相比,具有較高的刷寫速率,有一定的ECU刷寫保護功能,并且支持ECU的外部升級,方便生產(chǎn)、匹配測試人員對ECU進行維護。經(jīng)過軟件測試,所設(shè)計的基于CAN總線的ECU程序刷寫方式具有較高的可靠性,可以應(yīng)用于新能源汽車車載ECU的程序開發(fā)、維護、升級。
參考文獻:
[1]Joao H.Silva,Visteon Corp.Advanced Firmware Device Manager for Automotive:A Case Study.
[2]王濤.基于CAN診斷汽車控制器刷新軟件的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2011.
[3]戴勝曉.CAN總線技術(shù)在商用車上的設(shè)計應(yīng)用 [M].城市車輛,2006.
[4]陳彤,黃立梅.一種用于汽車電控單元 CAN Bootloader的設(shè)計與實現(xiàn)[J].汽車實用技術(shù),2016.
[5]黃全安.汽車自動變速系統(tǒng)控制器開發(fā)平臺研究[D].北京:清華大學(xué),2011.
[6]InfineonTechnologies,XC2300ADerivativesUser’sManual V2.0,2009-03[EB/OL].
[7]Infineon Technologies,XC2000/XE166 Family16-bit Microcontrollers AP16164 Flash Progamming via CAN BSL(Bootstrap Loader) Application Note V1.0,2009-10[EB/OL].