当前位置: 首页 > news >正文

详解CAN总线的位填充机制

文章目录

  • 前言
  • 一、封装成帧
  • 二、透明传输
  • 三、差错检测


前言

在CAN总线的错误类型中我们介绍了填充错误检测范围是从SOF到CRC场,填充规则是在传输报文中每5个相同极性位后填充1个极性相反位。为什么要进行位填充呢?这种填充规则是怎么定义的,或者说我们一起思考一下为什么需要5个相同极性位才填充1个极性相反位?


不管什么通信协议,在数据链路层需要解决的三个共性问题是封装成帧、透明传输和差错检测。以CAN报文为例:

一、封装成帧

很容易理解,把报文的Data数据部分进行封装,定义好帧开始、帧结束的标志,组成完整的一帧进行发送。按照CAN报文的帧结构从SOF到EOF组成一帧CAN报文,接收端就能够根据首部和尾部的标志从接收的比特流中识别出帧的开始和结束,从而正确接收一帧CAN报文。
在这里插入图片描述

二、透明传输

如下图,在一帧报文中,如果数据段某些比特组合正好与帧结束符一样了,那接收端在接收数据时就会出现:识别到第一个帧结束符就认为该帧传输完成,而没有真正接收到完整的一帧报文。透明传输就是为了解决(预防)这种帧定界的错误。所谓透明传输,表示的是无论什么样的比特流数据都能按照原样无差错的通过数据链路层,那为了解决数据部分可能出现的帧开始符或帧结束符,就需要进行字符填充
在这里插入图片描述

CAN报文为了实现透明传输,就是在SOF到CRC字段采用每5个相同极性位后填充一个极性相反位。这样在一帧CAN报文传输过程中就不会出现连续7个连续“1”而与EOF相同了。

那有人会有疑问了,既然EOF是7个“1”,为什么不是每6个相同极性位后填充一个极性相反位来与EOF做区分呢?又或者是每5个相同隐性位“1”后填充一个显性位“0”呢?

答案是不可以的。这是为了避免与CAN错误帧出现重叠,我们知道主动错误帧是连续6个“0”开始,被动错误帧是连续6个“1”开始,而填充规则设计成5个连续相同极性位正是为了与错误帧区分开,不影响错误帧发挥作用的同时又能实现帧的透明传输。

三、差错检测

CAN报文的差错检测即是通过CRC场来进行CRC校验来保证一帧报文没有比特差错。暂不展开。

http://www.lryc.cn/news/583647.html

相关文章:

  • 数据结构——深度优先搜索与广度优先搜索的实现
  • [附源码+数据库+毕业论]基于Spring Boot+mysql+vue结合内容推荐算法的学生咨询系统
  • RabbitMQ 4.1.1-Local random exchange体验
  • C++如何进行性能优化?
  • 19-C#静态方法与静态类
  • 【WEB】Polar靶场 21-25题 详细笔记
  • 从0开始学习R语言--Day42--LM检验
  • 异地组网
  • 数据分析框架和方法
  • Mac电脑,休眠以后,发现电量一直在减少,而且一个晚上,基本上是没了,开机都需要插电源的简单处理
  • 卫星通信终端天线的5种对星模式之二:功率检测型载波跟踪
  • 【PyTorch】PyTorch中数据准备工作(AI生成)
  • 深度学习——损失函数
  • Hexo + Butterfly + Vercel 完整个人Blog部署指南
  • Flask3.1打造极简CMS系统
  • 自动化Trae Apollo参数解释的批量获取
  • 股权结构解析
  • SpringBoot集成文件 - 大文件的上传(异步,分片,断点续传和秒传)
  • 专题一_双指针_查找总价格为目标值的两个商品
  • 拼多多正在错失即时零售?
  • ECR仓库CloudFormation模板完整指南
  • 【每日算法】专题六_模拟
  • WPF学习笔记(27)科学计算器
  • 1、专栏介绍以及目录
  • 周立功汽车软件ZXDoc深度解析:新能源汽车开发新基建的破局之道
  • eggNOG数据库注释文件
  • 以太网基础④IP 协议介绍与 IP 校验和算法实现
  • 【Linux网络编程】Socket - TCP
  • Java-----韩顺平单例设计模式学习笔记
  • swiglu 激活函数学习笔记