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