[AutoSar]BSW_Com012 CAN TP 模块介绍


  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

在这里插入图片描述
>>>>>回到总目录<<<<<<

一、知识储备

1.ISO 14229
2.ISO15765
3.CAN 协议

1.1 交互接口

在这里插入图片描述

二、缩写对照表

PDU SDU PCI 见 [AutoSar]BSW_Com02 PDU详解

项目描述
CAN N-SDU Info Structure这是一个CAN传输层内部常量结构,包含特定的CAN传输层信息,用于处理相关CAN N-SDU的传输、接收、分段和重组
CAN NSduId在CAN传输层中唯一的SDU标识符。用来引用N-SDU的路由属性。因此,为了通过其API与CAN传输层交互,上层使用CAN NSduId来引用CAN N-SDU信息结构。
BSBlock Size
CanCAN Driver module
CAN CFCAN Consecutive Frame N-PDU
CAN FCCAN Flow Control N-PDU
CAN FFCAN First Frame N-PDU
CAN SFCAN Single Frame N-PDU
DLCData Length Code (part of CAN PDU that describes the SDU length)
FIMFunction Inhibition Manager
MtypeMessage Type (possible value: diagnostics, remote diagnostics)
N_AINetwork Address Information (see ISO 15765-2).
N_ArTime for transmission of the CAN frame (any N-PDU) on the receiver side (see ISO 15765-2).
N_AsTime for transmission of the CAN frame (any N-PDU) on the sender side (see ISO 15765-2).
N_BrTime until transmission of the next flow control N-PDU (see ISO 15765-2).
N_BsTime until reception of the next flow control N-PDU (see ISO 15765-2).
N_CrTime until reception of the next consecutive frame N-PDU (see ISO 15765-2).
N_CsTime until transmission of the next consecutive frame N-PDU (see ISO 15765-2).
N_DataData information of the transport layer
N_PCIProtocol Control Information of the transport layer
N_SANetwork Source Address (see ISO 15765-2).
N_TANetwork Target Address (see ISO 15765-2). It might already contain the N_TAtype(physical/function) in case of ExtendedAddressing.
N_AENetwork address extend
N_TAtypeNetwork Target Address type (see ISO 15765-2).
FSFlow Status
CAN FDCAN flexible data rate
CAN_DLCAN frame data length
TX_DLTransmit data link layer data length
RX_DLReceived data link layer data length
SF_DLSingleFrame data length in bytes
CTSClearToSend status (FC(CTS))

三、CAN TP 所在架构位置

服务层

在这里插入图片描述

在这里插入图片描述

四、CAN TP 的主要作用

  CANTp模块的主要作用是对CAN I-PDU进行分段和重新组装,使得I-PDU的长度不大于8个字节,对CAN FD而言,CAN I-PDU不大于64个字节。
  CanTp只处理传输协议帧(即SF, FF, CF和FC pdu),根据N-PDU ID, CAN接口必须将I-PDU转发给CanTp或PduR。

根据AUTOSAR BSW架构,CanTp提供以下服务:
1.发送数据的时候把长帧拆分。
2.接收数据的时候组帧。
3.控制数据流;
4.检查组帧拆帧错误。
5.取消发送。
6.取消接收。

五、CAN TP 在 autosar 架构中的基本概念

  在AUTOSAR架构的最终版本中,传输协议设施将用于传输诊断(例如OBD和UDS协议)和AUTOSAR COM i - 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和寻址格式是静态定义的。

5.1、CAN TP 的处理模式

  AUTOSAR通信栈支持轮询和事件触发模式。因此,每个通信层都可以从其下层接收信息,并通过不同的机制向其上层传播信息。
但是:对于CAN传输层(CAN TP),只支持事件触发模式。

5.2 数据一致性

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

在传输的时候,N-SDU数据payload将保持不变,直到发送请求到收到发送确认。
在接收的时候,N-SDU将被锁定无法访问,直到 RX indication 被收到

