CAN FD协议¶
CAN FD 是 CAN with Flexible Data rate 的缩写,翻译为【可变速率的 CAN】。 也可以简单的认为是传统 CAN 的升级版,其中要说明的是,只升级了协议,物理层没有改变。
CAN FD的由来¶
CAN 数据段只有 8byte,最高速率为 1Mbit/s,通常使用的是 500k,随着功能的逐渐增多,各 ECU 之间的信息交互也越多,导致总线负载持续走高;CAN 报文中只有约 40~50% 的带宽用于实际数据传输(对比其他协议,额外开销比例要小得多,如UDP (1500 bytes/datagram, 64 bytes overhead),FlexRay(254 bytes/frame, 8 bytes overhead));响应机制受车内布线的物理特性限制,例如 CAN 控制器中的 ACK 生成延迟;收发器传播延迟;导线延迟等,然而随着汽车功能越来越多,CAN总线的局限性也逐渐暴露。
但是汽车不可能直接放弃目前的传统 CAN 总线技术,重头来过。那么为了解决 CAN 总线负载率问题,而又能兼容 CAN 总线,并且研发成本不能太高的问题,CAN FD 就应运而生了。
传输速率比较¶
CAN的传输速率¶
一般的工程中比较常用的为 500K 每秒的通讯速率。 这个速率在实际测试的时候也是非常可靠的。 CAN 总线上任意两个节点的最大传输距离与其位速率有关。 最大通信距离指的是同一条总线上两个节点之间的距离。 从下面图中,可以看到速率越低通讯距离就越远,也就是说 CAN 总线的通讯距离和波特率成反比。 CAN 最大传输速率为 1Mbps。

CAN FD的传输速率¶
CAN-FD 采用了两种位速率:从控制场中的 BRS 位到 ACK 场之前(含 CRC 分界符)为可变速率,其余部分为原 CAN 总线用的速率。 两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位 TQ 外,位时间各段的分配比例也可不同。
因此,对于 CAN FD 而言,是在 CAN 的基础上增加了一个数据域的传输速率,数据传输速率要大于等于原 CAN 总线用的速率。 也就是说 CAN FD 支持两种传输速率,两种速率可以保持一致,也可以不保持一致。 速率可变,仲裁比特率最高 1Mbps,数据比特率最高 8Mbps。



数据域长度对比¶
CAN 的数据域长度,一帧数据最长 8 字节。 CAN FD 数据域长度,一帧数据最长 64 字节。
传统 CAN 报文与 CAN FD 报文的 DLC 长度区别如下所示:

ID 长度对比¶
CAN FD 标准帧 ID 长度可扩展至 12bit,CAN 的标准帧 ID 为 11bit。
帧格式对比¶
在 CAN 总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。 CAN 通信是通过以下 5 种类型的帧进行的:数据帧 、遥控帧 、错误帧 、过载帧 、帧间隔。

CAN FD 新增了 FDF、BRS、ESI 位:
- FDF:表示 CAN 报文还是 CAN-FD 报文;
- BRS:表示位速率转换,该位隐性时,速率可变(即 BSR 到 CRC 使用转换速率传输),该位为显性时,以正常的 CAN-FD 总线速率传输(恒定速率);
- ESI:表示发送节点状态。
关于 CAN FD 的帧结构,详见下节。
CAN FD帧结构解析¶
Tip
CAN FD 节点可以正常收发 CAN 报文,但 CAN 节点不能正确收发 CAN FD 报文,因为其帧格式不一致。
与 CAN 帧一样,CAN FD 帧一共具有,帧起始 SOF,仲裁段,控制段,数据域,CRC域,ACK域,帧结束,共七个部分组成。

帧起始¶
CAN 与 CANFD 使用相同的 SOF 标志位来标志报文的起始。帧起始由 1 个显性位构成,标志着报文的开始,并在总线上起着同步作用。以下是 CAN 和 CAN FD 的帧起始图。


仲裁域¶
与 CAN 不同,CAN FD 取消了对远程帧的支持,用 RRS 位替换了 RTR 位,为常显性。IDE 用于区分标准帧和扩展帧。

控制域¶
CAN FD 与 CAN 有着相同的 IDE,res,DLC 位。同时增加了 FDF、BRS、ESI 三个 bit 位。
FDF 为隐性时,表示为 CAN FD 报文;
BRS 为速率转换开发,当其隐性时,速率可变,当其显性时,以正常的 CAN FD 总线速率传输(恒定速率);
ESI 用于表示错误状态,主动错误发送显性位,被动错误发送隐性位。

数据域¶
CAN FD 兼容 CAN 的数据格式,同时最大还能支持 12, 16, 20, 24, 32, 48, 64byte。

CRC¶
CAN FD 对 CRC 算法进行了改进,CRC 对填充位也加入了计算。在校验和部分为避免有连续位超过 6 个,就确定在第一位以及以后每 4 位添加一个填充位加以分割,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作出错处理。CAN FD 的 CRC 场扩展到了 21 位。

ACK¶
ACK 紧跟着 CRC 结束标识位。不同的是,CAN FD 支持 2bits 的 ACK 的识别。

帧结尾¶
与 CAN 一样,CAN FD 的帧结尾也为连续 7 位的隐性位。