随着汽车电子、工业自动化的蓬勃发展,CAN总线上的设备数量、数据量都大大增加,给CAN总线带来了极大的挑战。为满足更高的带宽及数据吞吐量,CAN FD(CAN with Flexible Data-Rate)诞生了。那究竟CAN FD与传统CAN的区别是什么?在数据传输和实时性能方面又有什么不同?
一般从使用传统CAN转换到CAN FD会有以下3个原因:- 延迟时间更短.
- 更好的实时性能
- 更高的带宽
CAN FD可以在CAN帧中容纳从8到64字节更多的数据
- 相对更少的系统开销 = 更好的数据吞吐量
- 发送较大数据对象时,软件更简单高效
由于CAN FD是在CAN总线的数据量负荷逐渐达到极限后的产物,本文旨在对比CAN FD与传统CAN的同时详细介绍CAN FD。
图 1 传统 CAN 帧(上图)和 CAN FD 帧(下图)比较。两种帧都是单字节数据,而且在此例中, CAN FD 帧没有提高位速率。可以看出,两种帧从帧起始(SOF)位到整个 11 个仲裁位都相同。仲裁之后,传统 CAN(标记为 A)中是远程传输请求位(RTR 位),CAN FD 帧中是远程请求替换位(RRS 位)。对于数据帧,该位在这两种帧格式中始终为显性(0)。通常定义为逻辑 0 和 0 伏信号的显性位由底部较粗的黑线表示(标记为 B)。远程传输请求位(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 位是相同的。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)中的字节长度数。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 的另一个原因。重要的是要记住,尽管使用更长的 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 帧占用通信线路的时间以及防止其它高优先级帧访问通信。底部是位速率增加了 8 倍的 64 字节 CAN FD帧
总之,具有高位速率的 CAN FD 将增加实时性能,因为较高的位速率使得 CAN 帧在传送时间上更短,从而减少通信中的延迟。通过在每个帧中传送更多数据,可以增加数据吞吐量,但是如果不结合使用较高的位速率,这将降低实时性能。在许多情况下,编程中会使用 64 字节长的 CAN 帧,这通常在系统暂停且没有实时控制运行时完成。即使没有实时需求,使用更高的位速率来提高数据吞吐量仍然有利,并缩短下载时间。