通过之前对CAN总线的学习,我们已了解到CAN总线的波特率最大为1Mbit/s,有效数据域最大为8个字节,编码方式,帧结构也有一定的格式和局限。而今天的CAN FD在保持着原来CAN的优良特性的前提下,已大大突破了以上的局限,波特率可达到15Mbit/s,有效数据域达到64个字节,编码方式和帧结构也采用了新的格式和CRC算法。下面让我们来一一了解。 在传统CAN中,一帧报文中各个位的传输速率都是一致的,即为50kbit/s至1Mbit/s。而在CAN FD中,一帧报文中数据段的波特率是可变的,且理论上最高可达15Mbit/s,具体是从控制场的BRS位到ACK场之前(含CRC分界符)这一段的波特率可变,其余部分仍使用原来的CAN速率,如下图所示。
在传统CAN中,一数据帧报文中数据域为0~8个字节,即一帧报文中,传输的有效数据最多为8个字节。而在CAN FD中,有效数据域已经扩展到64个字节,大大提高了一帧报文中有效数据所占的比例,所以说,CAN FD的使用更加的灵活,快速,可靠。CAN与CAN FD的数据帧格式如下图。
在传统CAN中,由于填充位规则对CRC的干扰,导致错帧漏检率无法达到设计的要求。而在CAN FD中,CRC算法得到了修改,即CRC以含填充位的位流进行计算。在校验和部分,为了避免连续位超过6个,确定在第一位及以后每4位添加一个填充位加以分割,这个填充位上的值是上一位的反码。作为格式检查,如果填充位不是上一位的反码,就作出错处理。
由于数据域长度有很大的变化区间,所以需要根据DLC的大小应用不同的CRC生成多项式。CRC field如下图。
CAN FD数据帧在控制场中添加了EDL位,BRS位,ESI位,用于区分CAN报文与CAN FD报文,并确定是否转换为可变速度等。相比于ISO 11898-1的线性编码方式,CAN FD的DLC编码方式是以阶梯式的向上增加,而非逐一向上的非线性编码,如下图。
CAN FD采用了新的帧结构,其数据帧在控制场中添加了EDL位,BRS位,ESI位,用于区分CAN报文与CAN FD报文,并确定是否转换为可变速度等。相比于ISO 11898-1的线性编码方式,CAN FD的DLC编码方式是以阶梯式的向上增加,而非逐一向上的非线性编码。
如下图所示是CAN与CAN FD的帧结构。
从帧结构中可以看到,CAN FD的控制场(Control field)比CAN的多了3个Bit,CRC场多了2/6个bit。下面分别对帧起始(SOF),仲裁域(Arbitration field),控制场(Control field),数据域(Data field),循环冗余校验(CRC field),应答域(ACK field)和结束段(EOF)进行一一讲解。
帧起始(SOF),用来指示一个数据帧的开始,占1个bit,用于CAN FD网络中节点设备的硬同步,且出现在隐性至显性的脉冲下降沿,与CAN类似。
仲裁域(Arbitration field),由11位的标识符和一个保留位构成,用于表示确定的待传输消息,其数值也作为待传输消息的优先级。注意:同一个网络中,不允许出现有两个节点同时发送具有相同标识符但却包括不同数据内容的帧。
控制场(Control field),由9位组成,包括IDE,EDL,r0,BRS,ESI以及4位DLC(数据长度代码)。可以发现,CAN FD的控制场相对CAN的多了EDL位,BRS位和ESI位。这三个位的作用如下: EDL位(Extend Data Length):原CAN数据帧中的保留位r。
< 隐性:表示CAN FD报文(采用新的DLC编码和CRC算法)
< 显性:表示CAN报文
BRS位(Bit Rate Switch):
< 隐性:表示转换为可变速率
< 显性:表示不转换为可变速率
ESI位(Error State Indicator):
< 隐性:表示发送节点处于被动错误状态(Error Passive)
< 显性:表示发送节点处于主动错误状态(Error Active)
四位的DLC表示此帧在数据段中传输字节数,当DLC小于或等于8时,采用ISO 11898-1的线性编码方式,当DLC大于8时,采用阶梯式向上递增,而逐一向上的非线性编码方式,如下图所示。
数据域(Data field),由0~64位组成,且全部均为有效数据字节。通常,数据段的传输都是从第一个字节开始,并且是从每一个字节的最高有效位开始。
循环冗余校验(CRC field),跟在数据域之后,由17位或21位CRC序列和1位CRC界定符组成。接收器可以利用CRC序列来识别是否接收了错误的数据。
应答域(ACK),由1个应答间隙位和1个应答界定符位组成。发送节点在ACK处发两个隐性电平(1),而接收节点在ACK窗口开始时发一个显性电平(0)认可,为了容许速差转换造成可能的错误,收到2个重叠的0也是合法的,ACK之后有一位1作为ACK分界符。 结束段(EOF),表示帧的结束,由7个隐性电平的位组成。在传输EOF段的过程中,网络的各个接收器还有最后一次发出错误帧的机会。 EOF段之后还必须插入一个帧间空间(IFS),IFS之后才能开始传输下一个帧。IFS由3个隐性电平位组成,且不属于前一条帧的组成单元。在IFS空间,网络中的发送器可以发送过载帧,以增加IFS的时间,延迟其他节点发送下一个帧。
微信号:hongkeqiche
了解更多请戳www.hongkeqiche.com