陳祖銳,廖振偉,谷城,劉志軍,劉虎山
柳州賽克科技發(fā)展有限公司,廣西柳州 545005
由于TCU在汽車中的安裝環(huán)境復(fù)雜,拆卸TCU硬件十分困難,再加上利用串口、JTAG等交互手段均需要給TCU增加額外的硬件電路,增加開發(fā)成本。所以本文參照ISO14229標(biāo)準(zhǔn)的UDS(unified diagnostic services)診斷規(guī)范,結(jié)合整車廠的診斷規(guī)范和軟件升級(jí)規(guī)范需求。設(shè)計(jì)一套UDSonCAN為基礎(chǔ)的TCU軟件升級(jí)方案,即TCU的Bootloader方案設(shè)計(jì)。該方案以CAN(controller area network)網(wǎng)絡(luò)通信為基礎(chǔ),基于UDS診斷服務(wù)規(guī)范,實(shí)現(xiàn)對(duì)TCU特定的Flash地址區(qū)域進(jìn)行程序刷新。此方案的實(shí)現(xiàn),在不需要對(duì)TCU進(jìn)行硬件拆卸就可以快速、可靠、穩(wěn)定地進(jìn)行TCU軟件更新,大大縮短軟件開發(fā)周期,減少開發(fā)成本,提高軟件程序的交付質(zhì)量。
ISO 14229標(biāo)準(zhǔn)中準(zhǔn)確定義了UDSonCAN的全部診斷服務(wù),包括數(shù)據(jù)傳輸服務(wù)、通信管理服務(wù)、上傳下載服務(wù)、例程控制模式,且每個(gè)服務(wù)都有特定的SID(service identify)。
此方案是基于UDSonCAN的Bootloader設(shè)計(jì)方案,主要用到的UDS服務(wù)及其功能概述如下:
(1)診斷會(huì)話控制:控制電控單元處于不同的診斷會(huì)話模式中。
(2)通過標(biāo)識(shí)符讀數(shù)據(jù):向電控單元讀取特定的信息。
(3)通過標(biāo)識(shí)符寫數(shù)據(jù):向電控單元寫入特定的信息。
(4)例程控制:啟動(dòng)或停止特定的程序。
似乎所有津津樂道的故事都有類似這樣一個(gè)“風(fēng)騷”的開始:初識(shí)只作乍見之歡。我們似乎都是習(xí)慣了喜新厭舊的人,喜歡去新的城市,喜歡探索新的事物,喜歡更換新的物品,喜歡接觸新的人……世間的美好,多數(shù)在于初見,初見你初妝、初見你笑顏……然而好的事物容易有一個(gè)通病,那就是都不長遠(yuǎn)。越是璀璨,就越是脆弱。花前月下,塵夢(mèng)如煙,似曾相識(shí),曇花一現(xiàn)!其實(shí),人生難得的是日后久處不厭,如果是,那么,有生之年,有幸遇見。
(5)安全訪問:向電控單元請(qǐng)求種子和發(fā)送秘鑰。
(6)通信控制:開啟或關(guān)閉電控單元特定報(bào)文的接收或發(fā)送。
(7)DTC設(shè)置控制:停止或恢復(fù)電控單元的故障診斷功能。
(8)請(qǐng)求下載:向電控單元請(qǐng)求進(jìn)行下載服務(wù)。
(9)傳輸數(shù)據(jù):向電控單元傳輸數(shù)據(jù)。
(10)請(qǐng)求退出傳輸:向電控單元請(qǐng)求退出數(shù)據(jù)傳輸。
(11)ECU復(fù)位:向電控單元請(qǐng)求復(fù)位操作。
UDS服務(wù)對(duì)應(yīng)的SID見表1。
表1 UDS服務(wù)對(duì)應(yīng)的SID
CAN是基于開放式系統(tǒng)互聯(lián)通信參考模型(OSI)設(shè)計(jì)的一種通信協(xié)議。CAN協(xié)議采用CRC檢驗(yàn)和相應(yīng)的錯(cuò)誤處理功能,保證數(shù)據(jù)傳輸?shù)目煽啃?。CAN的通信介質(zhì)為雙絞線、同軸電纜或光導(dǎo)纖維,速率可達(dá)1 MB/S,性價(jià)比極高。所以CAN總線是當(dāng)前汽車領(lǐng)域廣泛使用的一種通信方式,實(shí)現(xiàn)了整車電控單元之間的信息交互,以及電控單元和上位機(jī)之間的數(shù)據(jù)傳輸和命令交互。其中UDSonCAN在OSI模型中的分層結(jié)構(gòu)見表2。
表2 UDSonCAN在OSI模型中的分層結(jié)構(gòu)
Bootloader是嵌入式系統(tǒng)在加電后執(zhí)行的第一段代碼,所以也稱為引導(dǎo)程序,主要用于軟件刷新。在一個(gè)成熟的嵌入式系統(tǒng)方案中,Bootloader和APP(應(yīng)用層程序)是分開的,分別存放于不同的內(nèi)存區(qū)域中。
此方案設(shè)計(jì)了多級(jí)Bootloader,如圖1所示。上電之后默認(rèn)進(jìn)入Boot1,逐級(jí)跳轉(zhuǎn)至APP,各級(jí)Bootloader和APP互不干擾。
圖1 多級(jí)Bootloader的設(shè)計(jì)
FlashDriver是一段具備擦除內(nèi)存數(shù)據(jù)功能的程序,出于功能安全考慮,Bootloader中不能包含F(xiàn)lashDriver(刷新驅(qū)動(dòng)),避免程序跑飛運(yùn)行至FlashDriver中,對(duì)TCU程序造成不可逆的破壞。為了避免上述情況,F(xiàn)lashDriver一般存放于上位機(jī)中,在編程過程中才將FlashDriver下載至特定的內(nèi)存區(qū)域中,通過Bootloader調(diào)用FlashDriver程序,實(shí)現(xiàn)內(nèi)存擦除功能。
在程序刷新之前,需要通知整車其他的電控單元TCU即將進(jìn)行程序刷新,所以功能尋址需要進(jìn)入擴(kuò)展會(huì)話模式;利用UDS的28服務(wù),通過功能尋址禁止其他節(jié)點(diǎn)的報(bào)文發(fā)送,使整個(gè)CAN總線處于安靜的狀態(tài),降低總線的負(fù)載率,提高程序刷寫速度;利用UDS的85服務(wù),禁止整車其他電控單元的故障診斷,防止程序刷新過程中其他電控單元誤觸發(fā)故障碼;利用UDS的22服務(wù),讀取當(dāng)前TCU的特定信息(如標(biāo)定數(shù)據(jù)版本、軟件版本、硬件版本)保證軟件版本的匹配性。預(yù)編程設(shè)計(jì)流程如圖2所示。
圖2 預(yù)編程設(shè)計(jì)流程
在預(yù)編程結(jié)束之后,進(jìn)入編程階段。首先進(jìn)入編程會(huì)話模式,然后通過安全訪問。
由于FlashDriver是不存儲(chǔ)于TCU內(nèi)部中的,所以第一步是將FlashDriver下載至指定內(nèi)存區(qū)域中。下載完畢利用UDS的31服務(wù)進(jìn)行數(shù)據(jù)校驗(yàn),校驗(yàn)無誤之后通過Bootloader開始調(diào)用FlashDriver程序。
接下來是根據(jù)需求擦除特定的內(nèi)存區(qū)域并傳輸新的數(shù)據(jù)。傳輸完畢利用UDS的31服務(wù)進(jìn)行數(shù)據(jù)校驗(yàn),校驗(yàn)無誤TCU才保存至特定的內(nèi)存區(qū)域中。編程設(shè)計(jì)流程如圖3所示。
圖3 編程設(shè)計(jì)流程
該方案可對(duì)各級(jí)Bootloader進(jìn)行更新,在擦除Bootloader內(nèi)存前會(huì)對(duì)最基礎(chǔ)的Bootloader做備份,防止下載過程中出錯(cuò)導(dǎo)致最基礎(chǔ)的Bootloader丟失。
在預(yù)編程和編程結(jié)束之后,功能尋址進(jìn)入擴(kuò)展會(huì)話模式,利用UDS中的28服務(wù),恢復(fù)其他節(jié)點(diǎn)的報(bào)文發(fā)送;利用UDS中的85服務(wù),恢復(fù)其他電控單元的故障診斷。
根據(jù)整車廠的刷新規(guī)范,還要利用UDS中的2E服務(wù),寫入一些特定的信息(如軟件版本號(hào)、供應(yīng)商號(hào)等),便于保持軟件刷新的可追溯性。后編程設(shè)計(jì)流程如圖4所示。
圖4 后編程設(shè)計(jì)流程
為了驗(yàn)證此方案的可行性和可靠性,利用了INCA軟件和ETAS582硬件工具進(jìn)行測(cè)試。根據(jù)設(shè)計(jì)的刷新流程,編寫INCA軟件的Prof(INCA軟件的刷新流程)文件,Prof界面如圖5所示。通過Prof界面選擇要刷新的區(qū)域,對(duì)整個(gè)Bootloader方案進(jìn)行多次測(cè)試和驗(yàn)證,INCA刷新界面如圖6所示。
圖5 Prof界面
圖6 INCA刷新界面
測(cè)試結(jié)果表明,該方案能滿足對(duì)TCU的程序刷新,并且整個(gè)過程方便、快速、穩(wěn)定。即使人為操作導(dǎo)致刷新過程失敗,也可以通過上位機(jī)界面或CAN總線數(shù)據(jù)中判斷出失敗的原因所在。
基于UDSonCAN服務(wù)的Bootloader的設(shè)計(jì),實(shí)現(xiàn)了只需要與TCU進(jìn)行CAN總線連接,不需要對(duì)TCU硬件拆卸,就可以隨時(shí)隨地進(jìn)行軟件刷新。在前期的開發(fā)設(shè)計(jì)中,節(jié)約了開發(fā)人員的時(shí)間成本;在后期的功能升級(jí)中,提高了售后服務(wù)的工作效率。該方案在整個(gè)刷新過程中穩(wěn)定、防錯(cuò)能力強(qiáng)、可靠性極高,并且嚴(yán)格遵循整車廠的診斷規(guī)范和刷新流程,可拓展于OTA軟件升級(jí)流程中。