​By Toradex胡珊逢

CAN 总线在工业、汽车行业具有非常广泛的应用,为网络中设备之间点对点通信提供一种可靠、稳定、经济的方案。伴随网络中设备节点的增加,由于 1Mbps 速率和最长数据 8 字节的限制,通信效率和总线占用问题变得愈发突出。而 CAN FD 正是为了应对这种挑战而出现。文章接下来将介绍 CAN FD 的一些新特点以及使用注意事项,最后将使用 Toradex Apalis iMX8QM 和 Verdin iMX8M Mini 计算机模块简单演示 CAN FD 使用。

相比于传统 CAN 协议,CAN FD 最大的两个特点是采用可变速率和单帧最长 64 字节数据,另外包括控制位和 CRC 校验的变化。

图 1:传统 CAN 和 CAN FD 帧

控制位的首位由传统 CAN 的 RTR 变为 CAN FD 的 RRS,该位始终是显性(0)。第三个控制位在传统 CAN 中属于保留功能,在 CAN FD 位 FDF,位隐性(1)。FDF 位 1 时表示该帧是 CAN FD 格式。在 CAN FD 中紧随 FDF 还是一个保留功能,用于将来的扩展。BRS(Bit Rate Switch)位允许 CAN FD 帧以不同的速率进行传输。如果 BRS 为显性(0)则该帧采用和仲裁阶段(Arbitration Phase)同样的速率进行传输,既速率不发生变化。当 BRS 为隐性(1),该帧接下来的部分将以较高的速率传输。这里需要注意,并不是整个 CAN FD 帧都用高速率传输,如下图,Data Phase 从 BRS 后的 ESI 位开始到 CRC Delimiter 位结束,该阶段的数据会以较高的速率传输。

图 2: CAN FD 帧结构

ESI(Error Status Indicator)通常为显性(0)。当发送方遇到通讯异常后会将其置为隐性(1)。DLC 表示该帧中实际数据长度,为了于传统 CAN 兼容,DLC 仍然采用 4bit。当数据长度小于 8 字节时,DLC 位的数值可以直接表示数据长度,但超过 8 字节时,由于 4 个位最高只能表示 15,为了支持 CAN FD 最长 64 字节数据,这里采用了折中的表示方法。当数据不超过 8 个字节时,DLC 仍直接表示数据长度。当超过 8 个字节,只支持 12 到 64 中部分长度的数据包,而非全部的 9 到 64 任一长度。如下表所示,当 DLC 为 9 时,CAN FD 数据长度为 12 字节,DLC 为 12 时,数据长度是 24 字节。

DLC 和数据长度对应关系

DLC

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

数据长度

0

1

2

3

4

5

6

7

8

12

16

20

24

32

48

64

在实际应用中最好选择上面的其中一种长度,避免通讯效率降低。如果小于某一种长度,则需要对数据进行填充,可以用 0xCC 和 0x55 作为填充字节,这样能够在总线上产生足够的波形翻转从而使 CAN 节点保持同步。

在 CAN FD 中根据数据长度会采用不同的 CRC 校验方案,当小于等于 16 字节是为 CRC-17,当数据大于 16 字节后则采用 CRC-21。CRC Delimiter 之后的格式 CAN FD 和传统 CAN 仍保持一致。

CAN FD 虽然具有更长的数据包以及更快的传输速度,但是由于引入了更多的位到帧中,帧的开销也会增加。以同样发送 1字节数据包为例,传统 CAN 2.0 标准帧和 CAN FD 标准帧具体组成如上方图 1 所示。传统 CAN 2.0 标准帧总共位 54 bit,CAN FD 为 70 bit。CAN FD 需要多消耗 16 bit 来传送同样的数据。如果 CAN FD 不采用更高的可变速率这就意味着同样的帧,CAN FD 反而会要更长的传输时间。当 CAN FD 采用可变速率,那么情况将会变得不一样。假设 CAN FD 的仲裁速率是 500 Kbps,和传统 CAN 的速率一致,而可变的数据传输速率提高 8 倍到 4 Mbps。传统 CAN 耗时为 54 bit/ 500 Kbps = 108 us。CAN FD 中 4 Mbps 的速率只用于传输从 ESI 位开始到 CRC Delimiter 位之间的数据,所以 CAN FD 耗时为 29 bit/500 Kbps + 41 bit/4 Mbps = 68 us。这里我们看到,在提高数据传输速率情况下, CAN FD 即使有更多的帧开销,帧传输时间还是减少了 40 us。更高的传输速度有利于发送节点更快得完成帧发送,减少 CAN 总线占用时间,这对越长数据的帧会更加明显,对 CAN 网络的实时性来讲是一个优势。

