Autosar之Com模块
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;