AutoSAR CANTP总结

本文主要介绍了AutoSAR中的CANTP组件,包括其在CAN传输协议中的职责,如组装、分段数据收发,流控及错误检测。详细阐述了CANTP的配置和服务,如CANTP配置、PDUR服务和CANIf服务。同时,解释了CANTP向上层和下层提供的接口,以及内部行为,如N_SDU发送、Buffer策略等,并通过常见用例的序列图进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AutoSAR CANTP

Overview

在这里插入图片描述

CANTP用来组装分段CAN I-PDUs
COM和DCM模块通信协议是不一样的,由PDUR根据I-PDU ID来决定用哪个协议,PDUR也会决定传输协议是否使用。PDUR相当于一个网关,比例1:1
CANTP根据N-PDU ID来只处理SF FF CF FC,
CANIf要确定是将I-PDU转发到CANTP或者PDUR

CAN TP职责:

  1. 组装、分段数据来收发,取消收发
  2. 流控
  3. 检测分割会话时的错误

配置与服务

CANTP配置

  1. SDU个数/ID
  2. 通信方向/类型(全/半双工)/寻址方式
  3. 标准帧,扩展帧

PDUR服务

 PduR_CanTpRxIndication
 PduR_CanTpStartOfReception
 PduR_CanTpCopyRxData
 PduR_CanTpCopyTxData
 PduR_CanTpTxConfirmation

CANIf服务

 CanIf_Transmit

功能

给上层的接口

init & shutdown

在这里插入图片描述

communication service

CanTp_Transmit() 允许上层异步传数据,传完会通知上层N_SDU的传输结果

CanTp_CancelTransmit()
取消意味着丢弃
UseCase: 由于接到另外一个优先级更高的诊断协议而取消传输
使能feature由CanTpTc决定
如果调用cancellation,之后要调用 PduR_CanTpTxConfirmation返回E_NOT_OK

给下层的接口(CanIf)

CanTp_TxConfirmation()

CanIf调用通知CANTP传输结果
在超时N_As后,CANTP还没收到confirm,或者CanTp_TxConfirmation返回E_NOT_OK,都要丢弃对应的会话

CanTp_RxIndication()

CanIf调用通知CANTP收到新帧

内部行为

上下传输的时候,CANTP采用事件触发

N_SDU 接收

当收到了SF or FF,

  1. CanTp_RxIndication 用来存寻址方式用于初始化与上层的连接
  2. PduR_CanTpStartOfReception来通知上层PDUR,上层会锁住留下buffer用于接收,CANTp会给TpSduInfoPtr,内容存在这里面

当收到CF时,
3. CanTp_RxIndication 要检查寻址信息和FF中存的值比较

当收到FF或者最后一个CF时,
4. CANTp要在调用PduR_CanTpStartOfReception or PduR_CanTpCopyRxData前开始N_Br计时
 

接收一帧N_SDU 49Bytes,上层报告了一个25Bytes的有效buffer 举例:
在这里插入图片描述

N_SDU 发送

高层要发送,调用CanTp_Transmit告诉低层NSDUId和要被发送的N-SDU Tx总长度

发送一帧50Bytes举例

在这里插入图片描述

Buffer策略

CanTp是没有缓存能力的,N_SDU不会在内部copy,N_PDU也不会在内部组装,CANTp直接进入PduR, DCM, or COM用 PduR_CanTpCopyTxData() or PduR_CanTpCopyRxData()来操作,所以为了保持数据的一致性,上层需要锁住内存区域
在这里插入图片描述

当发送buffer锁住时,就不能再写入;当接收buffer锁住时,不能读写。

常见用例的序列图

收到单帧但提供的buffer不足

 在这里插入图片描述

PduR_CanTpStartOfReception 其实就是通知上层,PDU总长度,申请提供足够有效的buffer。

成功接收SF N_PDU

在这里插入图片描述

  1. 告诉高层N_PDU总长度,申请buffer
  2. copy data到buffer里面
  3. copy完成,indication上层ok

请求SF N_SDU

在这里插入图片描述

