Com模塊主要實現了Signal在I-PDU中的封裝及解析功能,為RTE層提供了基于Signal的發送與接收接口,實現了基于Signal的網關功能,實現了PDU的不同發送模式,以及Signal濾波,Update bit,Pdu Counter等功能
圖 Com模塊層次圖
Com模塊處于AUTOSAR架構中的通信服務層,其下層模塊為PduR模塊,上層模塊為RTE。
I-PDU Group功能
I-PDU Group功能介紹
Com模塊實現基于I-PDU Group的使能控制,接收超時檢測使能控制。根據I-PDU與I-PDU Group的包含關系,間接實現對各個I-PDU的通信使能控制及Rx I-PDU的接收超時檢測使能控制。
I-PDU Group使能控制功能實現
通過ComIPdu配置參數ComIPduGroupRef,以及ComIPduGroup的配置實現將ComIPdu進行不同的分組。對于不從屬于任何ComIPduGroup的ComIPdu其通信使能狀態初始化之后一直為Enable且不可動態更改,Rx ComIPdu接收超時使能狀態初始化之后一直為Disable且不可動態更改。
IpduGroupVector中的每個bit位代表一個ComIPduGroup,通過調用Com_IpduGroupControl和Com_ReceptionDMControl實現ComIPduGroup通信使能控制和接收超時使能控制,間接實現每個ComIPdu的控制。
Com提供兩個接口Com_ClearIpduGroupVector和Com_SetIpduGroup實現對每個ComIPduGroup所在IpduGroupVector中對應bit位置0或置1(0表示Disable,1表示Enable)。
Signal封裝解析功能
Signal封裝解析功能介紹
信號的封裝和解析是Com模塊的核心功能,根據各個信號的配置信息將發送Signal封裝到關聯的Tx IPdu數據中,從Rx IPdu數據中解析接收Signal。
Com模塊為RTE/應用層提供了完整的基于Signal/SignalGroup的收發接口。
Signal封裝解析功能實現
信號的封裝和解析涉及的信號配置參數為ComBitPosition,ComBitSize,ComSignalEndianness,ComSignalType,ComSignalLength。Com模塊根據這些配置信息,將發送信號值封裝到對應IPdu報文數據中,從接收IPdu報文數據中解析出接收信號值。
上層通過調用Com_SendSignal來請求非動態長度類型Signal/GroupSignal的發送,調用Com_SendDynSignal來請求動態長度類型(UINT8_DYN)Signal/GroupSignal的發送,調用Com_SendSignalGroup來請求SignalGroup的發送,調用Com_InvalidateSignal來請求Signal發送無效值,調用Com_InvalidateSignalGroup來請求SignalGroup發送無效值,調用Com_SendSignalGroupArray請求上層字節對齊的SignalGroup(已完成各GroupSignal的封裝)發送。
上層通過調用Com_ReceiveSignal獲取非動態長度類型接收Signal/GroupSignal信號值,調用Com_ReceiveDynSignal獲取動態長度類型接收Signal/GroupSignal信號值,調用Com_ReceiveSignalGroup請求SignalGroup的接收,調用Com_ReceiveSignalGroupArray獲取字節對齊SignalGroup的數據值。
IPdu收發功能
IPdu收發功能介紹
Com模塊實現IPdu的收發方式按數據流分兩種類型,即IF方式和TP方式,IF方式通常用于“數據長度較小”的IPdu,而TP方式通常用于“數據長度較大”的IPdu,這里的“數據長度”是相對于傳輸總線來定義的,如CAN總線為8字節,CANFD為64字節,ETH可以達到1000+字節。其中IF IPdu的發送又分為Direct和TriggerTransmit兩種類型,前者發送時機由Com決定,后者發送時機由下層模塊決定。
Tx IPdu從發送時機角度又分為四種模式,即PERIODIC,DIRECT,MIXED,NONE。NONE模式通常與TriggerTransmit,或者調用Com_TriggerIPDUSend/ Com_TriggerIPDUSendWithMetaData來配置實現IPdu的發送。
IPdu收發功能實現
通過ComIPdu的配置參數ComIPduType決定該IPdu通過IF/TP方式進行收發:
1.IF發送:PduR_ComTransmit→ Com_TxConfirmation;
2.IF接收:Com_RxIndication;
3.TP發送:PduR_ComTransmit→N次Com_CopyTxData→ Com_TpTxConfirmation;