CAN总线详解(四)CANFD报文结构
一、CANFD简介
传统CAN网络中,每个CAN报文最多能够携带8个字节数据,CAN总线最大支持1Mbit/s的通信速率,很难满足高速率、高效率数据传输的需求。
CANFD能支持更高的传输速率,采用的是可变速率传输,可以将CANFD报文分为两个部分,仲裁段和数据段,在仲裁段,CAN总线上可能会存在多个发送节点,会使用较低的通信速率,而数据段则结束了仲裁过程,总线上只有一个节点在发送数据,传输速率可以切换到一个更高的值,CANFD最大可支持8Mbit/s的通信速率
第二个改善是CANFD数据场的扩充,传统数据场最多8个字节,而CANFD报文的数据场长度最大可达到64个字节,此外,基于CANFD的ECU相对于传统CAN的ECU,在硬件方面的改动较小,首先CANFD沿用改动较小的CAN的物理层,同样使用双绞线通信,物理电平与数字信号的转换与传统高速CAN的物理层是一致的,如果原先的CAN的收发器,它能够支持较高速率通信的话,就不需要进行更换,而CANFD在协议层面与传统的CAN有所变动,这是需要使用能够支持FD报文解析的新的CAN的控制器

二、CANFD报文类型
CANFD报文的类型,在传统的CAN协议中,CAN报文的内容有四种类型,CAN标准帧、CAN远程帧、CAN扩展帧以及CAN扩展远程帧,而CANFD设计的初衷就是通过更大的数据场来提高数据传输的效率,因此在FD中取消了远程帧这种数据类型,只有两个格式,CANFD标准帧以及CANFD扩展帧,CANFD标准帧的特点是ID是11位,数据场长度是0-64个字节,CANFD扩展帧相对于其标准帧来说,将11位的ID扩展为29位,数据场的长度依然是0-64个字节

三、CANFD帧结构
CANFD的帧结构在CAN协议帧结构的基础上增加了几个标志位,以及为了完善协议,作了一些改动

因为CANFD是不存在远程帧这种报文格式的,原先CAN报文中用于区别远程帧和标准帧的RTR位,在CANFD报文中则成为了一个保留位,就是RRS远程请求替代位,默认值是0,CANFD报文增加了一个用来区别传统CAN报文以及CANFD报文的标志位FDF位,这一位的值等于0时,表示它是一个传统CAN报文,当这一位的值等于1时,表示它是一个CANFD报文。

在CANFD中同样是有扩展帧这种报文类型的,因此它和传统的CAN一样,使用IDE扩展符标志位来区别标准帧和扩展帧。IDE=0时,表示CANFD标准格式报文,这一位的值等于1时,则表示CANFD扩展帧报文,CANFD扩展帧与传统CAN报文扩展帧的结构是类似的,扩展帧中29位的报文ID分为两个部分,高11位的ID与低18位的ID将会分开传输。

CANFD中增加的第二个标志位是BRS位速率切换位,CANFD通信速率并不是一直维持着较高水平,CANFD通信采用的是可变速率,表示在FD报文的数据段,可以选择较高的速率传输,也可以选择和仲裁段速率相同,当BRS=0时,表示CANFD报文的传输保持一个恒定的速度,不进行传输速度的切换,当BRS=1时,则表示在报文的数据段,比特率会切换到第二种较高的值。

CANFD增加的第三个标志位是ESI错误状态指示位,在传统的CAN报文中,发送节点的错误状态只有这个节点本身知道,而FD通信中发送节点可以通过发送报文中ESI这个标志位来告知其余的接收节点,它当前的错误状态,当ESI这一位的值等于1时,表示发送节点处于被动错误状态,当这一位的值等于0,表示发送节点处于主动错误状态。

CANFD报文和传统的CAN报文都使用4个位长度的DLC来标志其数据场长度,当数据场长度在0-8个字节时,采用的是线性的表示方式,DLC取值是多少,就表示数据场有多少个字节的数据,当数据场长度大于8个字节时,DLC则采用的是非线性的表示方式,DLC取值为9~15时,分别表示CANFD数据场长度为12到64之间一些离散取值的长度。

CANFD相对于传统CAN的较大改变是CRC场的优化,FD报文中CRC场的长度和校验内容与传统CAN是不相同的,首先,由于CANFD报文中数据场的长度有很大的变化区间,CANFD会根据数据场长度的变化而使用不同的CRC校验公式,当数据场长度小于16个字节时,会使用17位的CRC进行校验,当数据场长度大于16个字节时,会使用21位的CRC进行校验,此外,CANFD的CRC校验还会将动态填充位计算在内,而传统的CAN CRC计算是不包含填充位的。

CANFD相对于传统的CAN在位填充机制上有所改动,CRC场之前和CRC场的位填充方式是不相同的,从SOF开始到数据场的最后一位,CANFD位填充的规则与传统的CAN是一致的,都是遵循每5个相同的位之后填充一个相反位,而CRC场的位填充则采用的是固定位置的位填充方式。CANFD在CRC场的前面增加了4个位,对前面的填充位进行技术校验,这四个位称为Stuff Bit Counter填充位计数,CANFD会统计从SOF开始到数据场结束这一段填充位的个数,将统计的数目进行摩拜运算,结果会以格林编码的形式存放在Stuff Bit Counter高三位中,最后一位则是偶校验位,用于对前面的三位进行校验

刚才提到,CANFD的CRC场使用的是固定位置的位填充机制,这个机制是这样的,首先在Stuff Bit Counter第一位之前增加一个填充位,该位的取值与前一位的数值相反,之后每隔4个位增加一个填充位,每一个填充位都取前一位的相反值,那么在CANFD报文中,17位的CRC校验就增加了6个固定位置的填充位,21位的CRC就增加了7个填充位

三、CANFD示波器波形
