
本文主要介绍CAN-FD及其与传统CAN的区别。
2011年春,应OEM厂商要求,BOSCH开展CAN-FD项目;
2012年,BOSCH在第13届iCC大会上正式发布CAN FD;首个非国际标准CAN FD系统在iCC大会展示;
2012年,正式向国际标准委员会提出国际标准授权申请(CAN FD);计划向国际标准委员会提交申请(CAN FD的一致性测试);
2013年,非ISO标准的CAN-FD在FPGA上运行;
2014年,第一款嵌入了非国际标准 CAN-FD模块的微控制器发布;
2014年,CAN FD进行改进(CRC部分);
2015年,提交ISO 11898-1,等待决议;
2015年06月30日,国际标准化组织(ISO)正式认可CAN-FD并通过ISO 11898-1作为国际标准草案(Draft International Standard,简写DIS)。该文件明确区分了传统CAN和CAN-FD协议。
2015年底,发布ISO 16845-1:2015(CAN FD一体化测试)。
2016年,ISO 15765-2标准化的ISO传输协议(TP)发布。CiA 1301 1.0.0版支持CAN FD。
2017年9月,CANopen FD规范发布。CANopen设备规范和应用规范也在审核中。CiA的兴趣组(IG)商用车开发了一个基于J1939的应用层协议(CiA 602系列),描述了从符合J1939-21的消息到CAN FD数据帧最高64字节的映射。
CAN FD帧由7个不同的位场组成,帧起始(SOF)、仲裁场、控制场、数据场、CRC校验场、ACK应答场、和帧结尾(EOF),相比于传统的CAN,CAN-FD的主要变化在于:
仲裁场部分,CAN FD中使用的RRS位,而CAN中使用的是RTR位。
控制场部分,CAN FD在控制场中新添加了FDF位、BRS位、ESI位。同时对DLC进行了扩充,使得数据场最大可达64字节。
FDF:表示CAN报文还是CAN-FD报文。
BRS:表示位速率转换,该位隐性时,速率可变(即BSR到CRC使用转换速率传输),该位为显性时,以正常的CAN-FD总线速率传输(恒定速率)。
ESI:表示发送节点状态。
CRC校验场主要有以下五点发生了变化:
添加Stuff Count
CRC的计算方法
CRC的位长度
位填充规则
接收端CRC界定符的允许位时间
仲裁场
控制场
与传统CAN相比,CAN FD在控制场中新添加了FDF位、BRS位、ESI位。与CAN相同,IDE位表示扩展帧标志,res位为预留位。
FDF位(FD Format Indicator):FDF位在CAN的数据帧中为显性(0),在CAN FD的帧中常为隐性(1),表示CAN FD报文;
BRS位(Bit Rate Switch):位速率转换开关。当BRS为隐形位(1)时,表示转换可变速率,即发送节点在BRS位的采样点,将会切换到高速传输的时钟模式,其他接收节点也必须转换位时钟模式。在CRC界定符的采样点,所有节点的波特率将会再切换回仲裁场的波特率。也就是说,所有CAN FD节点都有两种类型的波特率。
ESI(Error State Indicator):错误状态指示。ESI是指示发送节点的错误状态的标志,当发送节点的错误状态是激活时,发送隐性位(1),如果错误状态未激活时,发送显性位(0)。通过ESI位,所有节点都可以确认当前的传输节点的错误状态。而在CAN帧中,无法得知其传输节点的错误状态。
数据长度编码(DLC: Data Length Code):DLC表示传输了多少字节的数据。CAN和CAN FD都具有4位配置。CAN FD对有效数据场长度作了很大的扩充,数据场最大可达64字节。数据长度可以从0到8,12,16,20,24,32,48,64字节中选择。而CAN只有0到8个字节。DLC与数据长度之间的关系如下表所示。不能指定除此处描述之外的数据长度,例如14字节或50字节等。
数据场
传输速率更快
CAN FD采用了两种位速率,仲裁段和数据控制段使用标准的通信波特率,而传输数据段时会切换到更高的通信波特率。数据传输率可达到10Mbit/s,甚至更高。
与传统CAN一样,数据场由数据帧里的发送数据组成,在数据场中设置发送数据。首先发送最高有效位(MSB)。
有效数据场更长
相对于传统CAN报文有效数据场的8 字节,CAN FD对有效数据场长度作了很大的扩充,数据场长度最大可达到64bytes,当数据长度码DLC小于等于8时与原CAN总线一致,大于8时为非线性增长,大大提高帧报文中的有效数据,意味着CAN FD具有更高有效传输负载。如原本对于PEPS模块的身份认证上,原本需要多条CAN报文进行校验,现在只需一条长帧报文即可完成。

CRC校验场
在传统的CAN系统中,使用位填充的方式来保持通信同步。但这种方式会造成对CRC的干扰,导致错帧漏检。
CAN FD为此在CRC算法上进行了优化与修改,添加了新的Stuff Count,CRC也有了17位和21位。将填充位加入到差错校验码中进行计算,也就是CRC以包含了填充位位流进行计算。确定从第一个填充位开始,序列中每4位就插入一个填充位用以分割,且该填充位就是上一位的反码。当进行格式检查时,若填充位不是上一位的反码,就及时报错处理。而针对不同的数据场长度值,在DLC大于8个字节时,CAN FD会选择两种新BCH型CRC多项式。
