李成笔记网

专注域名、站长SEO知识分享与实战技巧

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协议。

我们知道“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中没有远程帧,如下图所示:

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

其中:

①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数据域如下图中蓝色部分:

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限定符,节点收到该值后会从数据相的速率切换到仲裁相的速率。

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

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

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

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

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

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

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

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

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

CAN通信技术文章归档 | 北岛夜话

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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言