摘要:
究竟CAN FD与传统CAN的区别是什么?在数据传输和实时性能方面又有什么不同?
随着汽车电子、工业自动化的蓬勃发展,CAN总线上的设备数量、数据量都大大增加,给CAN总线带来了极大的挑战。为满足更高的带宽及数据吞吐量,CAN FD(CAN with Flexible Data-Rate)诞生了。那究竟CAN FD与传统CAN的区别是什么?在数据传输和实时性能方面又有什么不同?
基本概念:
CANFD(Controller Area Network with Flexible Data-Rate)是一种通信协议,它是在传统的CAN(Controller Area Network)协议的基础上进行的改进。与CAN相比,CANFD具有更高的带宽和传输速率,可以支持更多的数据传输。它还支持更多的帧格式,可以满足不同的数据传输需求。
一般从使用传统CAN转换到CAN FD会有以下3个原因:
01 CAN FD提高位速率的同时提供更短的CAN帧
- 延迟时间更短.
- 更好的实时性能
- 更高的带宽
02 CAN FD可以在CAN帧中容纳从8到64字节更多的数据
- 相对更少的系统开销 = 更好的数据吞吐量
- 发送较大数据对象时,软件更简单高效
03 CAN FD具有更高性能的CRC算法
- 降低未检测到错误的风险
由于CAN FD是在CAN总线的数据量负荷逐渐达到极限后的产物,本文旨在对比CAN FD与传统CAN的同时详细介绍CAN FD。
01.CAN FD与传统CAN的数据帧格式
图 1 传统 CAN 帧(上图)和 CAN FD 帧(下图)比较。两种帧都是单字节数据,而且在此例中, CAN FD 帧没有提高位速率。可以看出,两种帧从帧起始(SOF)位到整个 11 个仲裁位都相同。仲裁之后,传统 CAN(标记为 A)中是远程传输请求位(RTR 位),CAN FD 帧中是远程请求替换位(RRS 位)。对于数据帧,该位在这两种帧格式中始终为显性(0)。通常定义为逻辑 0 和 0 伏信号的显性位由底部较粗的黑线表示(标记为 B)。
图 1 传统 CAN 和 CAN FD 帧之比较
远程传输请求位(RTR 位)之后的位是显性标识符扩展位(IDE 位),表示该帧是使用 11 位仲裁的基本帧格式。注意,本文将不涉及使用 29 位仲裁的 EF 扩展帧格式(EFEFF) 。
IDE 位之后是 r0 位(保留位),其在传统 CAN 帧格式中始终为显性。在 CAN FD 帧格式中,该位为隐性(见 C),指示该帧不是传统 CAN 帧,而是保留格式的 CAN 帧,现在称其为 CAN FD(CAN Flexible Data-rate)。换句话说,该位指示 CAN 帧是传统 CAN 帧还是 CAN FD 帧。自 ISO11898-1 标准发布以来,该位被称为 FDF 位(灵活数据格式位),代替在 ISO11898-1 标准先前版本中被称为 r0 位的名称。在任何先前文档或数据表中见到对 r0 位的引用,它与 2015 年发布的 ISO11898-1 版中的 FDF 位是相同的。
02. CANFD的附加位
FDF 位/r0 位(从现在开始我们将其称为 FDF 位)之后是 FD 格式的保留位(res)和传统 CAN 格式的数据长度码位(DLC)。换句话说,按照以前的 ISO11898-1 标准所有产生的传统 CAN 控制器都将错误地解读 CAN FD 帧,从而导致传统 CAN 控制器的错误帧。在循环冗余检查(CRC)定界符(图 1 中标记为 D)之后,传统 CAN 和 CAN Fd 在其位模式方面是一致的。换句话说,在下一帧开始之前,传统格式和 FD 格式使用相同的结束模式。
所有 CAN FD 控制器都可以处理传统 CAN 帧和 CAN FD 帧的混合。这意味着在现有系统中开始使用 CAN FD 控制器以及仅使用传统 CAN 格式的传统 CAN 控制器是可行的。当所有老的传统 CAN 控制器都被 CAN FD 控制器替换时,可以将传统 CAN 帧与 CAN FD 帧混合使用,或者仅使用两种类型之一。
在 CAN FD 帧中的 FDF 位之后是保留位。将此位设置为隐性指示未来协议,与 FDF 位指示从传统 CAN 转换到 CAN FD 格式的方式相同。未来协议尚未定义。值得注意的是,传统 CAN 格式的 r0/FDF 位用于指示 CAN FD 格式之前耗费了 25 年时间。
在保留位之后是 BRS 位(位速率转换)。这个额外的位允许 CAN FD 帧以两种不同的格式发送。如果 BRS 位为显性被发送,则所有位将以与图 1 所示的仲裁中所使用的相同的位速率发送。如果BRS 位为隐性,则在此位后帧格式将使用较高的位速率,直到并包括 CRC 定界符。
BRS 位之后是 ESI 位(错误状态指示器),通常显性发送为主。如果 CAN FD 帧发送节点变为错误-被动,则该位将被隐性发送,指示发送方节点存在重要的通信问题。目前尚不清楚该位如何在更广泛的应用中使用,但是它已经被汽车制造商根据所需进行了采纳。
在这 3 个新位(保留位,BRS 位和 ESI 位)之后是 4 个 DLC 位,指示 CAN 帧中的数据字节数。表 1 显示了这 4 个位如何用于指示 CAN 帧中的数据字节数。传统 CAN 帧最多可容纳 8 个字节的数据。从表中可以看出,超出 8 个字节可以发送 DLC 码,但只有 8 字节的数据将被放置在发送的 CAN 帧中。仔细观察表格你会发现 9 到 15 的 DLC 在 CAN FD 格式中有所差异。9 到 63 的任何数量的字节需 6 位 DLC,并且到 64 字节将需 7 位 DLC。折中方案是保持 4 位 DLC,并限制 CAN FD 帧(12, 16, 20, 24, 38, 48 和 64)中的字节长度数。
03.CANFD显著提高数据传输速率
DLC 位后的数据(图 1 显示一个数据字节的 CAN 帧)。该数据前和后的位是固定长度的任意数量数据字节。本例中要传输一个字节的数据,传统格式需 55 位,CAN FD 格式需 70 位。在最差的情况下,也可以在帧中包含多个填充位。如果帧在同一级别的行中超过 5 位,则协议将在帧中添加一个额外的位,具有反相极性,以确保可以使用级别更改来重新同步采样点。
这个添加和除去额外的位用于重新同步的过程称为填充,并且这些位在 CAN 协议中被标记为填充位。通过在每个 CAN 帧中打包更多的数据来提高数据传输效率,这可以从表 1 的最后两列看出。效率方程式假定在开销中最差情况下的填充位数。由于其较低的开销,传统 CAN 与 CAN FD 相比效率略高。通过将 CAN FD 帧中的字节数从 8 字节增加到 64 字节,可以将效率从 50%增加到88%。
在表中,还包括以不同帧格式使用的 CRC 码。传统 CAN 格式对于所有帧类型使用 15 位 CRC 编码,因为所有帧具有相似的长度。CAN FD 帧更复杂一些,因为 64 字节帧比 8 字节帧要长 8 倍。为了解决这个问题,在 CAN FD 帧中使用两种不同的 CRC 长度:如果帧保持 16 字节或更少,则使用 17 位的 CRC-17;且如果 CAN 帧保持 20 字节或更多,则使用具有 21 位的 CRC-21。
它是具有 2 个额外位的 CRC 加上填充计数器中的 4 位和固定填充位,这就使得 CAN FD 帧比传统 CAN帧更长。有人会说这个比较不完全公平,因为传统CAN 帧在CRC段可以有多达3个填充位,在控制段还可以有 3 个位。
CAN FD 帧的 CRC 段中的额外位为数据内容提供了更好的保护,系统高安全性是从传统 CAN 转到CAN FD 的充分理由。
CAN 帧中有超过 8 个字节的数据,由于提高了效率,数据吞吐量将会增加,这是从传统 CAN 转到CAN FD 的另一个原因。
04.如何平衡数据传输效率与实时性能
重要的是要记住,尽管使用更长的 CAN 帧的效率确实有所提高,但 CAN 帧和每秒帧数更少,这增加了通信中的延迟时间并降低了实时性能。为了减少此问题并增加数据吞吐量,可以将 CAN FD 帧中的位速率提高到传统 CAN 以上的可能性。
迄今为止对 CAN FD 的描述是在整个 CAN 帧中具有相同的位速率。如上所述,隐性 BRS 位将要求在帧的数据部分中切换到较高的位速率。
在图 2 中,添加了第 3 个 CAN 帧。该第 3 帧是具有与中间 CAN FD 帧相同内容的 CAN FD 帧,但是在本例中,该帧以中间的 CAN FD 帧的数据速率的两倍发送帧。
图 2 CAN FD 帧不含/含有提高 2 倍数据速率
因为它具有相同的内容,所以你将获得相同的 DLC 和数据,但是当 CAN FD 以更高的位速率发送时,BRS 位将被隐性发送(见 E)。BRS 位包含在 CRC 计算中,即使 CAN-ID,DLC 和数据相同,也会产生两个不同的 CRC 内容。
从图 2 可以看出,以较高位速率发送的第一个位是 ESI 位,后面是 DLC,数据字节和 CRC 位。以较高位速率发送的最后一位是 CRC 定界符。由此可以理解,较高的位速率不仅适用于 CAN Fd 帧的数据段,而且也适用于周围的位。
图 3 与图 2 相同,除了先前描述的帧下面的一个新帧。这个新帧与所有其他帧具有相同的内容,但位速率是仲裁位速率的八倍。与具有不变位速率或双位速率的 CAN FD 帧相比,变化相对较大。
可以看出,不仅数据的单字节获得较高的位速率,而且帧的 DLC 和 CRC 部分也一样,其总共有大约 40 位。
图 4 显示 3 个 CAN 帧,顶部为 8 个字节的传统 CAN 帧。中间是一个具有 64 字节的 CAN FD 帧,底部的 CAN 帧是相同的 CAN FD 帧内容,但是位速率增加(速度快八倍)。
图 3 在图 2 的基础上多了位速率增加 8 倍的 CAN FD 帧
从图 4 可以看出,更多的数据将使 CAN 帧传送时间更长,这将阻止其它高优先级 CAN 帧开始发送。为了保持实时性能,需要增加位速率以减少 CAN 帧的长度,并且减少 CAN 帧占用通信线路的时间以及防止其它高优先级帧访问通信。
图 4 顶部是 8 字节传统 CAN帧;
中间是位速率相同的 64 字节 CAN FD帧;
底部是位速率增加了 8 倍的 64 字节 CAN FD帧
总之,具有高位速率的 CAN FD 将增加实时性能,因为较高的位速率使得 CAN 帧在传送时间上更短,从而减少通信中的延迟。通过在每个帧中传送更多数据,可以增加数据吞吐量,但是如果不结合使用较高的位速率,这将降低实时性能。在许多情况下,编程中会使用 64 字节长的 CAN 帧,这通常在系统暂停且没有实时控制运行时完成。即使没有实时需求,使用更高的位速率来提高数据吞吐量仍然有利,并缩短下载时间。
来源 | 智能网联汽车网