Partial Networking(PN)功能相對來說,稍稍復雜一點。PN功能的實現也不能單單看某個模塊,因為模塊間的交互信息對網絡狀態的切換至關重要。對于PN功能,我主要想從CanNM和ComM兩個模塊談,本篇先從CanNM聊。希望能將一些概念講透,因為在實際項目中,工具的很多配置項我們可能一知半解,在問題排查時,多少讓我們摸不著頭腦。因此,我想把自己解讀的Autosar信息傳達出來,分享一下。
提示:基于CAN總線。
1、為什么要PN功能
為什么需要PN(Partial Network)功能呢?實質還是為了節能。沒有PN功能時,一個網段內的所有ECU同醒同睡。有時,在一個網段內,可能只需要某些ECU正常工作即可,不相關的ECU沒必要喚醒(費電)。所以,增加PN功能是節能的一個優選項。
舉例:
不含PN功能的網段,所有ECU同睡同醒。某些工況下(A工況),其實只需要ECU2和ECU4保持工作狀態即可,因為沒有PN功能,所以該網段內的ECU1、ECU2、ECU3、ECU4、ECU5均保持喚醒,所以就費電了,如下所示:
含有PN功能的網段,同樣A工況下,ECU2和ECU4保持正常工作狀態,ECU1、ECU3、ECU5休眠,相對不含PN功能的網段,含PN功能的網段將更節能,如下所示:
2、NM PDUs的接收處理
在嵌入式中,任何信息的交互無非就是收和發。對于PN功能的實現也不例外,節點收到網絡管理報文是PN功能討論的基礎。對于CanNM模塊而言,它通過注冊在CanIf中的回調函數CanNm_RxIndication()獲取NM PDUs信息。拿到NM PDUs信息以后,CanNM模塊開始拆解信息,通過對信息的拆解決定是否將信息進一步傳遞給其他模塊,比如:COM、ComM、NM等。
在Autosar中,PN功能的開啟需要多個模塊配置PN參數選項,先說CanNM模塊。在CanNM模塊,首先需要配置CanNmPnEnabled參數,即CanNmPnEnabled = TRUE。
(1)如果參數CanNmPnEnabled = FALSE,CanNM收到NM PDUs直接進行后續動作,即通知NM模塊等,此時PN功能忽略(無效)。只要收到有效范圍的網絡管理報文(一般會規定網絡管理報文是一個范圍,比如:0x500~0x57F),網絡即可喚醒;
(2)參數CanNmPnEnabled = TRUE,也不能說PN功能開始生效。此時需要進一步判斷參數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,那么接收的任何有效網絡管理報文進一步處理,即可以喚醒該節點網絡;如果CanNmAllNmMessagesKeepAwake = FALSE,則該NM PDUs也不用再進一步處理了,CanNM模塊直接丟棄該PDU,即該節點的網絡無法喚醒。
如果PNI = 1(即有PN請求),CanNM模塊需要過濾User Data中的PNC(Partial Network Cluster )信息,換句話說:PN請求信息包含在User Data中。一般由PNC個數決定使用多少User Data空間,比如:需要設置9個PNC,而每個PNC占用一個bit,即需要9個bit,則使用2個User Data(2 Byte)空間即可。過濾前面聊過,可以參考Autosar網絡管理:CanNM PN功能。如果過濾PNC信息,發現每個bit都與該ECU不相關,且CanNmAllNmMessagesKeepAwake = FALSE,那么CanNM直接丟掉該NM PDU,如果CanNmAllNmMessagesKeepAwake=TRUE,那么當前節點網絡仍然需要被喚醒。
PNC信息可占用位置如下所示(User Data部分),如果SNI不用,則User Data可以拓展到7 Byte,將CBV配置為第一個字節,如下所示:
3、ERA/EIRA
開發PN功能的朋友,對ERA(External Request Array )/EIRA(External and Internal Request Array )想必并不陌生。但是能說清楚這兩個參數怎么用嗎?老實說,我理解得可能不是很到位,此段拋磚引玉。
對于ERA/EIRA,可以理解為PN請求的狀態集,而這個狀態集的信息分別存儲在各自的Buffer中,簡單說:可以獨立配置。
ERA:可以理解為外部PN請求,比如:接收到其他ECU發送來的網絡管理報文,PNI置位,PNC有效。
EIRA:可以理解為外部PN請求和內部PN請求,外部PN請求和ERA一樣,內部PN請求可以理解為不同channel轉發過來的PN請求,比如:某個ECU包含兩個CAN節點(CAN1和CAN2),且都可以作為網關節點(實際還需要關注網關類型)。CAN1收到網絡管理報文,對應的PNC關聯CAN2,CAN1可以內部轉發給CAN2,喚醒CAN2網絡,這就是內部PN請求。
內部請求實際是通過signal走COM傳遞給ComM,這里簡單提一下,后面我們在討論ComM和PN的關系。可以把ERA和EIRA看作信號,通過COM層標準收發接口進行信息交互。既然依賴COM,那么CanNM此時可以看作底層模塊,通過PduR_CanNmRxIndication()接口通知到PDUR,PDUR再路由給COM模塊,之后ComM通過COM層信號接口獲取PN請求的狀態信息。
PduR_CanNmRxIndication()屬于配置接口,Autosar中描述如下所示:
審核編輯:劉清
-
嵌入式
+關注
關注
5096文章
19194瀏覽量
308109 -
CAN總線
+關注
關注
145文章
1956瀏覽量
131157 -
ecu
+關注
關注
14文章
893瀏覽量
54804
發布評論請先 登錄
相關推薦
PN碼的問題
MySQL8.0 新特性:Partial Update of LOB Column
如何使用Partial Frame Buffer?
生成AD9653 PN碼的算法,如何計算輸出的pn碼?
The Complete Network Troublesh
什么是Ad hoc network
什么是AN (Access Network)
PN/PN Coupler通訊使用入門
![<b class='flag-5'>PN</b>/<b class='flag-5'>PN</b> Coupler通訊使用入門](https://file.elecfans.com/web1/M00/DB/D7/pIYBAGAIBgmAGOLsAAG4cuNjBgk256.png)
評論