AUTOSAR通信篇—PduR模塊

AUTOSAR基礎軟件中的通訊,前文已經介紹過COM模塊:

AUTOSAR通信篇—AUTOSAR COM模塊

今天介紹COM的下層模塊:PduR—協議數據單元路由。

1 PduR的位置和作用

PDU Router(下文簡稱“PduR”)模塊位於AUTOSAR通訊架構的中間位置,其上層主要包括DLT、DCM、COM和IpduM,下層主要包括CANTp、CanIf、FrIf、LinTp、IpduM、CanNm、FrNm。由於IpduM具有兩個不同的角色,所以它分爲上下兩個模塊:

上層:COM模塊與I-PDU多路複用器(IpduM)模塊之間的通信;

下層:IpduM模塊與通信接口模塊(CanIf、FrIf)之間的通信。
在這裏插入圖片描述
圖1 PduR在BSW通訊模塊中的位置

PduR模塊同級的I-PDU多路複用器 (IpduM) 模塊,它提供對多路複用I-PDU的支持。當IpduM調用PduR模塊來傳輸複用的I-PDU時,或當PduR模塊調用它來接收或傳輸複用的I-PDU確認時,或者當它通過觸發器傳輸來提供數據時,IpduM都被認爲是一個上層模塊。IpduM調用PduR模塊,提出傳輸確認或接收指示上層(例如COM),或當它被稱爲PduR模塊更新I-PDU時,屬於多路複用I-PDU,則被視爲下層模塊。

2 PduR的內容

從ECU的角度來看,PduR模塊可以執行三種不同的功能類操作:
PDU接收到本地模塊:從底層模塊接收I-PDU並將其傳遞到一個或多個上層模塊;

從本地模塊傳輸PDU:根據上層模塊的請求,將I-PDU傳遞到一個或多個底層模塊;

PDU網關:

從接口模塊接收I-PDU,並立即通過相同或其他通信接口模塊傳輸I-PDU;
從傳輸協議模塊接收I-PDU,並通過相同或其他傳輸協議模塊傳輸I-PDU。
當然,PDU接收和PDU網關可以相結合。例如:COM模塊在接收I-PDU的同時,它被網關接到另一個較低層的模塊。
I-PDU的路由是基於靜態定義的I-PDU標識符執行的。在運行時不會動態地路由I-PDU,可能取決於它的有效負載。PduR模塊是基於接口模塊的通用方法,接口模塊在PduR模塊配置中配置。可以很容易地配置PduR來支持其他上層和下層模塊。當然,這種方法也允許將複雜驅動程序(ComplexDrivers,CDDs)集成爲PduR的上層或下層模塊,但一般項目爲了複雜驅動模塊的獨立,會單獨解耦處理。

PduR模塊的用戶列表不是固定的。最常見的上層和下層的組合如下:

AUTOSAR DCM和Tp模塊;

AUTOSAR COM和通信接口模塊、傳輸協議模塊或I-PDU多路複用器;

I-PDU多路複用器和通信接口模塊;

如圖2所示,PduR主要包含兩部分:
a) PduR路由路徑: 描述每個I-PDU的靜態路由路徑。路由路徑可以在ECU的編程狀態下更新後生成可加載,或者通過可選初始化PduR時選用。

b) PduR引擎: 根據PduR的路由路徑執行路由操作的實際代碼。路由器引擎需要處理:

   ·  將I-PDU從源方路由到目標方;
   ·  將源方的I-PDU ID傳遞給目標方 (例如PduR_transmission轉換爲canif_transmission,PduR_CanIfTxConfirmation轉換爲Com_TxConfirmation)。

在這裏插入圖片描述 圖2 PduR的組成
I-PDU由靜態I-PDU ID標識,因爲在編譯PduR模塊後必須標識I-PDU。PduR模塊使用靜態配置表中的I-PDU ID來確定I-PDU的目標。I-PDU用於PDUR上層模塊的數據交換,如COM模塊和DCM模塊。路由器模塊的路由操作並不修改I-PDU,它只是將I-PDU轉發給目標模塊。在TP路由時,I-PDU的傳遞可以在收到完整I-PDU之前開始,即“動態網關”。而對於網絡管理數據交換,可以繞過PduR模塊實現。

I-PDU ID配置時,需要同時配置實現的API。如此,可以在每個接收I-PDU ID的模塊中高效地實現查找表(例如,PduR模塊的配置包含PduR_CanIfTxConfirmation的I-PDU ID)。

PduR模塊可以實現:

