随着总线技术在汽车电子领域越来越广泛和深入的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度和数据传输速率的要求也越来也高,传统CAN(1MBit/s,8Bytes Payload)已难以满足日益增加的需求。因此在2012年,Bosch发布了新的CAN FD标准(CAN with Flexible Data Rate),CAN FD继承了CAN的绝大多数特性,如同样的物理层,双线串行通信协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制等,同时CAN FD弥补了CAN在总线带宽和数据长方面的不足。
下文将对CAN FD和CAN总线进行对比,并做相关介绍。
1、什么是CAN FD?
CAN FD协议是由Bosch以及行业专家预研开发的,并于2012年发布。通过标准化对其进行了改进,现已纳入ISO 11898-1:2015。一开始的Bosch CAN FD版本(非ISO CAN FD)与ISO CAN FD是不兼容。
CAN FD具有以下4个主要优点:
(1)增加了数据的长度
CAN FD每个数据帧最多支持64个数据字节,而传统CAN最多支持8个数据字节。这减少了协议开销,并提高了协议效率。
(2)增加传输的速度
CAN FD支持双比特率:与传统CAN一样,标称(仲裁)比特率限制为1 Mbit/s,而数据比特率则取决于网络拓扑/收发器。实际上,可以实现高达5 Mbit/s的数据比特率。
(3)更好的可靠性
CAN FD使用改进的循环冗余校验(CRC)和“受保护的填充位计数器”,从而降低了未被检测到的错误的风险。这在汽车和工业自动化等安全攸关的应用中至关重要。
(4)平滑过渡
在一些特定的情况下CAN FD能用在仅使用传统CAN的ECU上,这样就可以逐步引入CAN FD节点,从而为OEM简化程序和降低成本。
实际上,与传统CAN相比,CAN FD可以将网络带宽提高3到8倍,从而为数据的增长提供了一种简单的解决方案。
2、CAN FD和CAN总线协议帧差异
CAN FD和CAN总线协议帧格式如下所示:
CAN FD和CAN总线协议帧不同点如下所示:
(1)传输速率不同
CAN FD的速率可变,从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,最高速率可达到8Mbps,其他部分与CAN相同。
(2)数据长度不同
CAN FD支持的最大数据长度为64byte,CAN支持的最大数据长度为8byte。
(3)帧格式不同
CAN FD新增了FDF、BRS、ESI位:
FDF位(Flexible Data Rate Format):原CAN数据帧中的保留位r。表示CAN报文还是CAN-FD报文,FDF位常为隐性(1),表示CAN FD报文;
BRS位(Bit Rate Switch):表示位速率转换,当BRS为显性位(0)时数据段的位速率与仲裁段的位速率一致(恒定速率),当BRS为隐性位(1)时速率可变(即BSR到CRC使用转换速率传输);
ESI位(Error State Indicator):发送节点错误状态指示,主动错误时发送显性位(0),被动错误时发送隐性位(1)。
(4)ID长度不同
CAN FD标准帧ID长度可扩展至12bit,CAN的标准帧ID为11bit。
3、CAN FD帧结构
CAN FD节点可以正常收、发CAN报文,但CAN节点不能正确收、发CAN FD报文,因为其帧格式不一致。
与CAN一样,CAN FD一共具有:帧起始,仲裁域,控制域,数据域,CRC,ACK和帧结束,共7部分组成。
3.1帧起始
CAN与CANFD使用相同的SOF标志位来标志报文的起始。帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步作用。
3.2仲裁域
与CAN不同,CAN FD取消了对远程帧的支持,用RRS位替换了RTR位,为常显性。IDE用于区分标准帧和扩展帧。
3.3控制域
CAN FD与CAN有着相同的IDE、res和DLC位,同时增加了FDF、BRS、ESI三个bit位,如上所述。
3.4数据域
CAN FD兼容CAN的数据格式,同时最大还能支持:12、16、20、24、32、48和64byte。
像在传统CAN中一样,CAN FD DLC是4位,表示帧中数据字节的数量。为了维持4位DLC,CAN FD使用从9到15的其余7个值来表示所使用的数据字节数(12、16、20、24、32、48、64)。
3.5 CRC
传统CAN中的循环冗余校验(CRC)为15位,而在CAN FD中为17位(最多16个数据字节)或21位(20-64个数据字节)。在传统CAN中,CRC中可以包含0到3个填充位,而在CAN FD中,总是有四个固定填充位以提高通信可靠性。
3.6 ACK
ACK紧跟着CRC结束标识位。不同的是,CAN FD支持2bits的ACK的识别。
3.7帧结束
与CAN一样,CAN FD的帧结尾也为连续7位的隐性位。