AUTOSAR通信篇—CANTP模块

2021年12月2日汽车技术评论13,026阅读模式

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

AUTOSAR通信篇—CANTP模块

1  CANTP的位置和作用

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

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

AUTOSAR通信篇—CANTP模块

                     图1    CAN TP在BSW通信中的位置
CanIf提供了平等的机制来访问CAN总线通道,不管控制器芯片存在于内部还是外部。从CAN控制器的位置,提取ECU的硬件布局和CAN驱动器的数量。因为CanTp只处理传输协议帧(SFFFCFFC PDU),根据N-PDU ID, CANIf必须将I-PDU转发给CanTpPduR,图1中也展示得也很清晰
根据AUTOSAR BSW架构,CanTp提供以下服务:
  • 数据在传输方向的分割;

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

  • 控制数据流;

  • 检测错误分割会议。

  • 传输取消

  • 接受取消

AUTOSAR决定将BSW模块规范建立在现有标准的基础上,所以,AUTOSAR CAN传输层规范是基于汽车领域最常用的国际标准ISO15765ISO 15765描述了两个适用的CAN传输层规范:OEM增强型诊断:采用ISO 15765-2OBD诊断:采用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数据访问将被锁定。
AUTOSAR通信篇—CANTP模块

                              图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)。

AUTOSAR通信篇—CANTP模块

                             图3  四种帧类型

1. 单帧

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

2.首帧

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

3.连续帧

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

AUTOSAR通信篇—CANTP模块

                       图4  发送多帧接口调用

AUTOSAR通信篇—CANTP模块

                         图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中,下电后CANTpCANTP_OFF状态,在该状态下,允许更新CANTp的配置。CANTp通过CanTp_Init()成功初始化后,状态切换到CANTP_ON。只有在CANTP_ON的状态下,可以对CAN I-PDU进行分段和重新组装。CanTp_Init()将对模块的所有全局变量进行初始化,并将所有传输协议连接设置为CANTP_ON的子状态,在这个子状态(状态为CANTP_RX_WAITCANTP_TX_WAIT)中,分段传输和分段接收都处于进行中。
如果启用了CanTp模块的开发故障检测,则在调用CanTp_Init函数之前,当PDURCAN接口层尝试使用任何函数(CanTp_GetVersionInfo除外)时,CanTp模块将引发一个错误(CANTP_E_UNINIT)
如果全局状态是CANTP_ONCanTp模块会被调用,CanTp_Init会返回默认状态(状态= CANTP_ON,但是传输和接收正在进行中)如果在CanTp模块处于全局状态CANTP_ON时调用CanTp_Init,则CanTp模块将释放所有当前连接。函数CanTp_Shutdown将正常停止CanTp模块。

AUTOSAR通信篇—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就可以直接处理来自PDUN-SDU的传输。
当接收到SFFF N-PDU时,CanTp模块使用PduR_CanTpStartOfReception函数通知上层PDUR接收。上层将预留并锁定一个缓冲区来接收N-SDU
CanTp使用PduR_CanTpStartOfReception()的参数TpSduInfoPtrPduR提供FF/SF的内容。接收到的数据链路层数据长度(RX_DL)CANPDU(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 MatrixCAN通信矩阵,用来描述完整的CAN网络,包括:涉及的CAN节点;CAN PDU的定义(ID和数据长度DLC);PDU的发送和接收信息。
Physical Channel物理通道。代表CAN网络的接口,不同CAN硬件单元的不同物理通道可以访问不同的网络。
DCM:Diagnostic Communication Manager,诊断通信管理
COM IFcommunicationinterface modules,通讯接口模块
Communication Transport通讯传输
I-PDU MultiplexerI-PDU多路复用
DLCData LengthCode,描述SDU长度的CAN信息。
I-PDU: Interaction Layer Protocol Data Units,交互层协议数据单元。
L-PDUData LinkLayer Protocol Data Unit,数据链接层的协议数据单元,包含标识符(ID, 数据长度(DLC)和数据(L-PDU
L-SDUData LinkLayer Service Data Unit数据链接层服务数据单元,它其中的数据传输到L-PDU中。
SFSingle Frame,单帧
FFFirst Frame,首帧
CFConsecutiveFrame,连续帧
N-PDUCAN传输层的网络协议数据单元。
N-SDUCAN传输层的服务数据单元。其中的数据传输到N-PDU中。
PDU Router协议数据单元路由。将I-PDU从一个模块传递到另外一个模块,PDU Router可以用于网关运行或内部路由。
I-PDU groupI-PDU COM模块中相同方向(即发送或接收)I-PDU的任意集合。
DemDiagnosticEvent Manager,诊断事件管理

作者简介:

Demu传统汽车电控向智能驾驶转变的汽车人。从事发动机控制器系统工程师和软件工程师多年,有丰富的ECU系统和软件设计经验。欢迎大家一起留言交流,共同进步。

weinxin
扫码关注公众号
关注公众号领精彩彩蛋!
AUTOSAR通信篇—AUTOSAR COM模块 汽车技术

AUTOSAR通信篇—AUTOSAR COM模块

AUTOSAR COM是AUTOSAR通讯的重要组成部分,它是从OSEK COM标准的基础上发展而来的。它提出了一个不同速率的总线网络之间进行数据交换的方法,为汽车控制单元应用软件提供了统一的通信环境...
AutoSar之方法论Methodology 汽车技术

AutoSar之方法论Methodology

AUTOSAR为汽车电子软件系统开发定义了通用的技术方法,即AUTOSAR方法论。该方法论描述了从系统底层配置到ECU可执行代码产生过程的设计步骤。AUTOSAR开发方法是基于虚拟功能总线的开发方法。...

发表评论