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