跳转至

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。

alt text

CAN FD的传输速率

CAN-FD 采用了两种位速率:从控制场中的 BRS 位到 ACK 场之前(含 CRC 分界符)为可变速率,其余部分为原 CAN 总线用的速率。 两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位 TQ 外,位时间各段的分配比例也可不同。

因此,对于 CAN FD 而言,是在 CAN 的基础上增加了一个数据域的传输速率,数据传输速率要大于等于原 CAN 总线用的速率。 也就是说 CAN FD 支持两种传输速率,两种速率可以保持一致,也可以不保持一致。 速率可变,仲裁比特率最高 1Mbps,数据比特率最高 8Mbps。

alt text

alt text

alt text

数据域长度对比

CAN 的数据域长度,一帧数据最长 8 字节。 CAN FD 数据域长度,一帧数据最长 64 字节。

传统 CAN 报文与 CAN FD 报文的 DLC 长度区别如下所示:

alt text

ID 长度对比

CAN FD 标准帧 ID 长度可扩展至 12bit,CAN 的标准帧 ID 为 11bit。

帧格式对比

在 CAN 总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。 CAN 通信是通过以下 5 种类型的帧进行的:数据帧 、遥控帧 、错误帧 、过载帧 、帧间隔。

alt text

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域,帧结束,共七个部分组成。

alt text

帧起始

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

alt text

alt text

仲裁域

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

alt text

控制域

CAN FD 与 CAN 有着相同的 IDE,res,DLC 位。同时增加了 FDF、BRS、ESI 三个 bit 位。

FDF 为隐性时,表示为 CAN FD 报文;

BRS 为速率转换开发,当其隐性时,速率可变,当其显性时,以正常的 CAN FD 总线速率传输(恒定速率);

ESI 用于表示错误状态,主动错误发送显性位,被动错误发送隐性位。

alt text

数据域

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

alt text

CRC

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

alt text

ACK

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

alt text

帧结尾

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