AUTOSAR通信篇—CANTP模块

今天介绍PduR模块的下层模块—CANTP模块。

1  CANTP的位置和作用

CanTp是PduR和CANIf模块之间的模块,如图1所示。CANTp模块的主要作用是对CAN I-PDU进行分段和重新组装,使得I-PDU的长度不大于8个字节,对CAN FD而言,CAN I-PDU不大于64个字节。

PduR模块将AUTOSAR COM和 DCM的I-PDU部署到不同的通信协议上。通过I-PDU标识符路由到不同的网络系统类型(例如CAN、LIN和FlexRay)。PduR还决定是否必须使用传输协议。最后,在没有速率转换的情况下,实现网关功能。

                     图1    CAN TP在BSW通信中的位置

CanIf提供了平等的机制来访问CAN总线通道,不管控制器芯片存在于内部还是外部。从CAN控制器的位置,提取ECU的硬件布局和CAN驱动器的数量。因为CanTp只处理传输协议帧(即SF、FF、CF和FC PDU),根据N-PDU ID, CANIf必须将I-PDU转发给CanTp或PduR,图1中也展示得也很清晰。

根据AUTOSAR BSW架构,CanTp提供以下服务:

  • 数据在传输方向的分割;

  • 按接收方向重新组装数据;

  • 控制数据流;

  • 检测错误分割会议。

  • 传输取消

  • 接受取消

AUTOSAR决定将BSW模块规范建立在现有标准的基础上,所以,AUTOSAR CAN传输层规范是基于汽车领域最常用的国际标准ISO15765。ISO 15765描述了两个适用的CAN传输层规范:OEM增强型诊断:采用ISO 15765-2;OBD诊断:采用ISO15765-4。

虽然CAN传输协议主要用于车辆诊断系统,但它也被开发用于处理来自其他基于CAN的需要传输层协议系统的需求。

CanTp模块提供用于分割、流控传输和消息重新组装的服务。它的主要目的是发送和接收可能适合也可能不适合一个CAN帧的消息。不适合一个CAN帧的消息被分割成多个部分,这样每个部分都可以在一个CAN帧中传输。

2  连接和相互关系

在AUTOSAR架构中,传输协议将用于传输诊断(例如OBD和UDS协议)和AUTOSAR COMI-PDU。因此,CanTp模块能够同时处理多个连接,即多个分段并行会话。

同时连接的最大数量通过静态配置实现。这种配置对生成的代码的复杂性和资源消耗(CPU、ROM和RAM)有重要的影响,因为资源必须为并发访问保留,例如Rx和Tx状态机,用于处理N-PCI数据的变量等。

为了可以同时接收或发送I-PDU,每个N-SDU标识符将通过配置好的CanTp”连接通道“进行内部路由。由于“连接通道”不能从外部访问,所有传输N-SDU所需的信息都将链接到的N-SDU标识符,比如“连接通道”号、超时、寻址格式等。

根据元数据配置,N-SDU可以作为定义N_AI的特定连接,也可以作为通用连接,其中N_TA、N_SA和N_AE在运行时不同,而N_TAtype、MType和寻址格式是静态定义的。AUTOSAR通信栈支持周期模式和事件触发模式。因此,每个通信层都可以通过不同的机制接收来自下层的信息,并将信息传播到上层。

对于CANTp层,只支持事件触发模式。

为了优化通信栈,AUTOSAR限制了CANTp的缓冲能力。因此,CanTp将N-SDU有效载荷直接从上层(DCM、COM或PDUR在1:1 TP路由的情况下)复制到CAN驱动程序,反之亦然。为了保证数据的一致性,上层会遵循以下规则:

  • 在传输时,从发送请求到收到发送确认,N-SDU数据的有效载荷将保持不变;

  • 在接收时,从接收开始到接收指示被接收,N-SDU数据访问将被锁定。

                              图2  发送层的相互关系

在运行时,CAN传输模块必须具有管理传输连接所需的所有信息。因此,应该静态配置以下属性:

  • CAN N-SDU的数目

  • 每个CAN N-SDU的唯一标识符

  • 每个CAN的通信方向N-SDU (Tx或Rx)

  • 每个连接的寻址格式(普通、扩展、混合11位、普通固定或混合29位),根据寻址格式,另外:对于使用带有元数据的N-SDU的通用连接,可以省略静态寻址信息。

    • Normal:none

    • Extended:N_TA

    • Mixed 11 bit:N_AE

    • Normal fixed:N_TA, N_SA

    • Mixed 29 bit:N_TA, N_SA, N_AE

  • 每个连接的寻址格式(普通、扩展或混合),如果是扩展寻址格式,则为N_TA值,如果是混合寻址格式,则为N_AE值。

