当前位置: 首页 > 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.dtcms.com/a/271068.html

相关文章:

  • 【学习笔记】计算机操作系统(七)—— 文件管理
  • 全志H616开发学习文档
  • prometheus+grafana接入kafka实战
  • Python管理咨询数据可视化实战:收入分布与顾问利用率双轴对比图表生成脚本
  • 基于BRPC构建高性能HTTP/2服务实战指南
  • python之requests库解析
  • 1️⃣理解大语言模型
  • 【时时三省】(C语言基础)通过指针引用数组
  • 阿里开源WebSailor:超越闭源模型的网络智能体新星
  • 疏锦行Python打卡 DAY 54 Inception网络及其思考
  • HTML + CSS + JavaScript
  • 字体 Unicode 区块字符展示 PDF 生成器
  • Ubuntu重装系统后ssh连接不上(遇到 ​​“Unit ssh.service not found“​​ 错误)
  • kubernetes存储入门
  • Spring Boot + Vue.js 全栈开发:从前后端分离到高效部署,打造你的MVP利器!
  • 【05】MFC入门到精通——MFC 为对话框中的控件添加变量 和 数据交换和检验
  • 【01】MFC入门到精通—— MFC新建基于对话框的项目 介绍(工作界面、资源视图 、类视图)
  • Flink-1.19.0源码详解6-JobGraph生成-后篇
  • AJAX总结
  • Flink1.20.1集成Paimon遇到的问题
  • Electron 应用打包全指南
  • 机器学习模型在C++平台的部署
  • 基于 Redis 实现高并发滑动窗口限流:Java实战与深度解析
  • 开始读 PostgreSQL 16 Administration Cookbook
  • 深度学习 最简单的神经网络 线性回归网络
  • ArtifactsBench: 弥合LLM 代码生成评估中的视觉交互差距
  • 论文解析篇 | YOLOv12:以注意力机制为核心的实时目标检测算法
  • 腾讯云COS,阿里云OSS对象存储服务-删除操作的响应码204
  • 汽车智能化2.0引爆「万亿蛋糕」,谁在改写游戏规则?
  • 通用游戏前端架构设计思考