帧格式

  在 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

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

  1. CAN 总线 之四 BOSCH CAN2.0 Part A

    前言   随着越来越多的应用程序接受和引入串行通信,这就要求对特定应用程序的通信功能分配消息标识符以进行标准化.如果将原来由 11 个标识符位定义的地址范围扩大,则可以更方便地使用 CAN 实现这些应 ...

  2. CAN 总线 之七 BOSCH CAN 位时序 和 同步

      CAN 支持 1 kBit/s 至 1000 kBit/s 的比特率.CAN 网络的每个节点都有自己的时钟发生器,通常是石英振荡器. 可以为每个 CAN 节点单独配置比特时间的定时参数(即比特率的 ...

  3. 面对初学者的CAN总线入门教程(三)_CAN通信中帧、优先级、位填充、错误、位时序以及同步的介绍

    目录 1. 数据链路层中的帧 1.1 数据帧 1.1.1 帧起始(标准.扩展格式相同) 1.1.2 仲裁段 1.1.3 控制段 1.1.4 数据段(标准.扩展格式相同) 1.1.5 CRC 段(标准/ ...

  4. 反转比特位(文章最后有干货)【转】

    转自:https://blog.csdn.net/wuxianglonghaohao/article/details/21602305 http://www.newhottopic.com/2014/ ...

  5. Rowhammer漏洞致“比特位翻转”,如何解决?

    读者们也许会觉得Rowhammer和比特位翻转是音乐及舞蹈行业的专业术语,但其实他们指的是存在于动态随机访问存储(DRAM)--大多数电子设备中都存在的一种核心组件中的某种非常严重的漏洞.随着驱动器中 ...

  6. “Query结构化分析及槽位填充” byte dance NLP lambda在线讲的不错的

    自然语言理解中的槽位填充 https://vlambda.com/wz_wGCKe4OXi3.html

  7. 《LeetCode力扣练习》第338题 比特位计数 Java

    <LeetCode力扣练习>第338题 比特位计数 Java 一.资源 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ...

  8. c语言让数组地址对齐,C语言实现比特位数组在目标空间左右居中对齐三种方式...

    在LED行业中,一般一个灯亮或者不亮用一个bit位来表示(这里就不谈七彩或者灰度控制卡),假如我们屏幕大小是128点,相当于宽度16个字节,如果我们让两个汉字居中显示(两个汉字占宽度4个字节),很容易 ...

  9. CAN笔记(9) 位填充

    CAN笔记(9) 位填充 1. 位填充 2. 发送单元的工作 3. 接收单元的工作 1. 位填充 位填充是为防止突发错误而设定的功能 当同样的电平持续 5 位时,则添加一个位的反型数据 位填充的构成 ...

最新文章

  1. Windbg无源码调试驱动
  2. LeetCode 1598. 文件夹操作日志搜集器
  3. IntelliJ Idea取消Could not autowire. No beans of 'xxxx' type found的错误提示
  4. C++组合数(combination)的实现
  5. linux 软路由_软路由和硬路由的区别分析
  6. Java Programming Review 02
  7. python爬虫笔记-weikipedia数据爬取
  8. Windows上必备的7个国产小众软件,每一个都是良心推荐,建议常备使用哦。
  9. 标梵互动信息解说关于CSS-in-JS: 使用及优缺点
  10. 狂神学习系列04:MySQL+JDBC
  11. Java 在PPT中添加文本水印的简易方法(单一/平铺水印)
  12. 微信小程序学习day02-WXSS 模板样式
  13. 关于DMA,TCM(ITCM和DTCM)和Cache
  14. 简练网软考知识点整理-项目风险审计及风险评估
  15. bind函数怎么用JAVA_JavaScirpt 的 bind 函数究竟做了哪些事
  16. 设计的界面如下图所示:窗体的标题栏显示“模拟计算器—江海大”,1个文本框用于显示输入字符和计算结果;20个按钮控件作为字符输入按键或者功能按键。
  17. DataGrip连接Hive详细步骤
  18. oracle 抓包工具,【转】抓包工具Wireshark详解(抓取IOS中APP的请求)
  19. 新能源汽车电池的发展及类型
  20. 1、SPSS 25的安装

热门文章

  1. 实现接口时@Override注解问题
  2. 转:linux的源码查看, c++语法 查看网站
  3. linux 管道和重定向
  4. html复选框怎么转成数组,在HTML中将html表转换为数组
  5. java判断点与线与面的关系_VC++开发GIS系统(280)判断点与面的拓扑关系
  6. java 图形库_OpenGL开放图形java库jogamp-all-platforms.7z
  7. SpringBoot @EnableAutoConfiguration注解
  8. 关于linux分区与挂载的解释
  9. nl.basjes.parse.useragent.UserAgentAnalyzer内存泄漏问题解决
  10. Scala数组和Java集合互转代码演示