Partial Networking(PN)功能相對(duì)來說,稍稍復(fù)雜一點(diǎn)。PN功能的實(shí)現(xiàn)也不能單單看某個(gè)模塊,因?yàn)槟K間的交互信息對(duì)網(wǎng)絡(luò)狀態(tài)的切換至關(guān)重要。對(duì)于PN功能,我主要想從CanNM和ComM兩個(gè)模塊談,本篇先從CanNM聊。希望能將一些概念講透,因?yàn)樵趯?shí)際項(xiàng)目中,工具的很多配置項(xiàng)我們可能一知半解,在問題排查時(shí),多少讓我們摸不著頭腦。因此,我想把自己解讀的Autosar信息傳達(dá)出來,分享一下。
提示:基于CAN總線。
1、為什么要PN功能
為什么需要PN(Partial Network)功能呢?實(shí)質(zhì)還是為了節(jié)能。沒有PN功能時(shí),一個(gè)網(wǎng)段內(nèi)的所有ECU同醒同睡。有時(shí),在一個(gè)網(wǎng)段內(nèi),可能只需要某些ECU正常工作即可,不相關(guān)的ECU沒必要喚醒(費(fèi)電)。所以,增加PN功能是節(jié)能的一個(gè)優(yōu)選項(xiàng)。
舉例:
不含PN功能的網(wǎng)段,所有ECU同睡同醒。某些工況下(A工況),其實(shí)只需要ECU2和ECU4保持工作狀態(tài)即可,因?yàn)闆]有PN功能,所以該網(wǎng)段內(nèi)的ECU1、ECU2、ECU3、ECU4、ECU5均保持喚醒,所以就費(fèi)電了,如下所示:
含有PN功能的網(wǎng)段,同樣A工況下,ECU2和ECU4保持正常工作狀態(tài),ECU1、ECU3、ECU5休眠,相對(duì)不含PN功能的網(wǎng)段,含PN功能的網(wǎng)段將更節(jié)能,如下所示:
2、NM PDUs的接收處理
在嵌入式中,任何信息的交互無(wú)非就是收和發(fā)。對(duì)于PN功能的實(shí)現(xiàn)也不例外,節(jié)點(diǎn)收到網(wǎng)絡(luò)管理報(bào)文是PN功能討論的基礎(chǔ)。對(duì)于CanNM模塊而言,它通過注冊(cè)在CanIf中的回調(diào)函數(shù)CanNm_RxIndication()獲取NM PDUs信息。拿到NM PDUs信息以后,CanNM模塊開始拆解信息,通過對(duì)信息的拆解決定是否將信息進(jìn)一步傳遞給其他模塊,比如:COM、ComM、NM等。
在Autosar中,PN功能的開啟需要多個(gè)模塊配置PN參數(shù)選項(xiàng),先說CanNM模塊。在CanNM模塊,首先需要配置CanNmPnEnabled參數(shù),即CanNmPnEnabled = TRUE。
(1)如果參數(shù)CanNmPnEnabled = FALSE,CanNM收到NM PDUs直接進(jìn)行后續(xù)動(dòng)作,即通知NM模塊等,此時(shí)PN功能忽略(無(wú)效)。只要收到有效范圍的網(wǎng)絡(luò)管理報(bào)文(一般會(huì)規(guī)定網(wǎng)絡(luò)管理報(bào)文是一個(gè)范圍,比如:0x500~0x57F),網(wǎng)絡(luò)即可喚醒;
(2)參數(shù)CanNmPnEnabled = TRUE,也不能說PN功能開始生效。此時(shí)需要進(jìn)一步判斷參數(shù)CanNmAllNmMessagesKeepAwake和PNI(Partial Network Information Bit)信息。PNI在NM PDUs中所處的位置如下所示:
提示:Control Bit Vector簡(jiǎn)稱CBV,和Source Node Identifier(SNI)一樣,一般需要在配置工具中配置,即配置CBV和SNI在PDU中的位置。
如果PNI = 0(即沒有PN請(qǐng)求),也就沒有PN功能的進(jìn)一步處理,此時(shí)如果CanNmAllNmMessagesKeepAwake = TRUE,那么接收的任何有效網(wǎng)絡(luò)管理報(bào)文進(jìn)一步處理,即可以喚醒該節(jié)點(diǎn)網(wǎng)絡(luò);如果CanNmAllNmMessagesKeepAwake = FALSE,則該NM PDUs也不用再進(jìn)一步處理了,CanNM模塊直接丟棄該P(yáng)DU,即該節(jié)點(diǎn)的網(wǎng)絡(luò)無(wú)法喚醒。
如果PNI = 1(即有PN請(qǐng)求),CanNM模塊需要過濾User Data中的PNC(Partial Network Cluster )信息,換句話說:PN請(qǐng)求信息包含在User Data中。一般由PNC個(gè)數(shù)決定使用多少User Data空間,比如:需要設(shè)置9個(gè)PNC,而每個(gè)PNC占用一個(gè)bit,即需要9個(gè)bit,則使用2個(gè)User Data(2 Byte)空間即可。過濾前面聊過,可以參考Autosar網(wǎng)絡(luò)管理:CanNM PN功能。如果過濾PNC信息,發(fā)現(xiàn)每個(gè)bit都與該ECU不相關(guān),且CanNmAllNmMessagesKeepAwake = FALSE,那么CanNM直接丟掉該NM PDU,如果CanNmAllNmMessagesKeepAwake=TRUE,那么當(dāng)前節(jié)點(diǎn)網(wǎng)絡(luò)仍然需要被喚醒。
PNC信息可占用位置如下所示(User Data部分),如果SNI不用,則User Data可以拓展到7 Byte,將CBV配置為第一個(gè)字節(jié),如下所示:
3、ERA/EIRA
開發(fā)PN功能的朋友,對(duì)ERA(External Request Array )/EIRA(External and Internal Request Array )想必并不陌生。但是能說清楚這兩個(gè)參數(shù)怎么用嗎?老實(shí)說,我理解得可能不是很到位,此段拋磚引玉。
對(duì)于ERA/EIRA,可以理解為PN請(qǐng)求的狀態(tài)集,而這個(gè)狀態(tài)集的信息分別存儲(chǔ)在各自的Buffer中,簡(jiǎn)單說:可以獨(dú)立配置。
ERA:可以理解為外部PN請(qǐng)求,比如:接收到其他ECU發(fā)送來的網(wǎng)絡(luò)管理報(bào)文,PNI置位,PNC有效。
EIRA:可以理解為外部PN請(qǐng)求和內(nèi)部PN請(qǐng)求,外部PN請(qǐng)求和ERA一樣,內(nèi)部PN請(qǐng)求可以理解為不同channel轉(zhuǎn)發(fā)過來的PN請(qǐng)求,比如:某個(gè)ECU包含兩個(gè)CAN節(jié)點(diǎn)(CAN1和CAN2),且都可以作為網(wǎng)關(guān)節(jié)點(diǎn)(實(shí)際還需要關(guān)注網(wǎng)關(guān)類型)。CAN1收到網(wǎng)絡(luò)管理報(bào)文,對(duì)應(yīng)的PNC關(guān)聯(lián)CAN2,CAN1可以內(nèi)部轉(zhuǎn)發(fā)給CAN2,喚醒CAN2網(wǎng)絡(luò),這就是內(nèi)部PN請(qǐng)求。
內(nèi)部請(qǐng)求實(shí)際是通過signal走COM傳遞給ComM,這里簡(jiǎn)單提一下,后面我們?cè)谟懻揅omM和PN的關(guān)系??梢园袳RA和EIRA看作信號(hào),通過COM層標(biāo)準(zhǔn)收發(fā)接口進(jìn)行信息交互。既然依賴COM,那么CanNM此時(shí)可以看作底層模塊,通過PduR_CanNmRxIndication()接口通知到PDUR,PDUR再路由給COM模塊,之后ComM通過COM層信號(hào)接口獲取PN請(qǐng)求的狀態(tài)信息。
PduR_CanNmRxIndication()屬于配置接口,Autosar中描述如下所示:
審核編輯:劉清
-
嵌入式
+關(guān)注
關(guān)注
5086文章
19141瀏覽量
305978 -
CAN總線
+關(guān)注
關(guān)注
145文章
1952瀏覽量
130847 -
ecu
+關(guān)注
關(guān)注
14文章
889瀏覽量
54549
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論