依稀記得是2019年國(guó)慶假期后回來(lái)上班的第二天,收到售后的一封郵件,大意是:客戶剛提車1個(gè)月,已發(fā)生2次車輛饋電導(dǎo)致無(wú)法啟動(dòng),客戶現(xiàn)在正鬧著要退車,請(qǐng)相關(guān)工程師全力協(xié)助排查。過(guò)程不去贅述,最終結(jié)論就是車輛的TBOX被云端異常周期喚醒,TBOX隨后又喚醒整車,如此周期往復(fù),最終導(dǎo)致整車小電池電量耗盡發(fā)生饋電,饋電是整車網(wǎng)絡(luò)管理中最不愿意見(jiàn)到的一幕,傷敵一千自損八百。而隨著桀驁不馴的智駕域的加入,整車網(wǎng)絡(luò)管理難度也隨之加大,已經(jīng)開(kāi)始挑戰(zhàn)各主機(jī)廠的企業(yè)標(biāo)準(zhǔn)。如何對(duì)包含智駕域的整車進(jìn)行網(wǎng)絡(luò)管理,如何將有限的能量轉(zhuǎn)換為無(wú)限長(zhǎng)的放置時(shí)間,成為主機(jī)廠會(huì)議室中一個(gè)重要的議題,本文就對(duì)擔(dān)負(fù)著減少整車能量消耗的網(wǎng)絡(luò)管理進(jìn)行介紹。
01 喚醒休眠
整車上的部分控制器會(huì)一直由小電瓶供電,這樣才能支持你隨心所欲地遠(yuǎn)程控車、遙控尋車等功能,但是車輛在長(zhǎng)時(shí)間靜置的時(shí)候,如果一直保持著功能就緒狀態(tài)的電量消耗,那么車輛上小電池的電量將會(huì)急劇減少,雖然現(xiàn)在電動(dòng)車都設(shè)計(jì)有大電池給小電池的補(bǔ)電策略,但這種消耗帶來(lái)的續(xù)航里程減少也是不可容忍的,為了規(guī)避這個(gè)問(wèn)題,就需要對(duì)常電供電的控制器進(jìn)行網(wǎng)絡(luò)管理。在整車網(wǎng)絡(luò)管理的眼中,控制器沒(méi)有了算力高低之分,沒(méi)有了高矮胖瘦之分,有的只是喚醒和休眠之分。車輛在需要控制器出苦力的時(shí)候(整車上電)將其喚醒,而在準(zhǔn)備吃香喝辣的時(shí)候(整車下電)又將其休眠,地主老爺不過(guò)如此。對(duì)于控制器來(lái)說(shuō),喚醒的時(shí)候究竟是醒了什么,怎么醒的?休眠的時(shí)候究竟是眠了什么,怎么眠的?這是正式介紹網(wǎng)絡(luò)管理前必須要理清的概念。對(duì)于控制器來(lái)說(shuō),常用的喚醒方式有硬線喚醒和網(wǎng)絡(luò)喚醒,與之相對(duì)應(yīng)的休眠方式也就有硬線休眠和網(wǎng)絡(luò)休眠。
(1)硬線喚醒休眠
硬線喚醒休眠是指通過(guò)電壓或電流方式喚醒休眠控制器,整車控制器常用的硬線喚醒休眠方式為KL15點(diǎn)火信號(hào),在發(fā)動(dòng)機(jī)啟動(dòng)(燃油車)或整車上高壓(電動(dòng)車)時(shí),KL15點(diǎn)火信號(hào)會(huì)由0V上升到12V。不同控制器基于實(shí)現(xiàn)的功能不同,硬線喚醒休眠的內(nèi)部邏輯也會(huì)有所區(qū)別,本節(jié)為了解釋硬線喚醒休眠的邏輯,以一個(gè)簡(jiǎn)單系統(tǒng)為例,給出了一種使用KL15點(diǎn)火信號(hào)喚醒控制器的可能硬件架構(gòu),如圖1所示。
圖1 一種支持硬線喚醒休眠的硬件架構(gòu)
該系統(tǒng)由CPU,承擔(dān)電源管理功能的系統(tǒng)基礎(chǔ)芯片(System Basis Chip,SBC),CAN收發(fā)器、外部存儲(chǔ)器、溫度傳感器、蓄電池等組成。圖1中紅色實(shí)線和虛線代表電源線、黑色實(shí)線代表信號(hào)線。在該系統(tǒng)中SBC直接接蓄電池,也就是由KL30供電,除非蓄電池發(fā)生故障或饋電,否則無(wú)論整車點(diǎn)火還是熄火,SBC都會(huì)有電。SBC的喚醒接口接KL15點(diǎn)火信號(hào),在整車沒(méi)有點(diǎn)火或上高壓時(shí),KL15端電壓為0,SBC判斷整車沒(méi)有喚醒需求,從而進(jìn)入到Sleep模式,且不對(duì)片內(nèi)其他模塊供電,其他模塊進(jìn)入到OFF或Shutdown模式,此時(shí)控制器整體對(duì)外表現(xiàn)出一種低功耗休眠模式,控制器的靜態(tài)電流也就是這種模式下的電流,傳統(tǒng)控制器的靜態(tài)電流常要求20mA以內(nèi)。當(dāng)整車點(diǎn)火或上高壓,KL15端電壓升高到12V,SBC檢測(cè)到整車有喚醒需求,由Sleep模式一步步跳轉(zhuǎn)到Normal模式,并打開(kāi)對(duì)CPU、CAN收發(fā)器、外部存儲(chǔ)器、溫度傳感器等模塊的供電,整車控制器隨之開(kāi)始正常工作。當(dāng)整車熄火或下高壓,SBC和CPU同時(shí)檢測(cè)到KL15端電壓下降,CPU進(jìn)行下電前的準(zhǔn)備工作,包括緩存寫(xiě)入外部存儲(chǔ)器,并將是否準(zhǔn)備好下電的狀態(tài)通過(guò)SPI告知SBC,SBC收到CPU準(zhǔn)備就緒的狀態(tài)后,按照設(shè)定好的順序依次切斷其他模塊的供電,自身隨后一步步跳轉(zhuǎn)到Sleep模式。
(2)網(wǎng)絡(luò)喚醒休眠
網(wǎng)絡(luò)喚醒休眠是指通過(guò)網(wǎng)絡(luò)管理報(bào)文喚醒休眠控制器,CAN網(wǎng)絡(luò)下一種網(wǎng)絡(luò)喚醒硬件架構(gòu)如圖2所示。
圖2一種支持網(wǎng)絡(luò)喚醒休眠的硬件架構(gòu)
CAN收發(fā)器通過(guò)一個(gè)DCDC和KL30直連,在沒(méi)有網(wǎng)絡(luò)喚醒需求的時(shí)候,CAN收發(fā)器進(jìn)入Sleep模式,一旦檢測(cè)到CAN總線上有網(wǎng)絡(luò)喚醒報(bào)文,CAN從Sleep模式恢復(fù),INH引腳產(chǎn)生一個(gè)10ms的高電平信號(hào), SBC的WAK引腳檢測(cè)到一個(gè)10ms的高電平信號(hào), SBC被喚醒。SBC收到喚醒信號(hào)后,由Sleep模式一步步跳轉(zhuǎn)到Normal模式,并打開(kāi)對(duì)CPU、外部存儲(chǔ)器、溫度傳感器等模塊的供電,整車控制器隨之開(kāi)始正常工作,休眠過(guò)程與之類似。知道了喚醒休眠的本質(zhì),接下來(lái)就能介紹網(wǎng)絡(luò)管理了,目前整車上常用的網(wǎng)絡(luò)管理方式包括OSEK網(wǎng)絡(luò)管理和AUTOSAR網(wǎng)絡(luò)管理,下文將逐一介紹。
02 OSEK網(wǎng)絡(luò)管理
為了解決汽車控制技術(shù)通信和網(wǎng)絡(luò)發(fā)展多元化帶來(lái)的軟件移植和不同應(yīng)用程序的接口協(xié)調(diào)問(wèn)題,德國(guó)汽車工業(yè)界在1993年推出了OSEK(open systems and the corresponding interfaces for automotive electronics)體系,定義汽車開(kāi)放式系統(tǒng)及接口。1994年法國(guó)標(biāo)致雷諾將汽車分布式運(yùn)行系統(tǒng)VDX(vehicle distributed executive)納入OSEK。在1995年召開(kāi)的OSEK研討會(huì)上,眾多的廠商對(duì)OSEK和VDX的認(rèn)識(shí)達(dá)成了共識(shí),產(chǎn)生了OSEK/VDX規(guī)范(1997年發(fā)布)。它主要由四部分組成:操作系統(tǒng)規(guī)范(OSEK Operating System,OSEK OS)、通信規(guī)范(OSEK Communication , OSEK COM)、網(wǎng)絡(luò)管理規(guī)范(OSEK Net Management,OSEK NM)和OSEK實(shí)現(xiàn)語(yǔ)言(OSEK Implementation Language,OIL)。OSEK網(wǎng)絡(luò)管理是一個(gè)三層的狀態(tài)機(jī),最頂層有三個(gè)狀態(tài):NMOff,NMOn和NMShutDown,如圖3所示。
圖3 OSEK網(wǎng)絡(luò)管理頂層狀態(tài)機(jī)
(1)NMOff
網(wǎng)絡(luò)管理關(guān)閉狀態(tài),控制器上電后首先進(jìn)入的狀態(tài),通過(guò)調(diào)用StartNM接口,控制器將離開(kāi)此狀態(tài)并開(kāi)始運(yùn)行網(wǎng)絡(luò)管理,運(yùn)行中的網(wǎng)絡(luò)管理通過(guò)調(diào)用StopNM接口,控制器將跳轉(zhuǎn)到NMShutDown狀態(tài),進(jìn)而回到此狀態(tài)并關(guān)閉網(wǎng)絡(luò)管理。
(2)NMOn
進(jìn)入到NMOn狀態(tài)后,又會(huì)按照?qǐng)D4進(jìn)行網(wǎng)絡(luò)管理,圖4左右兩邊是兩組并行的狀態(tài),互不影響。對(duì)于左邊來(lái)說(shuō),首先進(jìn)入NMinit狀態(tài)并進(jìn)行硬件初始化,初始化完成后,如果有通信需求會(huì)跳轉(zhuǎn)到NMAwake狀態(tài),如果沒(méi)有通信需求會(huì)跳轉(zhuǎn)到NMBusSleep。對(duì)于右邊來(lái)說(shuō)默認(rèn)進(jìn)入NMActive子狀態(tài),表示參與邏輯環(huán)循環(huán)過(guò)程,若應(yīng)用層通過(guò)參數(shù)設(shè)置為不參與,則將跳轉(zhuǎn)到NMPassive狀態(tài),控制器停止發(fā)送Ring消息及參與邏輯環(huán)的循環(huán)過(guò)程。
圖4 NMOn下子狀態(tài)機(jī)
NMAwake狀態(tài)是控制器正常進(jìn)行網(wǎng)絡(luò)管理時(shí)長(zhǎng)期保持的狀態(tài),還可以繼續(xù)細(xì)分為三個(gè)子狀態(tài)NMReset、NMNormal和NMLimpHome,如圖5所示。
圖5 NMAwake下子狀態(tài)機(jī)
(a)NMReset
控制器喚醒后會(huì)一步步跳轉(zhuǎn)到NMReset狀態(tài),并以廣播形式發(fā)出一幀特殊網(wǎng)絡(luò)管理報(bào)文(第一字節(jié)是控制器自身ID,第二字節(jié)Bit0為1),用來(lái)喚醒其他控制器及建立邏輯環(huán)。當(dāng)網(wǎng)絡(luò)中所有控制器都發(fā)完Alive報(bào)文之后,網(wǎng)絡(luò)中所有控制器根據(jù)收到的Alive報(bào)文ID由小到大的循序確認(rèn)自己的邏輯后繼節(jié)點(diǎn),ID最大控制器的后繼節(jié)點(diǎn)為ID最小控制器(如21->22->23->24->25>26->21),由此組成一個(gè)邏輯環(huán),并進(jìn)入NMNormal狀態(tài)。
(b)NMNormal
最初發(fā)送Alive報(bào)文的控制器(或者Alive報(bào)文標(biāo)識(shí)符優(yōu)先級(jí)高的控制器)成為邏輯環(huán)中的第一個(gè)Ring報(bào)文發(fā)送控制器,Ring報(bào)文的第一個(gè)字節(jié)是下一個(gè)控制器的ID,第二字節(jié)的Bit1為1。網(wǎng)絡(luò)中其他控制器收到指向自身ID的網(wǎng)絡(luò)管理報(bào)文后,也被稱為“令牌”,才能發(fā)出自身Ring報(bào)文,因此網(wǎng)絡(luò)中同一時(shí)間只有一個(gè)控制器能發(fā)出網(wǎng)絡(luò)管理報(bào)文,每個(gè)控制器按照順序發(fā)送網(wǎng)絡(luò)管理報(bào)文,這個(gè)順序就叫做邏輯環(huán),一個(gè)簡(jiǎn)單的邏輯環(huán)原理如圖6所示。
圖6 邏輯環(huán)原理
邏輯環(huán)建立完成之后,無(wú)論是有新控制器加入還是某個(gè)控制器掉線,都需要重新進(jìn)行建環(huán)以維持正常的網(wǎng)絡(luò)管理,因此對(duì)網(wǎng)絡(luò)的穩(wěn)定性要求比較高,整體策略比較復(fù)雜。當(dāng)控制器自身休眠條件滿足,就會(huì)發(fā)出睡眠指示位 (Sleep.Ind,第二字節(jié)Bit4) 為 1 的 Ring 報(bào)文,表示自身不再主動(dòng)請(qǐng)求網(wǎng)絡(luò)管理,當(dāng)所有控制器都滿足休眠條件,最后一個(gè)休眠控制器的下一個(gè)節(jié)點(diǎn),就會(huì)依次發(fā)出睡眠應(yīng)答位 (Sleep.Ack,,第二字節(jié)Bit5) 為 1 的 Ring 報(bào)文,當(dāng)網(wǎng)絡(luò)上所有控制器都接收到其他所有控制器的睡眠應(yīng)答位為1的Ring報(bào)文后,等待一定時(shí)間后同步進(jìn)入睡眠狀態(tài)。這個(gè)時(shí)候,控制器會(huì)停止發(fā)送任何報(bào)文到總線,等待控制器的內(nèi)部任務(wù)完成后,就會(huì)進(jìn)入低功耗模式,靜態(tài)電流會(huì)變得很小。
(3)NMLimpHome
如果控制器或總線有故障導(dǎo)致邏輯環(huán)建立失敗,控制器將進(jìn)入NMLimpHome狀態(tài),并按一定周期發(fā)送LimpHome網(wǎng)絡(luò)管理報(bào)文(第一字節(jié)是自己的ID,第二字節(jié)Bit2為1)。
03 AUTOSAR網(wǎng)絡(luò)管理
2003年汽車行業(yè)內(nèi)的幾大巨頭(BMW, Bosch, Continental, DaimlerChrysler, Volkswagen, Siemens VDO)聯(lián)合建立了AUTOSAR(AUTomotive Open System ARchitecture)聯(lián)盟,一起開(kāi)發(fā)并建立一套真正的開(kāi)放的汽車電子電器架構(gòu),也就是我們現(xiàn)在所說(shuō)的AUTOSAR標(biāo)準(zhǔn)或者架構(gòu)。AUTOSAR網(wǎng)絡(luò)管理的狀態(tài)機(jī)有三個(gè)模式:Bus-Sleep Mode、Network Mode和Prepare Bus-Sleep Mode,如圖7所示。
圖7 AUTOSAR網(wǎng)絡(luò)管理狀態(tài)機(jī)
(1)Bus-Sleep Mode
控制器上電狀態(tài),如果沒(méi)有本地喚醒或遠(yuǎn)程喚醒請(qǐng)求時(shí),控制器將進(jìn)入的一種休眠模式,此模式下控制器電流消耗將降低至最低水平。該模式下,網(wǎng)絡(luò)管理報(bào)文及應(yīng)用報(bào)文都被禁止發(fā)送,但可以接收網(wǎng)絡(luò)管理報(bào)文和應(yīng)用報(bào)文。當(dāng)收發(fā)器支持特定幀喚醒時(shí),那么控制器只有在接收到事先定義好的網(wǎng)絡(luò)管理報(bào)文才會(huì)喚醒;當(dāng)收發(fā)器不支持特定幀喚醒時(shí),那么網(wǎng)絡(luò)上的任意報(bào)文都可以將控制器喚醒,喚醒之后再去判斷是否為有效網(wǎng)絡(luò)管理報(bào)文,如果不是,又會(huì)再次按照休眠流程進(jìn)入到休眠模式。
(2)Network Mode
Network Mode模式又可細(xì)分為三個(gè)子狀態(tài):Repeat Message State、Normal Operation State和Ready Sleep State,如圖2所示。
圖8 Network Mode下子狀態(tài)機(jī)
(a)Repeat Message State
Repeat Message State是一個(gè)短時(shí)間的重復(fù)消息狀態(tài),當(dāng)控制器從Bus-Sleep Mode或者Prepare Bus-Sleep Mode進(jìn)入到Network Mode后,控制器會(huì)發(fā)出自身的網(wǎng)絡(luò)管理報(bào)文通知其他控制器自己上線,就好比你早上到了辦公室之后,和身邊的同事打個(gè)招呼,告訴他們今日話搭子已上線,請(qǐng)做好嘮嗑準(zhǔn)備。Repeat Message State下還有兩個(gè)子狀態(tài):NM Immediate Transmit State和NM Normal Transmit State,兩個(gè)狀態(tài)的主要區(qū)別就是網(wǎng)絡(luò)管理報(bào)文發(fā)送周期的不同,前面子狀態(tài)下網(wǎng)絡(luò)管理報(bào)文可以按照配置參數(shù)高頻發(fā)送一定周期,目的是快速喚醒整個(gè)網(wǎng)絡(luò),后面子狀態(tài)下網(wǎng)絡(luò)管理報(bào)文恢復(fù)到正常周期。進(jìn)入到Network Mode后,應(yīng)用報(bào)文需要在第一幀網(wǎng)絡(luò)管理報(bào)文發(fā)送之后再發(fā)送,同時(shí)開(kāi)啟一個(gè)計(jì)時(shí)器,在計(jì)時(shí)器超時(shí)之前會(huì)一直保持該狀態(tài),否則會(huì)離開(kāi)該狀態(tài),
(b)Normal Operation State
當(dāng)控制器自身存在網(wǎng)絡(luò)通信的需求,且整車網(wǎng)絡(luò)和控制器均正常,那么控制器將跳轉(zhuǎn)并一直保持在Normal Operation State狀態(tài),進(jìn)入該狀態(tài)后,控制器將周期性發(fā)送網(wǎng)絡(luò)管理報(bào)文,同時(shí)正常收發(fā)應(yīng)用報(bào)文。
(c)Ready Sleep State
當(dāng)控制器不再需要網(wǎng)絡(luò)通信時(shí)處于的就緒休眠狀態(tài),該狀態(tài)下控制器將停止發(fā)送網(wǎng)絡(luò)管理報(bào)文,但可以正常發(fā)送自身的應(yīng)用報(bào)文,同時(shí)正常收發(fā)應(yīng)用層報(bào)文。進(jìn)入該狀態(tài)后將同時(shí)啟動(dòng)一個(gè)計(jì)數(shù)器,每次成功接收到其他控制器發(fā)送的網(wǎng)絡(luò)管理報(bào)文,計(jì)時(shí)器將重置,一旦計(jì)時(shí)器超時(shí),控制器將跳轉(zhuǎn)到Prepare Bus-Sleep狀態(tài)。整車網(wǎng)絡(luò)和控制器均正常,控制器將維持在Normal Operation State和Ready Sleep State狀態(tài),差別就是自身是否有網(wǎng)絡(luò)通信需求。
(3)Prepare Bus-Sleep Mode
此模式為控制器準(zhǔn)備進(jìn)入睡眠模式的一個(gè)過(guò)渡,不會(huì)長(zhǎng)期處于此模式。該模式下網(wǎng)絡(luò)管理報(bào)文停止發(fā)送,可以接收網(wǎng)絡(luò)管理報(bào)文,已經(jīng)存在緩存器的應(yīng)用報(bào)文可以繼續(xù)發(fā)送,同時(shí)不再接收應(yīng)用層報(bào)文。進(jìn)入該模式后,同樣啟動(dòng)一個(gè)計(jì)時(shí)器,一旦計(jì)時(shí)時(shí)間到,就將跳轉(zhuǎn)到Bus-Sleep Mode。
04 比較
(1)相同點(diǎn)
(a)均屬于直接網(wǎng)絡(luò)管理。
(b)均需要特定的網(wǎng)絡(luò)管理報(bào)文,且每個(gè)控制器的網(wǎng)絡(luò)管理報(bào)文ID均不同。
(c)喚醒方式相同,網(wǎng)絡(luò)中第一個(gè)喚醒的控制器發(fā)送網(wǎng)絡(luò)管理報(bào)文喚醒其他控制器。
(d)目的相同,都是協(xié)調(diào)多個(gè)控制器同步喚醒及休眠,并最終達(dá)到低功耗的目的。
(2)不同點(diǎn):
(a)喚醒幀類型不同,OSEK網(wǎng)絡(luò)管理要求控制器喚醒后的第一幀網(wǎng)絡(luò)管理報(bào)文必須為Alive類型,而AUTOSAR網(wǎng)絡(luò)管理要求只要是網(wǎng)絡(luò)管理報(bào)文即可。
(b)休眠邏輯不同,OSEK網(wǎng)絡(luò)管理的休眠是一個(gè)請(qǐng)求和確認(rèn)的過(guò)程,所有控制器都發(fā)送Ring請(qǐng)求休眠幀,且收到其它控制器的Ring確認(rèn)休眠幀之后才可以準(zhǔn)備進(jìn)入休眠,而AUTOSA網(wǎng)絡(luò)管理直接停止發(fā)送網(wǎng)絡(luò)管理的報(bào)文且一定時(shí)間內(nèi)檢測(cè)不到網(wǎng)絡(luò)上其他的網(wǎng)絡(luò)管理幀就可以準(zhǔn)備進(jìn)入休眠。
(c)網(wǎng)絡(luò)保持方式不同,OSEK網(wǎng)絡(luò)管理下控制器喚醒后想?yún)⑴c網(wǎng)絡(luò)的節(jié)點(diǎn)會(huì)先發(fā)Alive報(bào)文申請(qǐng)加入邏輯環(huán),邏輯環(huán)建成后,各節(jié)點(diǎn)按順序發(fā)Ring報(bào)文向后續(xù)節(jié)點(diǎn)傳遞“令牌”。而AUTOSAR網(wǎng)絡(luò)管理下,喚醒的控制器直接發(fā)送網(wǎng)絡(luò)管理報(bào)文就可以,所有的控制器想?yún)⑴c到通信中的只要各自發(fā)送網(wǎng)絡(luò)管理報(bào)文就可以。
(d)網(wǎng)絡(luò)管理幀PDU格式不一樣,OSEK由于喚醒過(guò)程要知道下一個(gè)喚醒的控制器,因此在PDU中包含了自己地址、令牌環(huán)中下一個(gè)控制器的目的地址、命令狀態(tài)、用戶數(shù)據(jù)等,而AUTOSAR網(wǎng)絡(luò)管理報(bào)文只包含自己的地址、少量控制信息及用戶選擇數(shù)據(jù),相比之下要簡(jiǎn)單不少。
轉(zhuǎn)自十一號(hào)組織