CAN 总线 之六 BOSCH CAN 比特位填充(编码规则)、归零编码(RZ)和不归零编码(NRZ)

帧格式

  在 CAN 总线中,为了确保足够的转换以保持同步,在相同极性的 5 个连续位之后使用位填充。下面以 标准格式来进行说明,先看下面标准格式的帧的图示:
在这里插入图片描述
在某些文档中,将 CAN 帧分为以下部分:

  • Header ( H ): 由 Start of Frame (SOF) 、 Arbitration Field、 Control Field 组成。
  • Data field ( D ): 即数据域
  • CRC field ( R ): 即 CRC 域的 CRC 部分。其内容由 CAN 控制器在运行时计算,因此不能由应用程序直接修改。
  • Unstuffed trailer ( U ): i由 CRC delimiter、the ACK slot、the ACK delimiter、the End of Frame (EOF) field. 组成。

位填充

  BOSCH CAN2.0 规范规定,DATA FRAME 或 REMOTE FRAME 中的位字段 START OF FRAME,ARBITRATION FIELD,CONTROL FIELD,DATA FIELD 和 CRC SEQUENCE 都需要通过比特填充的方法编码。 每当发送器在要发送的比特流中检测到相同值的五个连续比特时,则自动在实际发送的比特流中插入一个相反的比特位,这种方法被称为位填充
在这里插入图片描述
  DATA FRAME 或 REMOTE FRAME 的剩余位字段 CRC DELIMITER,ACK FIELD 和 END OF FRAME 是固定的格式,不需要填充。 ERROR FRAME 和 OVERLOAD FRAME 也是固定格式,不通过位填充方法编码。
  消息中的比特流根据不归零(Non-Return-to-Zero,NRZ)法进行编码。这意味着在总比特时间内,生成的比特电平要么是“显性”要么是“隐性”。下图为一个填充示意图:
在这里插入图片描述
  在使用比特填充的字段中,相同极性的六个连续比特(111111或000000)被认为是错误。 当检测到错误时,节点可以发送主动错误标志。 主动错误标志由 6 个连续的比特位的显性电平组成,这违反了位填充规则。
  位填充方案的一个副作用是,接收到的消息中的少量位错误可能会破坏解填充过程(接收器需要去除填充位),从而导致大量错误在解填充消息中传播。这降低了 CRC 针对原始错误提供的保护级别。该协议的不足之处已经在 CAN FD 帧中得到了解决,具体方法是 通过使用固定填充比特和记录插入的填充比特数的计数器的组合。

帧长度

  在位填充之后,CAN 帧的大小将增大。填充位本身可以是五个连续相同位中的第一个,因此在最坏的情况下,每四个原始位有一个填充位。帧大小可以使用如下公式表示:
在这里插入图片描述

  • s:由控制域中 DLC 定义的数据域的长度
  • 8s:数据域的 比特位 数
  • 47:从 SOF 开始到帧间隔(3个比特位的隐性电平),除去数据域部分(8s 单独表示)
  • 8s + 47:表示填充之前帧的大小。
  • 34:根据规范的要求,可能受到位填充的位的数量。去除了不可填充的部分和某些固定位。在最坏情况下,原数据除了第一个 4 位后,在每个 4 位后增加 1 位(所以分子减去 1)

归零编码(RZ)和不归零编码(NRZ)

  无论是归零编码(return-to-zero,RZ)还是不归零编码(non-return to zero,NRZ),信号都是在正 (+V) 和负 (- V) 电压之间交替。逻辑1 表示正电压下的信号,逻辑 0 表示负电压下的信号。然而,在 NRZ 方法中,从逻辑 0 到逻辑 1 的转换(反之亦然),直接跨越零电压电平,而在 RZ 方法中,转换暂时停留在零电压电平上。如下图所示:
在这里插入图片描述
  在光通信中,术语 RZ 和 NRZ 使用与以上含义不同,因为没有负光。NRZ 意味着逻辑值 1 (光脉冲)的一个位在位周期的边界上改变它的值(从光到无光或反之亦然)。相反,RZ 表示光脉冲比比特周期窄。在光信号中,逻辑 1 导通大约三分之一的位周期并且关闭大约三分之二。 逻辑 0 在比特周期的三分之二时间内保持关闭状态。

双极信号和单极信号

  双极信号(bipolar signal) 是一个三电压级的信号,通常在正电压和负电压之间摇摆。双极信号可以是 RZ 或 NRZ。在数字双极信号中,正电压和负电压交替出现。这导致输电线路上的零直流分量。
  单极信号(unipolar signal) 是一种两级信号,通常在零级和正级之间波动。单极信号被认为是一种开关信号,可以应用于电信号或光学信号。在电力传输中,假设统计上有相同数量的1和0,那么直流分量可能达到峰值正电压的一半。对于长距离传输,这种直流分量是不可取的。在光学传输中,单极信号也称为开关键控。
在这里插入图片描述
  还有一类是多级信号。在这种情况下,可以使用几个电压电平(例如,8),每个电平对应8个代码中的一个。尽管多级信号由于其固有的编码压缩特性而具有很大的吸引力,但它们并不用于通信网络的传输。在光传输中,不存在多电平信号。

48/58, 88/108 CODING

  4B/5B 代码将 4 位转换成 16 个预定的 5 位代码之一。 因此,即使原始的 4 位代码是 0000,它也被转换为 5 位非全零代码。 此方法避免在任何代码中都包含所有零。它也可以设计成连续模式避免某些字符串。 4B/5B 意味着转换后的初始 1 Gb/s 比特率由于增加了比特而增加到 1.25 Gb/s。 也就是说,有 25% 的开销带宽损失。 类似地,8B/10B 代码将 8 位转换成 256 个预定的 10 位代码之一。 带宽损失也是25%。

参考

  1. 维基百科—— CAN BUS
  2. BOSCH CAN2.0 规范 Part A 部分
  3. Preventing bit stuffing in CAN - Gianluca Cena, Ivan Cibrario Bertolotti, Tingting Hu, and Adriano Valenzano, CNR-IEIIT
  4. Using bit-stuffing distributions in CAN analysis - Thomas Nolte, Student member, IEEE, Hans Hansson, Member, IEEE, Christer Norström, Member, IEEE, Sasikumar Punnekkat, Member, IEEE
ZCShouEXP CSDN认证博客专家 砖家 码字员 没了
进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!进步始于交流,收获源于分享!
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页