5.3 静态配置

  在运行时,CAN传输模块必须具有管理传输连接所需的所有信息。因此,应该静态配置以下属性:
  1.CAN N-SDU个数。
  2.每个CAN N-SDU的唯一标识符。
  3.每个CAN N-SDU的通信方向(Tx或Rx)。
  4.每个通道的通信类型:半双工或全双工。
  5.每个连接的寻址格式(普通、扩展、混合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
  6.每个连接的寻址格式(普通、扩展或混合),如果是扩展寻址格式,则为N_TA值,如果是混合寻址格式,则为N_AE值。
  7.每个CAN N-SDU标识符的关联CAN L-SDU标识符,必要时(多帧分段会话)用于传输CAN FC N-PDU的CAN L-SDU标识符.
  8.Classic CAN frames and CAN FD frames

六、功能规范

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

6.1 Services provided to upper layer

主要提供两类服务:
1.Initialization and shutdown
2.Communication services

6.1.1 Initialization and shutdown

在这里插入图片描述

  
1.CAN TP 状态机有两种状态 – CANTP_OFF和CANTP_ON。
2.在CANTP_ON 中包含 RX(TX)_WAIT 和 RX(TX)_PROCESSING两种子状态。
3.在上电后,CAN TP 会默认在CANTP_OFF状态,当通过调用CanTp_Init() 初始化成功后会进入CANTP_ON状态。
4.只有当CAN TP 在CANTP_ON的时候CAN TP才会执行它自身的功能。
5.当其中既不进行分段发送也不进行分段接收的时候,处于RX(TX)_WAIT子状态。
6.当CAN TP 未初始化的时候,上层调用TP服务会产生CANTP_E_UNINIT 错误。
7.当CanTp模块处于全局状态CANTP_ON时,如果调用CanTp_Init, CanTp模块将丢失所有当前连接。

6.1.2 Transmit request

  传输操作异步调用CanTp_Transmit(),允许上层请求使用CAN传输协议设施(分段、扩展寻址格式等)进行数据传输。在传输请求被接受,N-PDU被处理完成后canTP会通知上层。

6.1.3 Transmit cancellation

  通过静态配置CanTpTc可以实现取消传输,调用CanTp_CancelTransmit()。例如当由于接收到另一个具有更高优先级的诊断协议的时候,当前正在进行的诊断传输会被取消。

6.2 Services provided to the lower layer

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

6.2.1 Transmit confirmation

  CanIf模块应调用发送确认函数,通知CAN传输层CanTp请求的CAN帧传输是否成功。L-PDU标识符与呼叫相关联,以便识别相应的传输。
  当超过最大时间(等于n_a)仍未收到发送确认时,CanTp模块将终止相应的会话。N-PDU对其他并发会话保持不可用状态,直到收到TxConfirmation,不管是否成功。
  当CanTp_TxConfirmation()返回否定相应的时候,CANTP放弃相应的会话。

6.2.2 Reception indication

  CanIf模块调用接收指示函数CanTp_RxIndication()通知CanTp模块一个新的CAN N-PDU帧(即传输协议帧)已经收到。接收指示可以根据CanIf配置在ISR上下文中执行。

6.3 Internal behavior

  CAN TP 提供传输单帧和多帧的内部机制,由于CAN TP 为事件触发,所以它可以处理来自 can if 的L-PDU 和来自PDUR 的 N-PDU。

6.3.1 N-SDU Reception

  当CAN TP 收到单帧或者首帧的时候应该调用PduR_CanTpStartOfReception()通知并将帧内容传递到上层的PDUR。
  接收到的数据链路层数据长度(RX_DL)由CAN帧/PDU的第一个接收到的有效载荷长度(CAN_DL)导出,如下所示:
    对于小于等于8字节的CAN_DL值,RX_DL值为8。
    对于大于8字节的CAN_DL值,RX_DL值等于CAN_DL值。

在这里插入图片描述

6.3.2 N-SDU Transmission

  上层通过调用CanTp_Transmit()请求传输N-SDU。CanTp_Transmit()的参数描述了CAN NSduId和要发送的完整Tx N-SDU长度。

6.3.3 Buffer strategy

  因为CanTp没有缓冲能力,所以要发送的N-SDU负载不会在内部复制,收到的N-PDU也不会在内部重新组装。
  CAN传输层直接作用于上层(例如PduR、DCM或COM)的内存区域。为了访问这些内存区域,CAN传输层使用PduR_CanTpCopyTxData()或PduR_CanTpCopyRxData()函数。
因此,为了保证数据一致性,上层应该锁定该内存区域,直到出现指示.
  当发送缓冲区被锁定时,上层不能在缓冲区内写入数据。
  当接收缓冲区被锁定时,CAN传输层不能保证缓冲区的数据一致性。上层既不能读也不能写缓冲区中的数据。
在这里插入图片描述

  假定上层模块在向PduR_CanTpStartOfReception()调用返回状态BUFREQ_OK时锁定了缓冲区,CanTp_Transmit()返回E_OK,并保持缓冲区锁定,直到确认或指示(PduR_CanTpTxConfirmation()或PduR_CanTpRxIndication()调用)发生。

在这里插入图片描述

上图描述了用CAN 2.0 传输长度为50 byte 的数据流程:
1.PduR要求传输50个数据字节。
2.CanTp向PduR请求有效负载数据;可以发送第一帧。
3.CanTp将剩余的有效载荷数据作为连续帧的序列发送;上层在每个CF上复制6或7个有效载荷数据字节;
4.CanTp确认有效载荷数据的传输。
在这里插入图片描述

上图描述了以25个字节作为可用的Rx缓冲区,接受49 byte 数据的流程:
1.CanIf用CanTp_RxIndication()通知新的接收。CanTp将此通知转发给PduR;
2: PduR返回可用缓冲区大小为25字节,CanTp向发起者发送FlowControl CTS;
3: CanTp向PduR提供接收到的每一帧的数据,并监控剩余的缓冲区大小。在连续第二帧之后,剩余的缓冲区大小不够下一个块(两个连续帧);
4.CanTp通过调用PduR_CanTpCopyRxData()以0作为数据长度和NULL_PTR作为数据,向PduR请求剩余的缓冲区大小,并向发起者发送FlowControl Wait。直到下一个块有足够的缓冲区可用为止;
5.当缓冲区大小最终足够下一个块时,CanTp将发送一个FlowControl CTS给发起者,并继续接收下一个连续帧块;
6.在复制完块的最后一个连续帧后,剩余的缓冲区对于下一个块来说太低了,因此CanTp再次发送等待帧并监视剩余的缓冲区大小。
7.当最后一个区块的缓冲区可用时,CanTp将继续接收;
8. CanTp通过调用PduR_CanTpRxIndication()通知PduR接收结束。

6.4 Relationship between CAN NSduId and CAN LSduId

  如下图所示,CAN TP 将L-SDU 根据不同的帧类型,提取出来填入 TA AE SA 后生成N-SDU。
在这里插入图片描述

七、帧类型定义

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

7.1 单帧

  DLC小于8,可以被一帧发完。
在这里插入图片描述

7.2 首帧

  首帧是需要多帧才能传输完成数据的第一帧,接收方接收到首帧后,应返回流控帧告知接收能力,同时做好接收多帧的准备。

7.3 连续帧

  连续帧应在首帧之后发送,接收节点一旦收到连续帧,应将全部数据组装完成。
在这里插入图片描述

7.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

>>>>>回到总目录<<<<<<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老灰╮(╯-╰)╭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值