CanTp的连接
在AUTOSAR架构的最终版本中,CanTp将用于传输 诊断I-PDUs(例如OBD和UDS协议)和AUTOSAR COM I-PDUs。因此,CanTp模块能够同时处理多个连接(即并行处理多个分段会话)。
最大同时连接数需要被静态配置,这种配置对生成的代码的复杂性和资源消耗(CPU、ROM和RAM)有重要影响,因为必须为每次同时访问保留资源(例如Rx和Tx状态机、用于处理N-PCI数据的变量等)。
为了允许用户选择哪些I-PDUs可以同时接收(或发送),每个N-SDU标识符将通过配置的CanTp“连接通道”在内部路由。由于“连接通道”不能从外部访问,因此传输N-SDU所需的所有信息都将链接到N-SDU标识符(例如“连接通道”的编号、超时、寻址格式等)。
根据Meta Data配置,N-SDU可以作为由N_AI定义的特定连接,也可以作为通用连接,其中N_TA, N_SA和N_AE在运行时变化,而N_TAtype,MType和寻址格式则是静态定义的。
CanTp的交互
CanTp的上层接口为PduR模块提供全局访问,以发送和接收数据。这种访问是通过CAN N-SDU标识符(CAN NSduId)实现的。CAN NSduId是一个常量数据结构,其包含了描述CAN N-SDU的属性。每个CAN N-SDU特定的数据结构可以包含如下属性:N-SDU类型(Tx或Rx),其寻址格式,报文的L-SDU标识符或其他对实现有用的属性。
CanTp、PduR和CanIf模块之间的交互图如下。
CanTp的处理模式
AUTOSAR通信栈支持轮询和事件触发模式。因此,每个通信层都可以从其下层接收信息,并通过不同的机制向其上层传播信息。对于CAN传输层(CanTp),只支持事件触发模式。
CanTp的数据一致性
为了优化通信栈,AUTOSAR限制了CAN T传输层的缓冲能力。因此,CanTp将N-SDU有效载荷直接从上层(DCM、COM或PDU路由器——在1:1 TP路由的情况下)复制到CAN driver,反之亦然。因此,为了保证数据的一致性,上层将遵循以下规则:
- 在发送时,N-SDU数据有效载荷保持不变,从发送请求到收到发送确认。
- 在接收时,N-SDU数据访问将被锁定,从开始接收到接收指示。
CanTp的静态配置
在运行时,CanTp模块必须具有管理传输连接所需的所有信息。因此,需要静态配置以下属性:
- CAN N-SDU的数量
- 每个CAN N-SDU的唯一标识符
- 每个CAN N-SDU通信方向(Tx或Rx)
- 每个连接的寻址格式(常规、扩展、混合11位、常规固定或混合29位),另外根据寻址格式的不同:
- 常规: 无
- 扩展: N_TA
- 混合11位: N_AE
- 常规固定: N_TA, N_SA
- 混合29位: N_TA, N_SA, N_AE
对于使用带MetaData的N-SDU的通用连接,可以省略静态寻址信息。
- 每个连接的寻址格式(常规,扩展或混合)与N_TA值(在扩展寻址格式的情况下),或N_AE值(在混合寻址格式的情况下)。
- 每个CAN N-SDU标识符的关联CAN L-SDU标识符以及用于传输CAN FC N-PDU的CAN L-SDU标识符(在多帧分段会话情况下),
- 经典CAN帧和CAN FD帧
CanTp的配置可以在编译或post-build期间执行
CanTp使用的PduR服务
CanTp使用PduR的回调函数来复制发送数据、确认发送,开始接收,复制接收数据、指示报文接收。
- 报文接收指示:PduR_CanTpRxIndication
- 开始接收:PduR_CanTpStartOfReception
- 复制接收数据:PduR_CanTpCopyRxData
- 复制发送数据:PduR_CanTpCopyTxData
- 确认发送:PduR_CanTpTxConfirmation
CanTp使用的CanIf服务
CanTp使用CanIf的以下服务传输CAN N-PDUs:
- CanIf_Transmit