[AutoSar]BSW_Com012 CAN TP 模块介绍

📅 2026/8/26 13:50:29
[AutoSar]BSW_Com012 CAN TP 模块介绍
目录关键词平台说明一、知识储备1.1 交互接口二、缩写对照表三、CAN TP 所在架构位置四、CAN TP 的主要作用五、CAN TP 在 autosar 架构中的基本概念5.1、CAN TP 的处理模式5.2 数据一致性5.3 静态配置六、功能规范6.1 Services provided to upper layer6.1.1 Initialization and shutdown6.1.2 Transmit request6.1.3 Transmit cancellation6.2 Services provided to the lower layer6.2.1 Transmit confirmation6.2.2 Reception indication6.3 Internal behavior6.3.1 N-SDU Reception6.3.2 N-SDU Transmission6.3.3 Buffer strategy6.4 Relationship between CAN NSduId and CAN LSduId七、帧类型定义7.1 单帧7.2 首帧7.3 连续帧7.4 流控帧关键词嵌入式、C语言、autosar、OS、BSW平台说明项目ValueOSautosar OSautosar厂商vector EB芯片厂商TI 英飞凌编程语言CC编译器HighTec (GCC)autosar版本4.3.1回到总目录一、知识储备1.ISO 142292.ISO157653.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 SizeCanCAN Driver moduleCAN CFCAN Consecutive Frame N-PDUCAN FCCAN Flow Control N-PDUCAN FFCAN First Frame N-PDUCAN SFCAN Single Frame N-PDUDLCData Length Code (part of CAN PDU that describes the SDU length)FIMFunction Inhibition ManagerMtypeMessage 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 layerN_PCIProtocol Control Information of the transport layerN_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 extendN_TAtypeNetwork Target Address type (see ISO 15765-2).FSFlow StatusCAN FDCAN flexible data rateCAN_DLCAN frame data lengthTX_DLTransmit data link layer data lengthRX_DLReceived data link layer data lengthSF_DLSingleFrame data length in bytesCTSClearToSend 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: noneExtended: N_TAMixed 11 bit: N_AENormal fixed: N_TA, N_SAMixed 29 bit: N_TA, N_SA, N_AE6.每个连接的寻址格式(普通、扩展或混合)如果是扩展寻址格式则为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 shutdown2.Communication services6.1.1 Initialization and shutdown1.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 confirmationCanIf模块应调用发送确认函数通知CAN传输层CanTp请求的CAN帧传输是否成功。L-PDU标识符与呼叫相关联以便识别相应的传输。当超过最大时间(等于n_a)仍未收到发送确认时CanTp模块将终止相应的会话。N-PDU对其他并发会话保持不可用状态直到收到TxConfirmation不管是否成功。当CanTp_TxConfirmation()返回否定相应的时候CANTP放弃相应的会话。6.2.2 Reception indicationCanIf模块调用接收指示函数CanTp_RxIndication()通知CanTp模块一个新的CAN N-PDU帧(即传输协议帧)已经收到。接收指示可以根据CanIf配置在ISR上下文中执行。6.3 Internal behaviorCAN 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 流控帧流控帧的作用是调节连续帧的发送速率流控帧应包含帧的控制信息FSBSSTmin。在收到首帧后就应返回流控帧告知发送方当前接收状态以及接收能力。其中BSBlock Size发送的数据量。STminSeparation Time Min多帧间的最小间隔时间。FSFlow Status有三种状态FC.CTScontinue to send, the authorization to continueFC.WAITthe request to continue to waitFC.OVFLWbuffer overflow回到总目录