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

详解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.xdnf.cn/news/15101.html

相关文章:

  • LLM的表征做减法的是什么,自然语言是一个矩阵,怎么进行减法的
  • S7-1500——(一)从入门到精通1、基于TIA 博途解析PLC程序结构(二)
  • 服务器中source: not found解决方法
  • AP中的Execution Manager“非报告进程”和“伴随进程”概念解析
  • Django核心知识点详解:JSON、AJAX、Cookie、Session与用户认证
  • RAG实战之dify源码文件解析-pdf文件解析流程
  • QT6 源(158)模型视图架构里的文件系统模型 QFileSystemModel 篇一:属性,成员函数,与信号函数
  • 在 macOS 上安装与自定义 Oh My Zsh:让终端美观又高效 [特殊字符]
  • Microsoft AZ-305 Exam Question
  • Git常用指令
  • Python-文件操作
  • 如何将 AWS EBS 卷从 gp2 批量迁移到 gp3:完整指南
  • RabbitMQ 高级特性之事务
  • FPGA加速HMI实时渲染:复杂图形处理的并行计算方案
  • 【macOS】【Swift】【RTF】黑色文字在macOS深色外观下看不清的解决方法
  • 5.注册中心横向对比:Nacos vs Eureka vs Consul —— 深度解析与科学选型指南
  • 字体 Unicode 区块字符展示 PDF 生成器
  • MySQL 09 普通索引和唯一索引
  • 5N70-ASEMI电源管理领域专用5N70
  • 前端业务监控系统,异常上报业务,异常队列收集,异常捕获
  • 【Unity】MiniGame编辑器小游戏(十)连连看【Link】
  • C#基础篇(11)泛型类与泛型方法详解
  • UI前端与数字孪生结合实践探索:智慧物流的仓储优化与管理系统
  • 大数据在UI前端的应用深化:用户行为模式的挖掘与预测性分析
  • 原型与原型链到底是什么?
  • Linux驱动学习day20(pinctrl子系统驱动大全)
  • 自动驾驶决策与规划
  • 【Kafka】登录日志处理的三次阶梯式优化实践:从同步写入到Kafka多分区批处理
  • 【PDF提取内容改名】批量提取pdf多个指定区域内容到excel表格的操作步骤和方法
  • 制作MikTex本地包可用于离线安装包