CanTp概述

张开发
2026/4/11 23:45:53 15 分钟阅读

分享文章

CanTp概述
1.功能介绍CanTp是基于 ISO 15765-2 标准、用于在 CAN 总线上实现大数据可靠传输的传输层协议核心是数据分段 / 重组、流控、超时与错误管理、多连接支持解决 CAN 单帧 8 字节CAN FD 64 字节的长度限制。简言之CanTp本质就是构建一套规则使得大量的数据可以通过数据域短小的CAN线传递。CanTp的这套规则我简要归纳为以下3类1寻址类型通过物理寻址和功能寻址来实现单播和广播即通过物理寻址实现1对1的通话 功能寻址实现一对多的通话。2帧类型 单帧用于发送一帧CAN报文能解决的数据 首帧流控帧连续帧 解决一帧CAN报文无法解决的数据。3超时监控通过A,B,C 3类超时参数从接收端和发送端两端事实监控。2.寻址类型注意 功能寻址只支持单帧传输3.帧类型帧类型通过PCI(ProtocolControlInformation)来区分。分为4种帧--SF单帧--FF首帧--CF连续帧--FC流控帧不同的帧类型其PCI参数也不一样CANFD因为其数据域长度原因其部分PCI参数的长度做了适当的扩大来兼容。注意本文中所有的PCI 都是基于11bit的标准帧不考虑29bit的扩展帧和混合模式3.1 单帧SF单帧即可以用一帧CAN报文发送所有信息的诊断报文格式考虑到CANFD 其有2中格式CAN_DL 8:比如 02 10 02 00 00 00 00 00这里 02 中 高4bit 0 表示帧类型为SF, 2表示这个SF有2byte的Data 即 10 02 剩余的0为填充值。CAN_DL 8:比如 00 02 10 02 00 00 00 00 00 00 00 00 (这里假定CAN_DL 12)这里 00 中 高4bit 0 表示帧类型为SF, 02 表示这个SF有2byte的Data 即 10 02 剩余的0为填充值。3.2 多帧传输当一帧CAN报文无法传输完整的诊断数据则需要借助多帧传输多帧传输涉及3种帧类型FF,CF和FC。其中FF和CF负责传输数据FC则是起控制作用。其传输步骤如下图所示3.2.1 首帧 FF当数据过大则需要分段传输首帧顾名思义就是分段传输的第一帧。首帧的帧类型即byte0 的高4bit 1;CAN_DL 8:比如 10 0D 2E F1 8A 01 02 03这里0 0D 12Bit的FF_DL表示整个诊断数据有0xD 13个byte, 后面的全是数据。针对首帧其数据长度一定要大于单帧的最大数据长度所以FF_DL大于7CAN_DL 8:比如 10 00 00 00 00 0D 2E F1 8A 01 02 03 (这里假定CAN_DL 12)这里 00 00 00 0D 4byte的FF_DL表示整个诊断数据有0xD 13个byte, 后面的全是数据。3.2.2 流控 FC接收端接收到首帧后就知晓了后续还有多大的数据量接收端评估自身的接收能力后发送流控给发送端来控制后续的连续帧发送。流控帧本身没有诊断数据所以于CAN_DL 长度无关其帧类型即byte0 的高4bit 3;流控制帧有3个参数FS,BS 和STminFlowStatus (FS)用于告知发送端接下来的操作0 CTS: 告知发送端可以发送连续帧1 WAIT: 希望发送端暂停发送暂停到发送CTS或者因为超时终止发送2 OVFLW: 接收端没有空间接收数据发送端立刻终止发送。QA1. 收到FS Wait 后要等待多久根据ISO 15765-2 的 【9.3.4 Wait frame error handling】The sender of the message is informed about the aborted message reception via an N_USData.confirm with N_Result set to N_TIMEOUT_Bs. (Because of the missing FlowControl N_PDU from the receiver, an N_Bs timeout occurs in the sender.)简言之当受到FS WAIT后会执行以下操作1. 不会发送CF.2. 重置N_Bs Timer.3. 内部WAIT Frame Counter加14. 当WAIT Frame Counter达到N_WFTmax 终止当前会话上报N_WFT_OVRN当N_Bs Timeout 时间内未收到FS CTS或FS WAIT 也会终止当前会话如果收到FS CTS则会发送CF.BlockSize (BS)用于限制发送端一次最多发送多少个连续帧。SeparationTime minimum (STmin)•STmin接收方给出的连续帧最小发送间隔• 发送过快 → 接收方可能处理失败• 同时用于减轻 CAN 总线负载其中0 表示能发多快就多快。注意 当发送端收到的STmin N_As N_Cs 时 发送端不会遵守这个STmin, 因为遵守意味着A,C 时间参数超时。4. 超时监控ISO-15765-2 定义了3类时间参数A,B,C来确保通信的效率。名称含义代码层级理解N_AsTime for transmission of Frame,Send SideSender端调用CanTpTransmit 到CanTpTxConfirmation 被触发间的时间。N_BsTime until reception of next flow controlSender端从FF的CanTpTxConfirmation到FC的CanTpRxIndicationN_CsTime until next transmission of consecutive FrameSender端从CF的CanTpRxIndication到调用CanTpTransmit发送CF的间隔时间N_ArTime for transmission of Frame,Receiver Side同As, 只是换成Receiver端发送报文N_BrTime until transmition of next flow controlReceiver端接收到FF的Indication到调用CanTpTransmit发送FC的间隔时间N_CrTime until next reception of consecutive FrameReceiver端接收到CF的Indication到下一个CF的Indication的间隔时间注1CanTpRxIndication 表示成功接收诊断报文并且代码上已经传递到CanTp2CanTpTxConfirmation 表示诊断报文已经成功发送到了总线上即收到对端节点的ACK应答。3这里的Sender 和 Receiver 指的是首帧的发送方和接收方所以Sender可以发送报文也可也接收报文Receiver亦然。

更多文章