前言:PDU Router(路由器)在本文將簡稱為PduR,考慮到個人對PduR模塊認識深度有限,且接觸的CAN通訊功能運用PduR模塊功能也較簡單,所以本文僅對PduR模塊做簡單介紹。
基本概念
首先了解下路由的概念,路由是指路由器從一個接口上收到數據包,根據數據包的目的地址進行定向并轉發到另一個接口的過程(引自百度百科)。
接著了解下PduR更多的作用,引自[1]:PduR模塊提供路由I-PDU(Interaction Layer Protocol Data Units)服務,使用在通訊接口模塊(比如CanIf,CanNM,FrIf)和傳輸協議模塊(比如CanTp,COM和DCM),如下圖1所示。常用的PDU路由使用模塊有:與UDS服務相關的AUTOSAR 診斷通訊管理模塊(Diagnostic Communication Manager,DCM)和傳輸協議模塊,與CAN通訊相關的AUTOSAR COM,通訊協議模塊等。

圖1 AUTOSAR架構下的PduR模塊,引自[1]
-
PduR路由表:靜態路由表描述每個被路由的I-PDU的路由屬性;I-PDU路由的執行是基于靜態定義的I-PDU ID。
-
PduR引擎:根據PduR路由表執行路由動作的實際代碼,該引擎不得不路由I-PDU從源頭到目的地,以及根據I-PDU ID的源頭翻譯其目的地。

通過以上知識對應到CAN通訊,就是PduR模塊從CAN接口模塊/COM模塊接收到了PDU,然后根據PDU ID查找已定義好的靜態路由表,獲得其目標地址,定向并轉發到COM模塊/CAN接口模塊,即路由PDU,故稱為PDU Router。
發送與接收操作
從CAN通訊的發送與接收來看,再來理解下PduR模塊的作用,即:
-
發送時,PduR模塊將來自COM模塊的發送請求路由到Can接口模塊,將來自Can接口模塊的確認路由到COM模塊,如下圖3。
-
接收時,PduR模塊將來自Can接口模塊的通知路由到COM模塊,如下圖4。


下面借助文檔了解下上述函數的定義,發送請求函數如下圖5所示:

注意User:Up與當前的功能有關,CAN通訊的話,User:Up為Com,即發送時,COM模塊調用PduR_ComTransmit函數。當然作為PduR模塊的函數,會根據不同功能路由到其他模塊,自然需要采用這種定義方式。同樣地發送確認函數和接收通知函數也一樣。

發送確認函數的定義如下圖6,其中User:Lo的定義如下表,發送時,Can接口模塊調用PduR_CanIfTxConformation函數向上確認。

接收通知函數的定義如下圖7,其中User:Lo的定義如上表,即Can接口模塊調用PduR_CanIfRxIndication函數。在此就發現圖4用PduR_RxIndication函數就不夠準確咯。

路由表
目前覺得PduR模塊最關鍵還是路由表的定義,一是路由路徑的確定,二是由源頭ID到目的地ID的確定。特此再引用兩例說明,如下圖8、9。


以上就是簡單介紹了PduR模塊在CAN通訊的發送與接收所起的作用,當向上進入COM層后,簡單地說就是:接收時,將PDU解包成一個一個的信號,供ASW使用;發送時,將一個一個的信號打包成PDU,向下發送。那么具體怎么實現?請看下篇文章。
Reference:
[1] Specification of PDU Router.
[2] 基于AUTOSAR標準的汽車通訊及網絡管理技術的設計及實現[M],楊永亮,山東大學