從本地模塊到通信接口模塊I-PDU的單播(1:1)。
從本地模塊到通信接口模塊I-PDU組播(1:n)。
從本地模塊到傳輸協議模塊I-PDU的單播 (1:1) (單幀(SF)或多幀(FF和CFs))。
從本地模塊到傳輸協議模塊I-PDU的組播(1:n) (單幀(SF))。
從通信接口模塊到本地模塊I-PDU的單播(1:1)。
從通信接口模塊到本地模塊I-PDU的組播(1:n)。
從傳輸協議模塊到本地模塊I-PDU的單播(1:1) (單幀(SF))。
從傳輸協議模塊到本地模塊I-PDU的組播(1:n) (單幀(SF))。
從通信接口模塊到使用緩衝區通信接口模塊I-PDU的網關(1:1)。
從通信接口模塊到使用緩衝區通信接口模塊I-PDU的網關(1:n)。
從通信接口模塊到通信接口模塊I-PDU使用FIFO的網關(1:1)。
從通信接口模塊到通信接口模塊I-PDU使用FIFO的網關(1:n)。
從通信接口模塊到通信接口模塊I-PDU使用FIFO的網關(n:1)。
從傳輸協議模塊到傳輸協議模塊I-PDU使用FIFO的網關(1:1)。
從傳輸協議模塊到傳輸協議模塊I-PDU使用FIFO的網關(1:n)。
從傳輸協議模塊到傳輸協議模塊I-PDU使用FIFO的網關(n:1)。
PduR模塊不支持以下內容:

信號提取或轉換。

數據完整性檢查 (如校驗和)。

更改或修改I-PDU。

制定任何依賴於PDU負載的路由決策。

支持TP模塊和If模塊之間的路由。

支持I-PDU在If模塊之間的速率轉換。(此功能在COM模塊中實現)。

關注【汽車控制與人工智能】,後臺回覆“PduR”,獲取相關材料。

3 API函數

PduR模塊依賴所使用的通信硬件抽象層模塊、所使用的通信API和功能服務層模塊。PduR模塊需要的API函數主要包括:

下層Com IF模塊:

_Transmit (e.g.CanIf_Transmit, FrIf_Transmit, LinIf_Transmit)

_CancelTransmit (e.g.FrIf_CancelTransmit)

下層Tp模塊:

_Transmit (e.g.CanTp_Transmit, FrTp_Transmit, LinTp_Transmit)
_CancelTransmit(e.g. CanTp_CancelTransmit, FrTp_CancelTransmit)
_CancelReceive(e.g. CanTp_CancelReceive, FrTp_CancelReceive)
上層COM模塊:

_RxIndication (e.g.Com_RxIndication)
_TxConfirmation (e.g.Com_TxConfirmation)
_TriggerTransmit(e.g. Com_TriggerTransmit)
上層Dcm模塊:

_StartOfReception(e.g. Dcm_StartOfReception)

_CopyRxData (e.g.Dcm_CopyRxData)

_CopyTxData (e.g.Dcm_CopyTxData)

_TpRxIndication (e.g.Dcm_TpRxIndication)

_TpTxConfirmation(e.g. Dcm_TpTxConfirmation)

每個處理I-PDU併爲I-PDU提供API的BSW模塊必須包含I-PDU ID列表,這意味着每個被調用的模塊將有標識I-PDU的查詢表。

舉個例子:

COM模塊調用PduR_ComTransmit(PDUR模塊將列出I-PDU ID), PDUR模塊將調用CanIf_Transmit(CanIf模塊配置將列出I-PDUID),CanIf將調用PduR_CanIfTxConfirmation(PDUR模塊配置將列出I-PDU ID)和PDUR模塊將調用Com_TxConfirmation(COM模塊配置將列出I-PDU ID)。如下圖3所示(僅I-PDU ID爲參數):
在這裏插入圖片描述
圖3 攜帶I-PDU ID的傳遞

4 I-PDU的收發

I-PDU接收是指從底層通信接口模塊或傳輸協議模塊接收並傳遞到COM模塊。

PduR不是通信接口模塊和I-PDU的唯一客戶。其他模塊如NM和TP模塊直接從通信接口模塊接收PDU。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
圖4 PduR的發送序列圖

PduR模塊通過源模塊I-PDU ID(位於PDUR配置中)和目標模塊I-PDU ID(位於被調用的目標模塊配置中)的組合唯一地標識路由路徑。PDUR模塊應將I-PDU ID轉換爲傳輸路徑和確認路徑的目標模塊。

比如,COM模塊將I-PDU傳輸給CanIf和LinIf。調用PduR_comtransmission。PduR模塊將源I-PDU ID(PDUR模塊配置)轉換爲I-PDU ID (LinIf模塊配置)和I-PDU ID(CanIf模塊配置)。從COM模塊接收到的PduInfoType值被複制到CanIf和LinIf模塊,而不做任何更改。

