北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章538 浏览8447619

CAN通信技术连载(6)--CAN FD协议

经典CAN总线(CAN 2.0A/B)在汽车、轨道交通、自动化、医疗等行业有广泛的应用。但是随着时间的推移,人们发现它(尤其在汽车领域)存在两方面的问题:

①总线的负载率越来越高。总线负载率是总线实际发送数据与总线容量的比值。比如假设CAN总线的波特率为500k bps,也就意味着当前总线每秒钟最多传输500,000个位数据,这称为总线容量。如果实际上每秒传输了475,000个位,则总线负载率达到95%。如果达到了较高的负载率,则只能通过提高总线波特率的方式使其降低。但经典CAN总线的最高波特率为1M bps。

②数据载荷较低。数据载荷是指实际要传输的原始数据。在网络传输中,为了保证数据传输的完整性和准确性,往往要在原始数据之外加上校验、地址等信息,好像给原始数据增加了一层或多层“外套”。经典CAN总线的每个数据帧最多可传输8字节数据,其它的仲裁域、控制域及校验域等占用不少数据位。与其它协议(比如UDP协议)相比,每帧的数据载荷较低。

基于以上问题,博世公司于2012年推出了CAN FD协议,并在2015年正式成为国际标准ISO 11898-1。今天这篇文章,我们就来介绍下CAN FD协议。

cover.png

我们知道“CAN”是“Controller Area Network”的缩写,即“控制器局域网络”。而CAN FD是“CAN with Flexible Data-Rate”的缩写,即“具有可变数据速率的CAN”。CAN FD协议具有如下一些特点:

①“数据速率可变”是指CAN FD的数据帧中,其数据相(包括控制域的一部分、数据域和校验域,后文详述)的传输速率可以不同于仲裁相。在经典CAN的数据帧中,各部分(比如仲裁域、控制域、数据域、校验域等)都采用相同的传输速率。而CAN FD中,可以采用两种不同的传输速率,并且传输速率比经典CAN有很大的提高,数据相部分最大支持5Mbps的波特率。

②与经典CAN类似,CAN FD也包括数据帧、错误帧和过载帧,但取消了远程帧。数据载荷提高,每个数据帧最多可发送64字节的原始数据。

③物理层与经典CAN相同,但是数据链路层(数据帧的定义,校验的计算方法)不同。因此经典CAN节点不能接收CAN FD报文,但CAN FD节点可以接收和发送经典CAN报文。

下面我们来详细介绍下CAN FD的数据帧。

1、帧起始:与经典CAN类似,CAN FD数据帧的第1位也是“SOF(Start Of Frame,帧起始)”,显性电平(逻辑0)。

2、仲裁域:与经典CAN类似,不过将“RTR”位替换为“RRS”位。RRS是英文“Remote Request Substitution(远程请求替换)”的缩写,该位替代了远程帧请求位,并且在CAN FD中永远保持显性(逻辑0)。这就意味着CAN FD中没有远程帧,如下图所示:

仲裁域.png

3、控制域:保留了经典CAN的IDE/r1、r0和DLC,增加了FDF、BRS和ESI三个位,如下图中的绿色部分:

控制域.png

其中:

①IDE(Identifier Extension):扩展帧标识。当该位为隐性(逻辑1)时表示扩展帧,显性(逻辑0)表示标准帧。

②FDF(FD Format Indicator):FD帧标识。当该位为隐性(逻辑1)时表示CAN FD帧,显性(逻辑0)表示经典CAN帧。

③res:保留位。

④BRS(Bit Rate Switch):位速率切换位。当该位为隐性(逻辑1)时仲裁相和数据相使用不同的传输速率。

⑤ESI(Error State Indicator):错误状态标识。当该位为隐性(逻辑1)时表示发生错误。

⑥DLC(Data Length Code):数据长度编码,共有4位,用来表示数据的实际长度(字节)。DLC0是DLC的第0位,DLC3是其第3位。四位二进制数最大可以表示的数值为15。因此,对于经典CAN数据长度最大8字节来说,数据长度编码可以顺序编号,如下面的表格所示:

经典CAN数据长度编码(DLC)定义
DLC3
DLC2
DLC1
DLC0
数据长度(字节数)
0
0
0
0
0
0
0
0
1
1
0
0
1
0
2
0
0
1
1
3
0
1
0
0
4
0
1
0
1
5
0
1
1
0
6
0
1
1
1
7
1
0
0
0
8

但是CAN FD希望能最大传输64字节的数据,这样数据编码就不能采用顺序增长的方式,必须进行定义。为了与经典CAN兼容,8字节以前的数据是相同,以后的编码采用下面的定义:

CAN FD数据长度编码(DLC)定义
DLC3
DLC2
DLC1
DLC0
数据长度(字节数)
1
0
0
0
8
1
0
0
1
12
1
0
1
0
16
1
0
1
1
20
1
1
0
0
24
1
1
0
1
32
1
1
1
0
48
1
1
1
1
64

经典CAN和CAN FD数据域如下图中蓝色部分:

数据域.png

4、数据域:上图中的蓝色部分。

5、校验域:经典CAN和CAN FD都采用循环冗余校验(CRC),不同的是前者采用15位CRC校验,而后者采用17位或21位CRC校验。具体来说当数据长度小于等于16字节时,采用17位CRC校验。当数据长度大于16字节时,采用21位CRC校验。

CAN FD的校验域包括:填充计数、CRC校验值和CRC限定符。

①填充计数(Stuff Count):由4个位组成,其中前3个位是帧中动态填充的位的数量对8取模的值(除以8的余数)再转换成格雷码,最后一个是前三位的校验(偶校验)。

②校验值:17位或21位CRC校验值。

③CRC限定符:1位(最多2位)隐性电平(逻辑1)。当CRC值发送完成后会接着发送一位CRC限定符,节点收到该值后会从数据相的速率切换到仲裁相的速率。

下图中的蓝色部分是校验域:

校验域.png

6、确认域:1个隐性位(逻辑1)。CAN FD多可识别两个位时间的确认信号,见下图中黄色部分。

7、帧结束:7个隐性信号(逻辑1),表示帧的结束,见下图中红色部分。

确认域和帧结束.png

在CAN FD数据帧中,可以有两种不同的传输速率,我们把使用基本传输速率的部分称为“仲裁相(Arbitration Phase)”,可切换成更高传输速率的部分称为“数据相(Data Phase)”。

CAN FD标准帧仲裁相和数据相区别如下图所示:

CAN FD标准帧.png

CAN FD扩展帧仲裁相和数据相区别如下图所示:

CAN FD扩展帧.png

需要说明的是:虽然数据相可以使用更高的传输速率,但不是必须的。也就是说,仲裁相和数据相也可以采用相同的传输速率。

好了,关于CAN FD协议就先介绍到这里。

下面是【CAN通信技术】的文章归档链接:

》》CAN通信文章归档《《

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论