鐘錦華
(廈門博電電子有限公司,福建 廈門 361006)
車身控制器是汽車車身控制系統(tǒng)的核心部件,承擔(dān)車身控制相關(guān)功能的實現(xiàn)。目前大部分的車身控制器生產(chǎn)廠商在給車廠配套時采用定制化的開發(fā)策略,即根據(jù)不同車廠、不同車型的實際功能需求進行針對性的軟件功能開發(fā),這種情況下,車身控制器嵌入式軟件代碼需要重復(fù)編寫,移植性較差,開發(fā)周期較長,投入的研發(fā)成本較高。
硬件是軟件運行的載體,汽車車身電子實現(xiàn)軟件平臺化的基礎(chǔ)是需要一個資源足夠豐富的硬件平臺,以S32K146為主處理器,平臺化設(shè)計的汽車車身控制器硬件基本涵蓋了目前各汽車制造廠商對車身控制的需求,具有功能最大化的特點,軟件平臺化設(shè)計以此硬件平臺為載體[1]。
實現(xiàn)軟件的平臺化需對軟件結(jié)構(gòu)進行分層,不同層之間通過函數(shù)接口進行關(guān)聯(lián),各層內(nèi)部進行模塊化設(shè)計,使平臺化軟件達到通用性強,移植性好的目的。車身電子平臺化軟件從下至上分為驅(qū)動層、中間層、應(yīng)用層。
(1)驅(qū)動層。針對平臺化車身控制系統(tǒng)所有硬件的驅(qū)動程序設(shè)計,以及微控制器內(nèi)部的時鐘、中斷、電源管理等的驅(qū)動程序,并經(jīng)過反復(fù)測試和驗證,形成穩(wěn)定可靠的各驅(qū)動模塊,封裝在驅(qū)動層,通過統(tǒng)一的接口供中間層和應(yīng)用層進行調(diào)用。底層驅(qū)動獨立于其它層軟件,只與平臺的硬件相關(guān)。
(2)中間層。主要負責(zé)各模塊的實時協(xié)調(diào)和管理,以及車身控制系統(tǒng)本身需求的數(shù)據(jù)信息存儲,診斷服務(wù),網(wǎng)絡(luò)管理服務(wù),Bootloader服務(wù),通信數(shù)據(jù)接收與分析以及各類輸入信號采集等。系統(tǒng)軟件采用定時任務(wù)機制,通過任務(wù)優(yōu)先級和消息傳遞進行實時的任務(wù)調(diào)度管理。
(3)應(yīng)用層。這一層軟件主要進行控制邏輯設(shè)計,比如門鎖控制,車外燈控制,雨刮控制等,并調(diào)用底層或中間層相關(guān)函數(shù),實現(xiàn)最終功能。這一層軟件將根據(jù)不同項目的實際需求進行變更和調(diào)整。
平臺化的車身電子嵌入式軟件將非應(yīng)用邏輯部分的內(nèi)容設(shè)計在中間層,并經(jīng)過反復(fù)測試和驗證后,形成固化函數(shù),應(yīng)用層通過標準的函數(shù)接口來調(diào)用固化函數(shù)庫里的函數(shù),實現(xiàn)相關(guān)功能或運算。以左右轉(zhuǎn)向燈、應(yīng)急燈控制任務(wù)為例,任務(wù)的實現(xiàn)主要包括以下模塊[2]:
TurnLampSwitchDetect()函數(shù)模塊實時檢測左右轉(zhuǎn)向燈開關(guān)和應(yīng)急燈開關(guān)的狀態(tài),其中包括數(shù)字檢測和AD檢測方式,初始化時對檢測方式進行配置。TurnLampControlS tart(Type,Timer,Count)函數(shù)模塊為轉(zhuǎn)向燈應(yīng)急燈輸出啟動函數(shù),該函數(shù)模塊包含三個參數(shù),Type用于指明當前的輸出是左轉(zhuǎn)向、右轉(zhuǎn)向還是應(yīng)急燈;Timer用于規(guī)定燈的閃爍周期;Count用于規(guī)定燈閃爍周期個數(shù),若值為0xFF則持續(xù)閃爍。TurnLampMissingDetect(Type,Method)函數(shù)模塊用于實現(xiàn)左右轉(zhuǎn)向燈工作時的一燈損壞檢測,包含兩個參數(shù),Type用于指明當前正在輸出的是左轉(zhuǎn)向燈還是右轉(zhuǎn)向燈,Method用于指明故障檢測方式,是AD檢測還是數(shù)字開關(guān)信號檢測;TurnLampControlStop(Type)為轉(zhuǎn)向燈應(yīng)急燈停止輸出函數(shù)模塊,包含一個參數(shù)Type用于指明當前需要停止輸出的是左轉(zhuǎn)向燈,右轉(zhuǎn)向燈還是應(yīng)急燈。上述轉(zhuǎn)向燈應(yīng)急燈控制相關(guān)的函數(shù)模塊結(jié)合輸入輸出配置、變量固化封裝在中間層,并向邏輯層提供函數(shù)接口。而運用邏輯層在完成相關(guān)邏輯運算后只需調(diào)用相關(guān)函數(shù)即可實現(xiàn)左右轉(zhuǎn)向燈,應(yīng)急燈控制的功能[3]。
診斷軟件平臺化設(shè)計是車身控制器軟件平臺化的重要組成部分,應(yīng)根據(jù)UDS診斷規(guī)范內(nèi)容,本著通用性好的特點,對每個服務(wù)進行模塊化設(shè)計,將每個服務(wù)的函數(shù)入口進行封裝,實現(xiàn)平臺化的功能。
針對不同診斷服務(wù)的各個子功能,亦采用模塊化設(shè)計,并通過函數(shù)接口進行調(diào)用。診斷服務(wù)軟件根據(jù)UDS規(guī)范進行模塊化設(shè)計,使車身控制器在針對不同項目的診斷需求時,只需做少量的配置修改或不修改就可以實現(xiàn)完整的診斷服務(wù)功能,有效避免了代碼的重復(fù)設(shè)計,提高了診斷軟件的可移植性和通用性。
平臺化設(shè)計的車身控制器軟件應(yīng)具有在線升級的功能,且應(yīng)將Bootloader引導(dǎo)和加載程序進行固化。Bootloader設(shè)計首先需要對MCU內(nèi)部存儲器空間進行劃分,劃分出特定的應(yīng)用程序和Bootloader的存儲空間。Bootloader存儲空間存放的代碼包括初始化啟動代碼、傳輸協(xié)議、CAN驅(qū)動、Flash驅(qū)動、引導(dǎo)加載程序等。Bootloader程序?qū)⒐袒趦?nèi)部分配的存儲空間里,除通過編譯器進行軟件更新外,程序不會更改[4-6]。
平臺化車身控制器在線升級過程基于UDS診斷協(xié)議設(shè)計,通過標準的診斷協(xié)議控制Bootloader的升級流程,車身控制器進行在線升級時,首先執(zhí)行應(yīng)用程序中的診斷服務(wù)內(nèi)容,包括診斷會話的控制,編程條件的檢查等操作,為在線下載做準備并確認條件是否滿足,稱為編程前預(yù)處理。當所有條件滿足,將切換成編程會話,控制控制器復(fù)位并執(zhí)行Bootloader程序,通過接收上位機或診斷儀發(fā)送的指令進行應(yīng)用程序存儲區(qū)的擦除,文件的引導(dǎo)和加載等,這個過程稱為編程處理。編程處理的結(jié)束根據(jù)接收到的復(fù)位指令,控制控制器重新復(fù)位,而復(fù)位執(zhí)行的應(yīng)用程序是最新加載的代碼[7-8]。
依據(jù)UDS診斷協(xié)議進行車身控制器Bootlaoder軟件設(shè)計,使Bootloader軟件可運用到不同的項目,具有通用性和可移植性,并實現(xiàn)Bootloader軟件的平臺化設(shè)計。
本文對汽車車身電子控制器嵌入式軟件平臺化開發(fā)進行了探索,采用模塊化,層級架構(gòu)的設(shè)計思路進行嵌入式軟件的設(shè)計。在實際使用時,平臺化車身控制器可根據(jù)不同應(yīng)用需求,進行功能擴展或裁剪,具有移植性好、通用性強的特點,同時車身控制器軟件采用平臺化開發(fā)可大大縮短開發(fā)周期,降低開發(fā)成本。