LIN通訊類似,Linif將使用I-PDU ID調用PduR_liniftxconfirm,根據傳輸成功與否,調用結果是E_OK(成功傳輸)或E_NOT_OK(傳輸失敗)。然後,PduR模塊將轉換I-PDU ID,並使用com_txconfirm將調用轉發到COM,使用轉換後的I-PDU ID和接收到的結果。

PduR模塊只能根據配置中給出的路由路徑對I -PDU進行路由。當具有不同元數據類型的I-PDU通過路由路徑連接時,PduR生成器將會拒絕配置。PduR模塊的接收操作,總是通過底層模塊(通信接口模塊或傳輸協議模塊)的指示來完成。指示函數由底層輪詢通信驅動的循環函數執行,或在中斷情況下執行。

源通信接口模塊通過調用PduR_RxIndication來指示接收到的I-PDU。I-PDU可以有多個目標本地模塊,通過路由路徑來配置。

對於傳輸協議模塊,當接收第一幀(FF)或單幀(SF)時,首先通知PduR模塊並開始接收通知。通過調用_StartOfReception將此調用轉發到相關的上層模塊。每個段的有效載荷(N-PDU)將由_CopyRxData調用在目標上層模塊中複製。在接收到最後一個N-PDU之後,傳輸協議模塊將指示PDU路由器模塊已經接收到完整的I-PDU,而PDU路由器模塊將通過調用_TpRxIndication將這個指示轉發給相關的上層模塊。

通過傳輸協議模塊接收I-PDU可以只配置一個由路由路徑配置的上層模塊。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
圖5 PduR的接收序列圖

PduR模塊爲從源傳輸協議模塊接收並路由到目標上層模塊的I-PDU提供1:1的路由。比如,從CanTp模塊接收功能性尋址請求(在SF中)並將其路由到DCM模塊。

目標底層模塊的傳輸操作異步實現的,這意味着傳輸服務請求返回在I-PDU被PduR模塊傳遞到目標下層模塊之後。如果目標底層通知PduR模塊通過PduR_TxConfirmation(通信接口)或PduR_TxConfirmation(傳輸協議)在I-PDU傳輸成功或失敗,PDUR模塊將通過_TxConfirmation(通信接口)或該指示轉發給上層模塊_TpTxConfirmation (傳輸協議)。

PduR模塊的傳輸操作由上層源模塊的PDU傳輸請求觸發,並將請求轉發到目標下層模塊。

5 I-PDU網關
PduR模塊支持I-PDU從源總線到一個或多個目標總線的網關交換。本地模塊的傳輸和接收的區別在於,PDUR模塊必須同時是接收器和發送器,在某些情況下還爲I-PDU提供緩衝。

爲了在不需要網關的情況下有效地實現PduR模塊,網關需求被有意地分開。如果PDUR模塊允許I-PDU的網關交換,則這些要求被視爲附加要求,而不是取代以前的要求。
在這裏插入圖片描述
圖6 PduR的廣播(multicast)形式
在這裏插入圖片描述
圖7 PduR的網關(gateway)形式

以下概述了I-PDU網關的功能:
PDUs可以從源通信接口模塊網關到一個(1:1)或多個目標通信接口模塊I-PDU網關(1:n)。
對於每個目的地,PDU路由器模塊可以在可配置的深度內緩衝I-PDU的每個目的地(例如,如果多於一個I-PDU,則FIFO)。
一個I-PDU可以被一個上層模塊在與n個目標通信接口同時接收。
使用TP傳輸的I-PDU可以被網關到一個或多個目標TP模塊,範圍如下:
單幀和多幀都可以被網關到多個目標TP模塊或本地模塊(如DCM)。
在多個N-PDUs中傳輸的I-PDU可以被“動態地”傳送到一個目的地,這意味着在目標TP模塊上開始傳輸之前,不需要接收完整的I-PDU。
在多個N-PDUs中傳輸的I-PDU可以通過網關傳送到另一個TP模塊,也可以由一個本地模塊接收,但不能同時接收兩個模塊。
使用TP模塊傳輸的I-PDU可以採用FIFO緩衝。這適用於SF和多幀I-PDU。
I-PDU只能在通信接口模塊或TP模塊之間進行網關,不能混合使用。例如,I-PDU不能從CanIf和網關到LinTp接收。
如果不支持I-PDU在不同週期或速率的通信接口模塊之間路由,則可以通過使用信號網關的COM模塊來完成。在這種情況下,I-PDU必須被路由到COM模塊。

舉例說明一下。

