最近这几年大家听到CANFD的概念应该是越来越多了,其原因就是有越来越多的车辆的总线通讯开始使用CAND,那么为什么要使用CANFD呢?
这就要从CANFD出现的原因说起了,在BOSCH所提供的CANFD协议的一开始就说明了这一点,目前的很多应用对于通讯的数据量要求也越来越高,对于通讯的速率要求越来越高,尤其是当速率高于1MBit/s的时候,传统的CAN通讯是无法满足的,所以基于这种应用的需求,CANFD就应运而生了。既然是出于这样的目的,那我们可以很容易的猜到,CANFD肯定是需要解决传输速率和传输字节的问题,带着这样的猜想我们就可以很容易的理解CANFD协议了。
本文是基于之前已经了解CAN通讯的基础的情况下开展的,如果不了解基础的CAN通讯可以参考之前发布的文章
首先从名称上来说,CANFD是 CAN Flexiable Data的简写,也就是说CANFD应该具有可变数据长度的能力,顺着这个方向我们来看一下CANFD协议是如何可变数据长度的。
想要搞清楚这个问题,那我们就需要从帧结构的变化入手,以标准帧为例,来看一下在规范中定义的CANFD和CAN之间的区别,如下:
?
通过对比可以发现,除了远程帧位被保留位替代之外,在CANFD增加了三个位:EDL, BRS, ESI。
这三个为分别代表什么意思呢?看一下他们的全称大家就明白了
EDL: Extened Data Length
BRS: Bit Rate Switch
ESI: Error State Indicator
这三个位是只存在于CANFD格式当中的,其它的位定义和标准CAN是一样的,需要说明的一点是DLC依然还是4bits的长度,这个会涉及到另外一个知识点。
那么,很显然,想要扩展数据长度肯定就和EDL位有关了,正如CANFD规范里所说,这个位是用来区分CAN格式和CANFD格式的,如果这个位定义了,那这就是CANFD的格式,如果这个位被显性的r0位取代了,就是标准的CAN格式。当定义为CANFD时,数据字节长度可以最长到64.
接下来又有一个问题,如果EDL位定义了,DLC的长度只有4bit,如何支持64的字节长度呢?
大家也许看到过这样一句话,在DLC小于等于8 时与原CAN总线是一样的,大于8时有一个非线性的增长,关键点就在于这个非线性增长,在标准CAN的定义里,长度的定义如下:
?
对于这一部分来说,CANFD和CAN是完全一样的,长度可以定义为0-8的任意长度,但是当字节长度大于等于8的时候就不是每个长度都可以被定义了,只有几个特定的长度可以被定义,如下规范中定义:
?
这就是所谓的非线性增长,所以DLC的长度只有4bits
同样,对扩展帧格式的CAN和CANFD来说,依然是主要有这三个位的差异,如下图所示
?
远程帧位被保留位替代之外,在CANFD增加了三个位:EDL, BRS, ESI
通过这个格式的变化,其实我们还可以看出CANFD和CAN的另外一个小的区别,在CANFD中不再支持远程帧。
上面的内容我们说了可变字节长度的问题,接下来我们看第二个问题,可变速率,正如一开始提出的问题一样,CANFD需要解决的第二个问题就是通讯速率的问题,而通过前一章节帧格式的对比中也看到,CANFD中新增了BRS位,这个位所起到的作用是确定在CANFD格式中是否需要切换通讯速率。
那么通讯速率为什么要切换呢?这就要涉及到CANFD和CAN的兼容性问题了,大家想一下,如果想要保证两者之间兼容,肯定要保持通讯速率的一致,不然的话就如鸡同鸭讲,谁也不知道对方讲的是啥,所以呢,这就要求CANFD在仲裁段继续保持和CAN一样的速率,然后自己可以定义一个更快的数据段速率,在数据段中最高可以支持5MBit/s,因此才需要进行速率的切换。
针对这个兼容性问题,我们可以再稍微理解一下,当CANFD的数据段速率高于CAN所能支持的最高速率的时候,CAN肯定是无法理解CANFD所要表达的信息了,那么这个时候CANFD和CAN还能分配在同一条总线吗?
CANFD相比于CAN解决了两个大的问题,第一,数据长度问题;第二,传输速率问题。在解决这两个问题的同时,也带来了一些其它的变化,比如数据长度变了,那么CRC是否需要变呢,很显然是需要的,所以在CANFD中,CRC存在多个不同的形态:?CRC-15, CRC-17,?CRC-21.
CRC-15很显然是和标准的CAN通讯是一样的,这个主要是针对字节长度小于等于8个字节的情况;
CRC-17是CANFD所特有的,一般用于字节长度小于16的情况;
CRC-21也是CANFD所特有的,一般用于字节长度大于16的情况;
对于CAN通讯的选择,规范给出了如下的推荐:
?
CANFD的应用越来越多,起因于车辆上需要的通讯数据越来越多,原有的CAN负载率逐年升高,但是原有的CAN通讯的架构已经非常的庞大,如果全部推翻更换一个全新的通讯方式所要付出的代价实在是太大,所以CANFD不失为一个比较好的折中方案,既能兼容原有的CAN通讯,又不至于增加太高的成本,同时还可以大大提高数据的传输量。