李濟(jì)泰 楊 毅
(廣州汽車集團(tuán)股份有限公司)
車載電控單元在汽車上的應(yīng)用越來(lái)越多,功能也越來(lái)越復(fù)雜,因此,對(duì)車載電控單元應(yīng)用程序的更新也越來(lái)越頻繁。在現(xiàn)有車載電控單元應(yīng)用程序更新方法中,大部分采用芯片廠商提供的程序燒寫(xiě)器進(jìn)行更新,更新時(shí)需要拆卸車載電控單元,這對(duì)主機(jī)廠來(lái)說(shuō)幾乎是不可能的??紤]到目前車載電控單元大部分使用CAN通信,因此采用一種接入車載OBD接口,并通過(guò)CAN總線對(duì)車載電控單元的應(yīng)用程序進(jìn)行更新的刷新系統(tǒng)。這種刷新方式雖然要求電控單元應(yīng)符合ISO15765定義的刷新規(guī)則,但無(wú)需拆卸電控單元,也無(wú)需考慮電控單元使用的芯片類型,尤其適用于主機(jī)廠。
基于ISO15765協(xié)議的車載電控單元應(yīng)用程序刷新系統(tǒng)(下稱刷新系統(tǒng))原理如圖1所示。該刷新系統(tǒng)由上位機(jī)和下位機(jī)組成。上位機(jī)用作人機(jī)界面,一方面執(zhí)行操作人員的指令,另一方面顯示刷新過(guò)程中必要的信息;下位機(jī)用作與車載電控單元通信的接口,一方面從上位機(jī)接收指令和數(shù)據(jù),另一方面與車載電控單元進(jìn)行通信,完成應(yīng)用程序的刷新。上、下位機(jī)之間的通信采用RS232串口,上層通信協(xié)議自定義。下位機(jī)與車載電控單元的通信采用CAN總線,上層通信協(xié)議采用ISO15765協(xié)議。
車載電控單元若要能夠刷新應(yīng)用程序,必須包含應(yīng)用程序和引導(dǎo)程序2個(gè)可執(zhí)行的軟件包。在ECU正常運(yùn)行時(shí),應(yīng)用程序運(yùn)行;在ECU進(jìn)行程序刷新或應(yīng)用程序失效時(shí),則引導(dǎo)程序運(yùn)行。應(yīng)用程序和引導(dǎo)程序需要占據(jù)不同的FLASH空間,其中應(yīng)用程序占據(jù)的空間可刷新,而引導(dǎo)程序占據(jù)的空間受保護(hù)不能刷新,這樣可避免引導(dǎo)程序被誤擦除而不能進(jìn)行應(yīng)用程序刷新的情況。RAM用來(lái)存儲(chǔ)引導(dǎo)程序或應(yīng)用程序運(yùn)行時(shí)的臨時(shí)變量,可被應(yīng)用程序和引導(dǎo)程序共用。
上位機(jī)發(fā)送給下位機(jī)的報(bào)文稱之為請(qǐng)求,下位機(jī)發(fā)送給上位機(jī)的報(bào)文稱之為回復(fù),所有的通信都必須由上位機(jī)發(fā)起,即先有請(qǐng)求后有回復(fù)。幀的長(zhǎng)度最大為20個(gè)字節(jié),如果報(bào)文過(guò)長(zhǎng)則分成多個(gè)幀發(fā)送。在請(qǐng)求幀與回復(fù)幀之間的間隔及多幀傳輸中,上一個(gè)回復(fù)幀與下一個(gè)請(qǐng)求幀之間的間隔最長(zhǎng)為500 ms,一旦超時(shí)則通信中斷。
請(qǐng)求幀的定義如表1所列。幀類型包括單幀、首幀、末尾幀和連續(xù)幀。單幀表示其內(nèi)容已經(jīng)包含了整個(gè)報(bào)文的內(nèi)容;首幀表示多幀傳輸中的第1幀;末尾幀表示多幀傳輸?shù)淖詈笠粠贿B續(xù)幀則表示多幀傳輸中的中間幀。數(shù)據(jù)長(zhǎng)度是指服務(wù)標(biāo)識(shí)符和參數(shù)的總長(zhǎng)度,該長(zhǎng)度最大為17個(gè)字節(jié),加上同步頭、幀類型和數(shù)據(jù)長(zhǎng)度這3個(gè)字節(jié),整個(gè)幀的最大長(zhǎng)度為20個(gè)字節(jié)。服務(wù)標(biāo)識(shí)符表示該請(qǐng)求的功能,參數(shù)與服務(wù)標(biāo)識(shí)符相對(duì)應(yīng)。上位機(jī)傳輸應(yīng)用程序給下位機(jī)時(shí),服務(wù)標(biāo)識(shí)符使用0x36,參數(shù)為應(yīng)用程序具體數(shù)據(jù)。對(duì)于請(qǐng)求下位機(jī)刷新車載電控單元的應(yīng)用程序,服務(wù)標(biāo)識(shí)符使用0x31,參數(shù)包括命令類型、當(dāng)前時(shí)間和目標(biāo)ECU地址。命令類型包括開(kāi)始刷新命令和在刷新過(guò)程中請(qǐng)求刷新進(jìn)度的命令;當(dāng)前時(shí)間用以保證刷新的可追溯性;目標(biāo)ECU地址可指定當(dāng)前要刷新的車載電控單元。
表1 請(qǐng)求幀定義
肯定回復(fù)的定義如表2所列。幀類型為請(qǐng)求幀類型取反;服務(wù)標(biāo)識(shí)符為請(qǐng)求服務(wù)標(biāo)識(shí)符取反;參數(shù)為執(zhí)行請(qǐng)求的結(jié)果。
否定回復(fù)的定義如表3所列。服務(wù)標(biāo)識(shí)符為請(qǐng)求服務(wù)標(biāo)識(shí)符取反;否定碼表示否定回復(fù)的原因。
表2 肯定回復(fù)定義
表3 否定回復(fù)定義
下位機(jī)與車載ECU之間的通信遵循ISO15765協(xié)議,其中網(wǎng)絡(luò)層的通信遵循ISO15765-2,應(yīng)用層的通信遵循ISO15765-3。
ISO15765-2中定義了單幀傳輸和多幀傳輸[1]2種通信方式。在下位機(jī)與ECU的通信過(guò)程中,如果傳輸?shù)挠行?shù)據(jù)少于8個(gè),則采用單幀傳輸;如果傳輸?shù)挠行?shù)據(jù)多于或等于8個(gè),則采用多幀傳輸,依次使用到首幀、流控制幀和連續(xù)幀。
ISO15765-3中定義了刷新程序的流程及相關(guān)的診斷服務(wù)[2]。下位機(jī)刷新車載ECU時(shí)采用該流程,如圖2所示。
首先,請(qǐng)求整個(gè)網(wǎng)絡(luò)的節(jié)點(diǎn)進(jìn)入擴(kuò)展模式,然后關(guān)閉所有節(jié)點(diǎn)的故障設(shè)置以避免其它節(jié)點(diǎn)存儲(chǔ)關(guān)于被刷新節(jié)點(diǎn)的故障,再禁止整個(gè)網(wǎng)絡(luò)的非診斷的通信以節(jié)約刷新所用時(shí)間。
目前洋山港已建一、二、三期集裝箱碼頭,岸線總長(zhǎng)5 640 m,其中一期工程共布置5個(gè)5萬(wàn)~10萬(wàn)噸級(jí)泊位,二期工程布置4個(gè)7萬(wàn)~10萬(wàn)噸級(jí)泊位,三期工程布置7個(gè)7萬(wàn)~15萬(wàn)噸級(jí)泊位。經(jīng)加固升級(jí)改造,洋山港二、三期碼頭現(xiàn)可靠泊20萬(wàn)噸級(jí)集裝箱船舶。[1]
其次,請(qǐng)求被刷新節(jié)點(diǎn)進(jìn)入刷新模式,由應(yīng)用程序運(yùn)行狀態(tài)轉(zhuǎn)換到引導(dǎo)程序運(yùn)行狀態(tài),然后擦除原應(yīng)用程序所占據(jù)的存儲(chǔ)器空間,再請(qǐng)求傳輸程序傳輸數(shù)據(jù)到存儲(chǔ)空間,并在數(shù)據(jù)傳輸完成后檢查數(shù)據(jù)的一致性。
最后,請(qǐng)求整個(gè)網(wǎng)絡(luò)的節(jié)點(diǎn)進(jìn)入默認(rèn)模式,使得被刷新節(jié)點(diǎn)重啟,由引導(dǎo)程序運(yùn)行狀態(tài)轉(zhuǎn)換到新應(yīng)用程序運(yùn)行狀態(tài),并使之前關(guān)閉的故障設(shè)置和非診斷通信重新開(kāi)啟,整個(gè)網(wǎng)絡(luò)進(jìn)入正常運(yùn)行狀態(tài)。
該上位機(jī)軟件的開(kāi)發(fā)平臺(tái)為National Instrument提供的圖形化虛擬儀器集成開(kāi)發(fā)環(huán)境Lab-VIEW 8.5,它具備友好的編程環(huán)境及提供了許多實(shí)用的控件,給軟件開(kāi)發(fā)帶來(lái)了極大的方便[3]。
該上位機(jī)功能分為2部分。一部分為傳輸應(yīng)用程序文件給下位機(jī),并顯示傳輸進(jìn)度;另一部分為請(qǐng)求下位機(jī)刷新車載電控單元的應(yīng)用程序,并顯示刷新進(jìn)度。
傳輸應(yīng)用程序文件的軟件流程如圖3所示。首先,初始化刷新人員所選擇的串口,然后將刷新人員選取的應(yīng)用程序文件的前16個(gè)字節(jié)讀取出來(lái),加上同步頭、幀類型、數(shù)據(jù)長(zhǎng)度和服務(wù)標(biāo)識(shí)符形成請(qǐng)求幀通過(guò)串口發(fā)送出去。發(fā)送后從串口讀取下位機(jī)的回復(fù),收到肯定回復(fù)則計(jì)算出傳輸進(jìn)度并顯示,回復(fù)超時(shí)或否定回復(fù)則顯示相應(yīng)的報(bào)錯(cuò)信息并退出。如果文件沒(méi)有發(fā)送完畢,則每次循環(huán)發(fā)送16個(gè)字節(jié)的數(shù)據(jù),直到文件全部發(fā)送完畢為止。最后進(jìn)行CRC校驗(yàn),檢測(cè)傳輸過(guò)程中是否出現(xiàn)了誤傳。
請(qǐng)求下位機(jī)刷新車載電控單元的應(yīng)用程序軟件流程如圖4所示。首先,根據(jù)獲取的系統(tǒng)時(shí)間、刷新人員所選擇的ECU地址生成開(kāi)始刷新的請(qǐng)求幀,并通過(guò)串口發(fā)送出去。發(fā)送后從串口讀取下位機(jī)的回復(fù),收到肯定回復(fù)則將回復(fù)中的進(jìn)度信息提取出來(lái)并顯示,回復(fù)超時(shí)或否定回復(fù)則顯示相應(yīng)的報(bào)錯(cuò)信息并退出。如果刷新沒(méi)有100%完成,則循環(huán)發(fā)送刷新進(jìn)度的請(qǐng)求,從下位機(jī)的回復(fù)中獲得實(shí)時(shí)刷新進(jìn)度并顯示,直到刷新成功完成為止。
微處理器模塊的主要組成部分為Freescale公司生產(chǎn)的MC9S12XE100。該處理器是一款低成本、低功耗的16位單片機(jī),它包含有64 K字節(jié)的RAM、1M字節(jié)的FLASH、8個(gè)串行通信接口、3個(gè)串行外圍接口、2個(gè)16通道、12 bit的A/D轉(zhuǎn)換器、1個(gè)8通道的脈寬調(diào)節(jié)模塊和5個(gè)兼容CAN2.0A、B的CAN模塊[4],可滿足與上位機(jī)和車載電控單元之間的通信。
高速CAN通信模塊的主要組成部分為NXP公司生產(chǎn)的TJA1040。該CAN收發(fā)器完全兼容ISO11898協(xié)議,支持最高1 Mbaud的通信速率,具有非常低的電磁輻射和非常高的抗電磁騷擾能力[5]。
低速CAN通信模塊的主要組成部分為NXP公司生產(chǎn)的TJA1054。該低速容錯(cuò)CAN收發(fā)器支持最高125 Kbaud的通信速率。與TJA1040相似,該收發(fā)器同樣具有非常低的電磁輻射和非常高的抗電磁騷擾能力[6]。
RS232通信模塊的主要組成部分為DALLAS SEMICONDUCTOR公司生產(chǎn)的低功耗收發(fā)器DS276,該收發(fā)器完全兼容RS232信號(hào)[7]。
該下位機(jī)軟件的開(kāi)發(fā)平臺(tái)為Freescale提供的一個(gè)面向S12(X)系列MCU的集成開(kāi)發(fā)環(huán)境Code-Warrior 5.0,它不僅具有很友好的調(diào)試環(huán)境,而且提供了代碼燒寫(xiě)工具,配合USBMULTILINK調(diào)試/編程器,給軟件開(kāi)發(fā)帶來(lái)方便[8]。
該下位機(jī)功能可分為2部分。一部分為接收上位機(jī)傳過(guò)來(lái)的應(yīng)用程序文件;另一部分為刷新車載電控單元的應(yīng)用程序,并上傳刷新進(jìn)度。
接收應(yīng)用程序文件的軟件流程如圖6所示。首先,初始化單片機(jī)并循環(huán)監(jiān)測(cè)串口是否收到上位機(jī)請(qǐng)求。一旦收到應(yīng)用程序傳輸請(qǐng)求,則在請(qǐng)求中提取出16個(gè)字節(jié)的應(yīng)用程序數(shù)據(jù)并存儲(chǔ)。存儲(chǔ)成功后向串口發(fā)送肯定回復(fù);如存儲(chǔ)未成功,則發(fā)送否定回復(fù)并退出??隙ɑ貜?fù)后,根據(jù)請(qǐng)求的幀類型是否為末尾幀來(lái)判斷文件傳輸是否完畢。如未完畢,則繼續(xù)循環(huán)從串口中讀取請(qǐng)求,并提取應(yīng)用程序數(shù)據(jù)存儲(chǔ),直到文件傳輸完畢為止。在此過(guò)程中,如果出現(xiàn)無(wú)效請(qǐng)求或超時(shí),則報(bào)錯(cuò)退出。文件接收完畢后,判斷CRC校驗(yàn)是否正確。如果正確,置應(yīng)用程序有效位,結(jié)束此次文件傳輸;如果錯(cuò)誤,則表示此次傳輸失敗,退出。
刷新應(yīng)用程序的軟件流程如圖7所示。首先,循環(huán)監(jiān)測(cè)串口是否收到上位機(jī)請(qǐng)求。一旦收到應(yīng)用程序刷新請(qǐng)求,則在CAN上發(fā)送進(jìn)入擴(kuò)展模式的診斷請(qǐng)求,與ECU建立診斷通信。如果ECU肯定回復(fù),則在串口回復(fù)上位機(jī)開(kāi)始刷新成功;如果ECU否定回復(fù),則在串口上回復(fù)CAN通信失敗并退出?;貜?fù)上位機(jī)開(kāi)始刷新成功后,下位機(jī)按照ISO15765-3定義的刷新流程,通過(guò)CAN對(duì)ECU進(jìn)行程序刷新,包括關(guān)閉故障設(shè)置、禁止非診斷通信、進(jìn)入刷新模式、擦除ECU FLASH里的應(yīng)用程序代碼空間、請(qǐng)求傳輸新的應(yīng)用程序數(shù)據(jù)和傳輸程序數(shù)據(jù)。在傳輸程序數(shù)據(jù)的過(guò)程中,循環(huán)接收上位機(jī)周期性發(fā)送過(guò)來(lái)的詢問(wèn)軟件刷新進(jìn)度的請(qǐng)求,并根據(jù)傳輸數(shù)據(jù)的進(jìn)度進(jìn)行實(shí)時(shí)回復(fù),便于上位機(jī)更新進(jìn)度條信息。程序數(shù)據(jù)傳輸完畢后,繼續(xù)進(jìn)行ISO15765-3定義的傳輸數(shù)據(jù)檢查和進(jìn)入默認(rèn)模式。此2步順利完成后,則應(yīng)用程序的刷新完成。
該刷新系統(tǒng)經(jīng)過(guò)實(shí)車測(cè)試完全能夠成功刷新符合ISO15765協(xié)議的車載電控單元,上位機(jī)刷新界面如圖8所示。
具體操作流程如下:首先在設(shè)置中選擇串口號(hào)、待刷新ECU的名稱和待更新的應(yīng)用程序二進(jìn)制文件,并在命令下拉菜單中選擇傳輸應(yīng)用程序的命令,然后點(diǎn)擊開(kāi)始;這時(shí),應(yīng)用程序由上位機(jī)傳向下位機(jī),進(jìn)度條實(shí)時(shí)顯示傳輸?shù)倪M(jìn)度;應(yīng)用程序傳輸完畢后,在命令下拉菜單中選擇刷新應(yīng)用程序的命令,并點(diǎn)擊開(kāi)始;此時(shí)下位機(jī)更新ECU的應(yīng)用程序,進(jìn)度條實(shí)時(shí)顯示程序更新的進(jìn)度,直到更新完畢。如果在上述過(guò)程中出現(xiàn)錯(cuò)誤,則顯示有錯(cuò)誤的文字信息。
設(shè)計(jì)了基于ISO15765協(xié)議的車載電控單元應(yīng)用程序的刷新系統(tǒng),并采用了上、下位機(jī)的方式,其中上位機(jī)用作人機(jī)界面,下位機(jī)用作上位機(jī)和車載電控單元之間的通信接口。經(jīng)測(cè)試,該系統(tǒng)可成功刷新符合ISO15765協(xié)議的車載電控單元的應(yīng)用程序。目前,正在研究將上、下位機(jī)的通信由RS232通信改為USB通信,這樣可加快刷新速度。另外,該系統(tǒng)作為一個(gè)CAN通信節(jié)點(diǎn),在汽車電子的其它領(lǐng)域也有廣泛的應(yīng)用前景。
1 ISO15765-2.Road vehicles—Diagnostics on Controller Area Networks(CAN)—Part 2:Network layer services.International Organization for Standardization,2004.
2 ISO15765-3.Road vehicles—Diagnostics on Controller Area Networks(CAN)—Part 3:Implementation of unified diagnostic services (UDS on CAN).International Organization for Standardization,2004.
3 楊樂(lè)平,李海濤,等.LabVIEW高級(jí)程序設(shè)計(jì).北京:清華大學(xué)出版社,2003.
4 Freescale Semiconductor.MC9S12XEP100 Reference Manual Covers MC9S12XE Family.Rev.1.222010.
5 Philips Semiconductors.TJA1040 High speed CAN transceiver data sheet.2003.
6 NXP Semiconductors.TJA1054 Fault-tolerant CAN transceiver data sheet.2010.
7 DALLAS SEMICONDUCTOR.DS276 Low Power Transceiver Chip.1999.
8 邵貝貝,宮輝,等.嵌入式系統(tǒng)中的雙核技術(shù).北京:北京航空航天大學(xué)出版社,2008.