Autosar CanTp:什么是Connection?

1、什么是Connection

Autosar规范中,对Connection的具体解释如下:A transport protocol session,either is a transmission or a reception session on a N-SDU.

解释:Connection是一个N-SDU的发送或者接收协议会话。理解没?答:我没太理解。但是有一个词很重要,即:“or”,就是说,这个会话要么处于接收状态,要么处于发送状态。这与诊断的"乒乓"交互规则相对应。

(一)Channel

理解"Connection",先从CanTp的"Channel"说起。CanTp是软件抽象模块,也是ISO 15765-2规范的具体实现。CanTp处于中间模块,向上传递接收到的数据,向下发送上层的请求(诊断响应),而这个向上或者向下的Path需要Channel搭建。在CanTp层,"Channel"可以创建多个,当需要传输SF(Single Frame)、FF(First Frame)、CF(Consecutive Frame)、FC(Flow Control)时,需要找到可用的Channel,进而connect上/下软件模块。CanTp Channel如下所示:
在这里插入图片描述

2、Connection的创建和释放时机

Connection的创建和释放与Buffer相关,而CanTp是没有缓存数据能力的,只能将接收到的数据或者上层请求发送的数据传送给对应的上层或者底层。Autosar中,对CanTp处理N-PDU的描述如下所示:

既然CanTp不能缓存数据,意味着:CanTp接收到数据以后,要将接收到的数据Copy到目标上层(e.g. PduR, DCM, or COM),或者将上层要发送的数据直接缓存到底层(驱动层,eg:CAN RAM)。

(一)Connection时机

在这里插入图片描述

发送端(Transmitter)的Connection与释放:
(1)如上图,对于发送端(Transmitter),也可以说上位机,请求发送一个N-SDU(SF)时,调用CanTp的发送接口CanTp_Transmit(),请求发送。
注意:此时返回E_OK只是表示发送请求成功,可以参考前文Autosar通信栈:发送返回OK和发送确认是一回事吗。也意味着当前的N-SDU找到了一个可用的CanTp Channel,且成功的Connection,即:上层请求发送模块(eg:DCM)->PduR->CanTp->CanIf->CanDriv成功开辟了一条可用链路。如果返回E_NOT_OK,表示请求失败,可能是CanTp没有可用的Channel,也可能是底层硬件缓存区已经满了,无法再缓存数据;
注意:由于诊断半双工(half duplex)的通信特点,CanTp会在已经建立连接的N-SDU中查找是否此N-SDU处于接收状态,如果处于接收状态,则Connection失败。
(2)N-SDU的Connection创建以后,CanTp即可通过标准接口PduR_CanTpCopyTxData()去目标上层Copy要发送的数据;
(3)当数据成功发送到总线(BUS)以后,底层会通过上层注册的Callback(eg,CanTp_TxConfirmation()接口)将发送完成信息通知到目标上层,进而释放Connection,也意味着释放上层的缓存区(Buffer)。
接收端(Receiver)的Connection与释放:
(1)CanTp收到一帧诊断请求以后,会先调用PduR_CanTpStartOfReception()接口,去目标上层查找可用的Buffer,查找的依据是PCI(Protocol Control Information)中的帧长度信息;
(2)如果目标上层有可用的缓存区,调用PduR_CanTpCopyRxData()接口将数据Copy到目标上层,也意味着Connection的建立;

注意:CanTp会在已经建立连接的N-SDU中查找是否此N-SDU处于发送状态,如果处于发送状态,则Connection失败。

(3)当数据完整Copy到目标上层以后,通过回调函数 PduR_CanTpRxIndication(),释放Connection。
上述时间参数解释:
N_Cs:下一个连续帧发送等待或者Buffer等待超时时间;
N_As:等待发送确认时间;
N_Br:单帧接收或者流控帧发送请求时间。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值