然而提高传输速率不仅仅是在使用的时候设置一个参数,更重要的是保障 CAN 总线物理链路层的质量。可以使用示波器观察总线上信号的质量。如果信号陡峭且清晰,可以尝试将数据传输速率提高到仲裁速率的 2 到 4 倍。测量点需要遍布总线上多个位置,信号在不同位置会有所差异。线路阻抗的一致性对信号质量至关重要。通常在总线交叉点的线缆没有发生物理尺寸变化,并采用具有相同介电常数的隔离器,阻抗会保持不变。这可以参考以太网和 USB 中使用的专门的连接器。当 CAN FD 采用较高的传输速率时,每处线路分叉,每个连接器都可能会影响阻抗,从而引起信号反射。这些反射信号的能量最终可以影响 CAN 帧每个比特位边缘的抖动。

CAN FD 最长 64 字节的数据包使用在实际应用中也需要注意。更长的帧不可避免在传输的时候会占用总线更多的时间,而这期间其他 CAN 节点则无法发送数据。对于实时性需求不高的场合,如通过 CAN 总线升级固件,长帧能够以更小的开销完成传输。而对实时性有要求的场合,对长帧的使用需要有一定的限制。对于 8 字节以下的帧, CAN FD 更高的数据传输速率可以有效降低总线占用时间,前提是物理链路层能够满足高速传输的要求。

对于应用开发 CAN FD 的使用是非常简单的。CAN FD 是可以兼容传统 CAN,这意味着原先基于传统 CAN 通信的代码可以直接运行在支持 CAN FD的设备上,但不使用任何 CAN FD 的新功能。如果需要使用 CAN FD 的可变数据速率或者超过 8 字节数据的帧,那么代码也只需做简单的修改。我们以 Linux 中 SocketCAN 为例,使用 can-utils 代码进行说明。在 cansend.c 和 candump.c 中采用 canfd_frame 结构体来存放需要发送和接收的 CAN 数据。CANFD_MAX_DLEN 为 64,对应 CAN FD 最长的 64 字节。

然后将 can socket 设置 CAN FD 格式,使用 setsockopt() 函数,设置 CAN_RAW_FD_FRAMES 参数即可。

在发送时将 struct canfd_frame frame 结构体中 len 长度参数设置 CAN FD 定义几种长度。

剩余代码中的操作可以沿用传统 CAN 模式下的方法。最后用下面命令配置 CAN 设备。这里仲裁速率为 500Kbps,CAN FD 可变数据速率为1Mbps,在结尾添加 fd on 参数启用 CAN FD。

接下来我们将在 Apalis iMX8QM 和 Verdin iMX8M Mini 计算机模块上演示 CAN FD 通信。Apalis iMX8QM  采用 NXP i.MX8 QuadMax 处理器,可以提供 3 路 CAN 接口。Verdin iMX8M Mini 上的 i.MX8 M Mini 处理器本身并不支持 CAN 接口,我们在模块上添加了一块 MCP2518 实现 CAN 接口。

Apalis iMX8QM 和 Verdin iMX8M Mini 分别通过 Ixora 和 Dahlia 载板进行 CAN 接口互联。这两个底板上均引出了 CAN 接口,方便用户测试。

Verdin iMX8M Mini 作为发送端,依次运行下面命令,并发送 4 字节和 10 字节长度的帧。

Apalis iMX8QM 作为接收端。

上面测试可以看到 Verdin iMX8M Mini 发送一帧 10 字节长度的数据,但是 Apalis iMX8QM  在收到了 12 字节的数据。这是 CAN FD 定义没有 10 字节的帧长,适合发送 10 字节的是 12 字节长度的帧。所以看到实际收到的是“11 22 33 44 55 66 77 88 99 00 00 00”这12 个字节,最后两个“00 00 ”是填充的数据。这部分填充数据来自 lib.c 代码  memset(cf, 0, sizeof(*cf)); /* init CAN FD frame, e.g. LEN = 0 */

总结

CAN FD 的新功能为满足了应用对更加高效的传输、更好实时性需求,但充分发挥这些功能还需要从应用开发到链路设计方面的优化。上面我们讨论简单地讨论一些注意事项,以及使用方法,具体的应用还要结合实际工况做调整。

参考:

https://www.microcontrol.net/en/know-how/bus-systems/can-fd/

https://www.picoauto.com/library/picoscope/can-bus-serial-protocol-decoding

https://www.can-cia.org/can-knowledge/can/can-fd/#:~:text=CAN%20FD%20data%20frames%20with,support%20remotely%20requested%20data%20frames.&text=The%20control%20field%20comprises%20additional,the%20Classical%20CAN%20data%20frames.

https://www.eecs.umich.edu/courses/eecs461/doc/CAN_notes.pdf

https://en.wikipedia.org/wiki/CAN_FD

https://www.kvaser.com/wp-content/uploads/2016/04/can-fd-considerations-for-different-stakeholders.pdf

https://www.kvaser.com/wp-content/uploads/2016/10/comparing-can-fd-with-classical-can.pdf

