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

Posted 贺二公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAN 总线 之六 BOSCH CAN 比特位填充(编码规则)归零编码(RZ)和不归零编码(NRZ)相关的知识,希望对你有一定的参考价值。

原文地址:https://itexp.blog.csdn.net/article/details/91129839


文章目录

帧格式

在 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 ): 由 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个代码中的一个。尽管多级信号由于其固有的编码压缩特性而具有很大的吸引力,但它们并不用于通信网络的传输。在光传输中,不存在多电平信号。

4B/5B, 8B/10B 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

以上是关于CAN 总线 之六 BOSCH CAN 比特位填充(编码规则)归零编码(RZ)和不归零编码(NRZ)的主要内容,如果未能解决你的问题,请参考以下文章

CAN 总线 之五 BOSCH CAN2.0 Part B(标准格式消息 和 扩展格式消息)

can总线之六——can线上的信号及帧概念

CAN 总线 之四 BOSCH CAN2.0 Part A

CAN是啥意思?

CAN总线调试

CAN 总线通信 简要概括