基於信號的通信路徑如圖8所示,發送路徑由Com模塊啓動,經過PduR進行路由,派發到對應總線的接口模塊,最後由對應的總線驅動模塊把信號發送到總線上;接收路徑反之。
在這裏插入圖片描述
圖8 COM模塊經路由的通信路徑
Dcm的診斷信息通信路徑如圖9所示。發送路徑由Dcm模塊啓動,經過PduR進行路由,派發到對應總線的TP模塊,經過Tp的拆包功能經對應總線的接口層發送到驅動模塊,最後由對應的總線驅動模塊把信號發送到總線上;接收路徑反之。
在這裏插入圖片描述
圖9 DCM模塊經路由的通信路徑
PDU的網關路徑如圖10所示。第一種網關路徑是不同總線的接口層之間的,先由驅動接收到幀,經接口層提交給PduR模塊,然後PduR模塊根據之前配置的網關路徑轉發給另一種總線的接口層,接口層提交給目標總線的驅動層,最後由驅動層把PDU發佈到總線上。另外一種網關路徑是不同總線的TP層之間的,和第一種相比是在路徑中增加了TP節點,同時也多了拆包組包的消耗。
在這裏插入圖片描述
圖10 不同總線的網關路徑

PDU廣播路徑如圖11所示。廣播路徑由Com模塊啓動,根據PduR對這個PDU的配置,使用多條路徑進行路由,之後派發到對應總線的接口模塊,最後由對應的總線驅動模塊把信號發送到總線上,從而達到廣播效果。
在這裏插入圖片描述
圖11 COM觸發的廣播路徑

6 PDU ID的映射機制

在每一層,PDU都有一個全局的識別號(簡稱全局ID)和一個本地的識別號(簡稱本地ID)。其中全局ID由ECU配置(簡稱EcuC)全局分配,一條通信路徑上的PDU 的全局ID相同。爲了方便本層管理PDU,會使用本地ID連續的機制,爲每個PDU分配一個本地ID。

通信協議棧中上層在使用下層服務時,先根據PDU在自己層的本地ID,查找到這個PDU的全局ID,然後根據這個全局ID,查找這個PDU在下層對應的本地ID,最後根據得到的本地ID使用下層服務。

通信協議棧的下層在使用上層服務時,先根據PDU在自己層的本地ID,查找到這個PDU的全局ID,然後根據這個全局ID,查找這個PDU在上層對應的本地ID,最後根據得到的本地ID回調上層。

總結:

PduR模塊主要提供兩方面的服務:
一是承上啓下銜接上層和下層:發送時派發從高層模塊的PDU到低層模塊;接收時派發從底層模塊如If或者TP接收的PDU給高層模塊(COM,PduR)。
二是通信網絡中的網關功能。其中網關功能有兩種:從一個接口層到另外一個相同或者不同總線類型的接口層;從一個TP到另外一個相同或者不同總線類型的TP層。其中路由協議是基於一個靜態的路由表和PDU ID的概念。

縮略詞:
CAN Communication Matrix:CAN通信矩陣,用來描述完整的CAN網絡,包括:涉及的CAN節點;CAN PDU的定義(ID和數據長度DLC);PDU的發送和接收信息。
Physical Channel:物理通道。代表CAN網絡的接口,不同CAN硬件單元的不同物理通道可以訪問不同的網絡。
DCM: Diagnostic Communication Manager,診斷通信管理
COM IF:communicationinterface modules,通訊接口模塊
COM Tp:Communication Transport,通訊傳輸
IpduM:I-PDU Multiplexer,I-PDU多路複用
DLC:Data LengthCode,描述SDU長度的CAN信息。
I-PDU: Interaction Layer Protocol Data Units,交互層協議數據單元。
L-PDU:Data LinkLayer Protocol Data Unit,數據鏈接層的協議數據單元,包含標識符(ID), 數據長度(DLC)和數據(L-PDU)
L-SDU:Data LinkLayer Service Data Unit數據鏈接層服務數據單元,它其中的數據傳輸到L-PDU中。
gatewaying-on-the-fly: 網關功能。在兩個TP模塊之間的路由,在所有數據被接收之前,數據的轉發就開始了(當達到指定的閾值時)。如果在兩個接口之間傳輸數據量較大,最好能夠在從源網絡接收所有數據之前在目標網絡上開始傳輸,可以節省內存和時間。
multicast operation:組播模式。同時傳遞PDU給衆多接收組羣。(1:n)
data provision:數據條款。包含兩種數據條款接口模式:直接數據條款和觸發型數據條款。
last-is-best buffering:first in first out緩衝策略,用最新值覆蓋最後一個值。
FIFO buffering:緩衝概念,使用先進先出策略。
SF:Single Frame,單幀
FF:First Frame,首幀
CF:ConsecutiveFrame,連續幀
N-PDU:CAN傳輸層的網絡協議數據單元。
N-SDU:CAN傳輸層的服務數據單元。其中的數據傳輸到N-PDU中。
PDU Router:協議數據單元路由。將I-PDU從一個模塊傳遞到另外一個模塊,PDU Router可以用於網關運行或內部路由。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章