CAN FD 在 iMX8 计算机模块上的应用相关推荐

  1. 计算机ppt2003考试试题,计算机模块PPT2003试题及答案.doc

    计算机模块PPT2003试题及答案 啊博大考神之Powerpoint 2003试题及参考答案 第一章 Powerpoint 2003基础 1.要求:利用"开始"菜单启动PowerP ...

  2. 计算机模块考试注意事项,常考计算机模块考试操作注意事项.doc

    计算机模块考试的常识 一.幻灯片计算机模块 1.Shift+Ctrl 表示指定一个点 2.正常在幻灯片中建立图形,首先选中需要画的图形,然后按住Shift键不放,再用鼠标规定的地方画所需要的图形. 3 ...

  3. 计算机健康教育应用的意义,健康教育路径计算机模块的建立与应用  (3)

    健康教育路径计算机模块的建立与应用 (3) 时间:2016-03-16 12:00 文章来源:http://www.lunwenbuluo.com 作者:真启云 贡浩凌 解红 点击次数: 生成的健康教 ...

  4. 评高工计算机专业是啥系列,评高级工程师需要职称计算机吗?高级工程师计算机模块是什么意思?...

    上一篇文章中,小编提到了2017年高级职称论文要求是什么?主要是针对高级职称论文发表的条件和要求,正好今天有人问道:评高级工程师需要职称计算机吗?因为计算机这一块也是重点,中级职称中就已经涉及到计算机 ...

  5. 计算机主机箱工作电流,计算机主板上所用到的电压标准

    计算机主板上所用到的电压标准 我们看一下主板上都需要哪些电压标准,这些电压标准都用于何种设备.如何得来的. VCCcore(1.3-2.0V):CPU核心工作电压,由主机电源+5V通过RC5057进行 ...

  6. 用于物联网网关和边缘的 20 个新的基于英特尔的计算机模块

    计算机模块和单板计算机供应商康佳特推出了 20 款新的计算机模块 (COM),以针对要求苛刻的物联网 (IoT) 网关和边缘计算应用程序.这些模块采用第 11 代英特尔酷睿博锐.英特尔至强 W-110 ...

  7. 双ram口多模块存储器_RAM模块上的灰色小东西是什么?

    双ram口多模块存储器 If you are performing your first ever RAM upgrade, then watching a small piece suddenly ...

  8. 西安计算机模块培训,西安职称计算机模块培训

    西安职称计算机模块培训 根据原人事部<关于全国专业技术人员计算机应用能力考试的通知>(人发[2001]124号),从2002年开始,在全国范围内推行专业技术人员计算机应用能力考试,并将考试 ...

  9. 计算机主板电流图形,计算机主板上所用到的电压标准

    描述 计算机主板上所用到的电压标准 我们看一下主板上都需要哪些电压标准,这些电压标准都用于何种设备.如何得来的. VCCcore(1.3-2.0V):CPU核心工作电压,由主机电源+5V通过RC505 ...

最新文章

  1. Centos升级python
  2. BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
  3. 2016国产开源软件Top100(Q1)
  4. 基于密度的异常值检测方法整理
  5. 静态成员函数与静态成员变量
  6. DataGridView 控件中至少有一列没有单元格模板的解决
  7. iOS开发 IAP苹果内购
  8. FIO压测-SSDvsHDD
  9. 液晶驱动原理 c语言,基于STM8S的LCD驱动电路和LCD显示原理分析
  10. java 大富翁 游戏下载_大富翁4-大宇正版
  11. 多一个渠道,多一份收益!
  12. 苹果创建账号显示服务器出错,创建iCloud id 提示:无法创建
  13. 【阅读】《乔布斯的魔力演讲》
  14. C语言解数独(含源码) 2020/8/19
  15. Java Swing 键盘事件监听
  16. 批量修改文件内容(Python版)
  17. winrar正确破解方法
  18. Unity学习笔记1 简易2D横版RPG游戏制作(一)
  19. 参考文献怎么找?3分钟找到1000篇论文参考文献!
  20. 41 位全球顶尖 AI 专家共论人工智能创新实践,CCAI 2017 全日程公布!

热门文章

  1. Display port
  2. 2021年高考全国理科数学I卷数学压轴题的证明
  3. python抓取京东联盟优惠券_[爬虫]使用python抓取京东全站数据(商品,店铺,分类,评论)...
  4. 抖音直播带货数据在哪里看?有哪些考核指标?
  5. 我的世界工业时代java_我的世界:利用这些道具就能进入“工业时代”?萌新可以试一试!...
  6. 7-9 7-10 sdut-C语言实验- 排序
  7. 汇编学习之nasm编译器下载使用
  8. 计算机教师继续教育心得,教师继续教育培训个人心得体会(精选6篇)
  9. 什么是物联网?物联网如何工作?
  10. Android APP的字体设置