关联的CAN L-SDU标识符,每个CAN N-SDU标识符,如果需要(多帧分割会话),CAN L-SDU标识符用于传输CAN FC N-PDU经典CAN帧和CAN FD帧

3  帧类型

CanTp提供四种帧类型对网络层数据进行解析。分别是单帧(Signle Frame),首帧(Frist Frame),连续帧(Consecutive Frame),流控帧(Flow Control)。

                             图3  四种帧类型

1. 单帧

对于未分段的数据(一个CAN报文能发送完成)CanTp提供了协议的优化实现,将数据长度嵌入在PCI字节中,单帧一般是传输不分段数据和用于建立数据传输请求。

2.首帧

首帧用于传递不能单帧传输数据的第一帧数据,接收方接收到首帧后,应返回流控帧告知接收能力,同时做好接收多帧的准备。

3.连续帧

连续帧应在首帧之后发送,接收节点一旦收到连续帧,应将全部数据组装完成。

                       图4  发送多帧接口调用

                         图5  接收多帧接口调用

4.流控帧

流控帧的作用是调节连续帧的发送速率,流控帧应包含帧的控制信息:FS,BS,STmin。在收到首帧后就应返回流控帧,告知发送方当前接收状态以及接收能力。

其中,BS(Block Size):发送的数据量。

STmin(Separation Time Min):多帧间的最小间隔时间。

FS(Flow Status)有三种状态:

  • FC.CTS:continue to send, the authorization to continue

  • FC.WAIT:the request to continue to wait

  • FC.OVFLW:buffer overflow

4  上下层服务

4.1  为上层提供的服务

CAN传输层使用PDUR的回调函数来复制传输数据,确认传输,发起接收,复制接收到的数据,指示接收到的消息,关键函数如下:

    PduR_CanTpRxIndication()

    PduR_CanTpStartOfReception ()

    PduR_CanTpCopyRxData ()

    PduR_CanTpCopyTxData ()

    PduR_CanTpTxConfirmation()

CanTp模块的服务接口主要分为两大类:

  初始化和关机

   通信服务

CANTp模块有两个内部状态:CANTP_OFF和 CANTP_ON

如图6中,下电后CANTp为CANTP_OFF状态,在该状态下,允许更新CANTp的配置。CANTp通过CanTp_Init()成功初始化后,状态切换到CANTP_ON。只有在CANTP_ON的状态下,可以对CAN I-PDU进行分段和重新组装。CanTp_Init()将对模块的所有全局变量进行初始化,并将所有传输协议连接设置为CANTP_ON的子状态,在这个子状态(状态为CANTP_RX_WAIT和CANTP_TX_WAIT)中,分段传输和分段接收都处于进行中。

如果启用了CanTp模块的开发故障检测,则在调用CanTp_Init函数之前,当PDUR或CAN接口层尝试使用任何函数(CanTp_GetVersionInfo除外)时,CanTp模块将引发一个错误(CANTP_E_UNINIT)。

如果全局状态是CANTP_ON,CanTp模块会被调用,CanTp_Init会返回默认状态(状态= CANTP_ON,但是传输和接收正在进行中)。如果在CanTp模块处于全局状态CANTP_ON时调用CanTp_Init,则CanTp模块将释放所有当前连接。函数CanTp_Shutdown将正常停止CanTp模块。

                      图6  CAN TP的生命周期

传输操作cantp_transmission()将允许上层使用CAN传输协议(分段、扩展地址格式等)请求数据传输。函数cantp_transmission()是异步的。接收到发送请求后,如果N-SDU传输完成(成功或失败),CanTp模块会通知到上层。

当然,CANTp允许上层取消正在进行的传输。比如,由于要接收其他更高优先级的诊断协议,CANTp可以取消诊断传输。这一特性通过静态配置参数CanTpTc来激活。发送取消通过调用cantp_canceltransmission()函数来触发。

在调用服务cantp_canceltransmission()之后,该连接上的传输将被中止。需要注意的是,PduR_CanTpTxConfirmation()函数在E_NOT_OK值时,传输将被取消。

4.2  为下层提供的服务