<think>好的,我现在需要处理用户关于AUTOSAR CP CanTP模块中SWS_CanTp_00081需求的解释请求。首先,我需要确认用户提到的需求的具体内容,但用户可能没有直接提供SWS_CanTp_00081的详细描述。根据提供的引用资料,特别是引用[2]中提到了SWS_CanTp_00078,这涉及到CanTp_RxIndication函数。可能SWS_CanTp_00081是相关的另一个需求,但需要进一步推断。 接下来,我需要查阅相关的AUTOSAR规范文档,但用户提供的引用中并没有直接提到SWS_CanTp_00081。不过,引用[3]提到CanTp规范基于ISO 15765-2,这可能与分段传输相关。CanTP模块负责处理CAN传输协议,包括数据的分段和重组,因此SWS_CanTp_00081可能与传输确认或数据接收有关。 考虑到引用[2]讨论的是接收显示函数CanTp_RxIndication,SWS_CanTp_00081可能涉及传输确认函数,比如CanTp_TxConfirmation,这在引用[1]的API列表中有提到。TxConfirmation通常用于通知上层传输完成或失败,这可能对应需求中的流控处理或传输状态管理。 此外,引用[1]的API规范中提到了CanTp_Transmit函数,用于发送数据,而CanTp_TxConfirmation是回调函数,用于确认传输完成。因此,SWS_CanTp_00081可能规定了在数据传输完成后必须调用TxConfirmation,以确保通信的可靠性和状态更新。 需要确认需求编号与功能之间的对应关系,可能需要假设SWS_CanTp_00081涉及传输确认机制。同时,结合ISO 15765-2的分帧和流控,该需求可能要求正确处理多帧传输的确认,确保数据完整性和顺序。 总结起来,用户的问题可能围绕CanTP模块在数据传输完成后的确认机制,以及如何通过API函数实现这一需求。需要根据提供的引用和AUTOSAR标准,解释该需求的目的、实现方式和相关API函数的作用。</think>### AUTOSAR CP CanTp模块SWS_CanTp_00081需求解释 根据AUTOSAR规范,**SWS_CanTp_00081**需求与CanTp模块的**流控(Flow Control)机制**相关,具体涉及**多帧数据传输的接收端行为**。以下是详细解释: --- #### **需求背景** CanTp模块遵循ISO 15765-2标准,负责CAN总线上长数据的分段传输与重组[^3]。在**多帧传输场景**中,接收端需通过流控帧(Flow Control Frame)控制发送端的数据速率和块大小,以避免缓冲区溢出。 --- #### **SWS_CanTp_00081核心内容** 需求描述通常包括以下要点(需结合规范原文): 1. **流控帧处理** 接收端在收到首帧(First Frame, FF)或连续帧(Consecutive Frame, CF)后,应通过流控帧向发送端反馈以下信息: - **Block Size**:允许连续发送的帧数量。 - **Separation Time**:发送帧之间的最小时间间隔。 - **流控状态**(如继续发送、等待或溢出)。 2. **触发条件** 当接收端缓冲区可用空间足够时,需主动发送流控帧以允许发送端继续传输;若缓冲区不足,则发送流控帧要求暂停传输[^2]。 3. **动态参数调整** 支持通过`CanTp_ChangeParameter`接口动态修改流控参数(如块大小),以适应不同网络负载[^1]。 --- #### **实现方式** 1. **API函数关联** - 接收端通过`CanTp_RxIndication`接收CAN帧,触发流控逻辑[^2]。 - 发送流控帧时,可能调用`CanTp_Transmit`接口[^1]。 - 传输状态通过回调函数`CanTp_TxConfirmation`通知上层[^1]。 2. **代码逻辑示例** ```c void CanTp_RxIndication(PduIdType RxPduId, const PduInfoType* PduInfo) { if (is_flow_control_needed(RxPduId)) { FlowControlParams params = calculate_flow_control(); PduInfoType flow_control_pdu = build_flow_control_frame(params); CanTp_Transmit(FLOW_CONTROL_PDU_ID, &flow_control_pdu); // 发送流控帧 } } ``` --- #### **相关引用** - **流控机制**:基于ISO 15765-2的分段传输规则,确保数据可靠性和实时性[^3]。 - **API设计**:`CanTp_Transmit`和`CanTp_RxIndication`是实现流控的关键接口。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值