CAN传输层使用CAN接口的以下服务来传输CAN N-PDUs:

    CanIf_Transmit ()      

根据通信栈的AUTOSAR规范,CAN传输层向CAN接口提供以下两个回调函数:CanTp_TxConfirmation()和CanTp_RxIndication()。

发送确认

CanIf模块调用传输确认函数,通知CAN传输层CanTp请求的CAN帧传输是否成功执行。L-PDU标识符与调用相关联,以便识别相应的传输。当超过最大时间(等于N_As)没有收到发送确认时,CanTp模块将中止相应的会话。在收到TxConfirmation之前,N-PDU对于其他并发会话仍然不可用,不管成功与否。

对于确认调用,CanTp模块应提供函数CanTp_TxConfirmation()。当使用结果E_NOT_OK调用CanTp_TxConfirmation()时,CanTp将中止corrensponding会话。

接收指示

CanIf模块调用接收指示函数,通知CanTp模块接收到新的CAN N-PDU帧(即传输协议帧)。接收指示可以根据CanIf配置在中断服务(ISR)中执行。对于接收指示,CanTp模块应提供cantp_rxspecification()。

CAN传输层的内部操作,为了实现”在单个CAN帧或多个CAN帧中传输消息“的目标,提供了基本的机制来执行。CAN传输层的整个行为将被事件触发,这样CanTp就可以直接处理来自PDUR N-SDU的传输。

当接收到SF或FF N-PDU时,CanTp模块使用PduR_CanTpStartOfReception函数通知上层PDUR接收。上层将预留并锁定一个缓冲区来接收N-SDU。

CanTp使用PduR_CanTpStartOfReception()的参数TpSduInfoPtr向PduR提供FF/SF的内容。接收到的数据链路层数据长度(RX_DL)由CAN帧PDU(CAN_DL)的第一个有效载荷长度派生而来,具体:

  • 对于小于或等于8字节的CAN_DL值,RX_DL值应该是8。

  • 对于大于8字节的CAN_DL值,RX_DL值等于CAN_DL值。

5  API函数

关于CAN TP模块中的函数,这里就不展开介绍了,后续有机会串讲完整通讯过程时,再展开。主要的API函数包括:

  • CanTp_Init

  • CanTp_ GetVersionInfo

  • CanTp_Shutdown

  • CanTp_Transmit

  • CanTp_CancelTransmit

  • CanTp_CancelReceive

  • CanTp_ChangeParameter

  • CanTp_ReadParameter

  • CanTp_MainFunction

总结:

CanTp是AUTOSAR通信栈中负责网络解析的模块。从上到下,CANTp负责对CAN I-PDU进行分段和重新组装;从下到上,负责接收CanIf层传输的N-PDU数据解析成I-PDU数据,并传递给PDUR模块。CanTp只处理传输协议帧,即单帧,首帧,连续帧,流控帧。同时,CANTp层,只支持事件触发模式。

缩略词:

CAN Communication Matrix:CAN通信矩阵,用来描述完整的CAN网络,包括:涉及的CAN节点;CAN PDU的定义(ID和数据长度DLC);PDU的发送和接收信息。

Physical Channel:物理通道。代表CAN网络的接口,不同CAN硬件单元的不同物理通道可以访问不同的网络。

DCM:Diagnostic Communication Manager,诊断通信管理

COM IF:communicationinterface modules,通讯接口模块

Communication Transport:通讯传输

I-PDU Multiplexer:I-PDU多路复用

DLC:Data LengthCode,描述SDU长度的CAN信息。

I-PDU: Interaction Layer Protocol Data Units,交互层协议数据单元。

L-PDU:Data LinkLayer Protocol Data Unit,数据链接层的协议数据单元,包含标识符(ID), 数据长度(DLC)和数据(L-PDU)

L-SDU:Data LinkLayer Service Data Unit数据链接层服务数据单元,它其中的数据传输到L-PDU中。

SF:Single Frame,单帧

FF:First Frame,首帧

CF:ConsecutiveFrame,连续帧

N-PDU:CAN传输层的网络协议数据单元。

N-SDU:CAN传输层的服务数据单元。其中的数据传输到N-PDU中。

PDU Router:协议数据单元路由。将I-PDU从一个模块传递到另外一个模块,PDU Router可以用于网关运行或内部路由。

I-PDU group:I-PDU组 是COM模块中相同方向(即发送或接收)的I-PDU的任意集合。

Dem:DiagnosticEvent Manager,诊断事件管理

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值