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

CAN总线-----帧格式

目录

前言

一、CAN总线帧格式分类

1.数据帧(重点) 

2.遥控帧

3.错误帧

4.过载帧

 5.间隔帧

二、位填充

三、波形实例


前言

        本期我们就开始学习CAN总线的帧格式,对应帧格式的话,在前面我们学习I2C协议和SPI协议等协议的时候也是类似的学过这些协议在传输过程中是怎么样去实现数据的传输的。那么我们就开始今天的学习(视频:[1-2] 帧格式_哔哩哔哩_bilibili)

一、CAN总线帧格式分类

帧类型

用途

数据帧

发送设备主动发送数据(广播式)

遥控帧

接收设备主动请求数据(请求式)

错误帧

某个设备检测出错误时向其他设备通知错误

过载帧

接收设备通知其尚未做好接收准备

帧间隔

用于将数据帧及遥控帧与前面的帧分离开

1.数据帧(重点) 

         数据帧是我们主要学习的内容之一,同样的CAN数据帧也是跟其他通信方式类似的,首先是SOF此时是逻辑电平显性,总线被拉开。然后紧接着就是就是11位的ID位,是用来区分当前广播设备的ID,其划分为前三位中间四位后面四位,范围是0~7FF,紧接着就是RTR,用来区分数据帧和遥控帧,数据帧就是表示为显性0,遥控帧就是为显性1。

IDE是扩展位,如果是显性0就表示标准格式,隐性1是表示扩展格式。r0是表示保留位。

然后接着就是DLC这个表示的是后面数据的长度,DLC是4位,范围是0000~1111,但是DCL要跟着后面数据段Data一起的,DLC指定多少那么数据段就要发送多少字节,这里要一一对应的,数据段最大是64位也就是8个字节。

后面就是CRC校验段,当出现错误的时候这里基本上都会被发现的,然后驳回这个帧。

然后就是ACK段应答,这里跟I2C是很相似的,在进入ACK之前刚开始有一个CRC界定符,这时候发送方释放CAN总线,发送一个显性1作为起始标志,然后如果有接收方的话,接收方就会拿到总线,这时候接收方就会把总线给拉开使得为显性0,当此时发送方再次拿到总线的时候就会发现总线上变为显性了,那么就说明有人接收了,所以发送完成,最后就是结束位EOF,长度为7位,均为隐性1。

  • SOFStart of Frame):帧起始,表示后面一段波形为传输的数据位
  • IDIdentify):标识符,区分功能,同时决定优先级 344
  • RTRRemote Transmission Request ):远程请求位,区分数据帧和遥控帧
  • IDEIdentifier Extension):扩展标志位,区分标准格式和扩展格式
  • SRRSubstitute Remote Request):替代RTR,协议升级时留下的无意义位
  • r0/r1Reserve):保留位,为后续协议升级留下空间
  • DLCData Length Code):数据长度,指示数据段有几个字节
  • Data:数据段的1~8个字节有效数据
  • CRCCyclic Redundancy Check):循环冗余校验,校验数据是否正确
  • ACKAcknowledgement):应答位,判断数据有没有被接收方接收
  • CRC/ACK界定符:为应答位前后发送方和接收方释放总线留下时间
  • EOFEnd of Frame ):帧结束,表示数据位已经传输完毕

数据帧的发展历史

        CAN 1.2时期,仅存在标准格式,IDE位当时仍为保留位r1

CAN 2.0 时期, ID 不够用,出现了扩展格式,增加了 ID 的位数,为了区分标准格式与扩展格式,协议将标准格式中的 r1 赋予了新功能 —IDE

2.遥控帧

遥控帧无数据段, RTR 为隐性电平 1 ,其他部分与数据帧相同

3.错误帧

总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“ CRC 错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备

4.过载帧

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失

 5.间隔帧

将数据帧和遥控帧 与前面的帧分离开

二、位填充

位填充规则:发送方每发送 5 个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据
例如:

          即将发送:  100000110     10000011110  0111111111110

          实际发送:  1000001110     1000001111100  011111011111010

          实际接收:  1000001110     1000001111100  011111011111010

          移除填充后: 100000110     10000011110  0111111111110

位填充作用:
  • 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机
  • 将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性
  • 保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲

下面看一个有意思的示例:

下面展示的是原始数据11111 0000 1111 0000 1111 0000,那么如果去位填充处理的话就应该会变为  11111 00000 11111 00000 11111 00000  这里就是因为第一个连续的5个1而要去插入一个0导致后面的4个0变为5位,然后不得不再插入一个1,后面的4个1还是被新插入的数字影响……以此类推。这样就成了连锁反应了哈,不过这种情况很少出现,但出现了也是按照位填充的方式插入的,不要感到奇怪。

三、波形实例

标准数据帧,报文 ID 0x555 ,数据长度 1 字节,数据内容为 0xAA

标准数据帧,报文ID0x666,数据长度2字节,数据内容为0x12, 0x34 •扩展数据帧,报文ID0x0789ABCD,数据长度1字节,数据内容为0x56

 •标准遥控帧,报文ID0x088,数据长度1字节,无数据内容

以上就是本期的全部内容了,我们下次见!

今日壁纸:

相关文章:

CAN总线-----帧格式

目录 前言 一、CAN总线帧格式分类 1.数据帧(重点) 2.遥控帧 3.错误帧 4.过载帧 5.间隔帧 二、位填充 三、波形实例 前言 本期我们就开始学习CAN总线的帧格式,对应帧格式的话,在前面我们学习I2C协议和SPI协议等协议的时候…...

UE网络同步(一) —— 一个项目入门UE网络同步之概念解释

最近在学习UE网络同步,发现了一个非常好的教程,并且附带了项目文件,这里从这个小项目入手,理解UE的网络同步 教程链接:https://www.youtube.com/watch?vJOJP0CvpB8w 项目链接:https://github.com/awforsyt…...

MATLAB中rsf2csf函数用法

目录 语法 说明 示例 将实数 Schur 形式变换为复数 Schur 形式 rsf2csf函数的功能是将实数 Schur 形式转换为复数 Schur 形式。 语法 [Unew,Tnew] rsf2csf(U,T) 说明 ​[Unew,Tnew] rsf2csf(U,T) 将实矩阵 X 的 [U,T] schur(X) 的输出从实数 Schur 形式变换为复数 Sc…...

Java基础 文字小游戏

souf System.out.printf("你好啊%s","张三") 输出你好啊张三 System.out.printn()放在中间可以换行 System.out.printf("%s你好啊%s","张三","李四") 输出 张三你好啊李四 只有输出没有换行效果。 制作一个文字小游戏…...

「数组」归并排序 / if语句优化|小区间插入优化(C++)

概述 在上一篇文章中,我们介绍了快速排序以及随机快速排序: 「数组」快速排序 / 随机值优化|小区间插入优化(C) 今天,我们来介绍归并排序。 相比于快速排序是冒泡排序融合了分治思想后形成的究极promax进化版&…...

颠覆传统 北大新型MoM架构挑战Transformer模型,显著提升计算效率

挑战传统的Transformer模型设计 在深度学习和自然语言处理领域,Transformer模型已经成为一种标准的架构,广泛应用于各种任务中。传统的Transformer模型依赖于一个固定的、按深度排序的层次结构,每一层的输出都作为下一层的输入。这种设计虽然…...

接口优化笔记

索引 添加索引 where条件的关键自动或者order by后面的排序字段可以添加索引加速查询 索引只能通过删除新增进行修改,无法直接修改。 # 查看表的索引 show index from table_name; show create table table_name; # 添加索引 alter table table_name add index …...

pandas 科学计数法显示

我注意到pandas中有一个问题, 默认情况下,就是其中的数据的小数位不能超过6位,比如0.0000007就会被显示为0,这个结果如下 全部以科学技术显示 import pandas as pd import numpy as np# 设置显示格式为科学计数法 pd.options.d…...

PHP正则替换字符串中的图片地址

在PHP中&#xff0c;可以使用preg_replace()函数来实现正则表达式的替换功能。以下是一个简单的例子&#xff0c;演示如何替换字符串中的图片地址。 double $str 图片地址1&#xff1a;<img src"http://example.com/image1.jpg"> 图片地址2&#xff1a;<i…...

基于多商户AI智能名片商城小程序的粉丝忠诚度提升策略:深度融合足额法则与多维度激励体系

摘要&#xff1a;在数字化浪潮的推动下&#xff0c;多商户AI智能名片商城小程序以其独特的商业模式和技术优势&#xff0c;正逐步成为连接商家与消费者&#xff0c;特别是粉丝群体的重要平台。本文深入探讨了如何通过深度融合足额法则与多维度激励体系&#xff0c;有效提升多商…...

BigDecimal高精度运算

1. BigDecimal是什么类型&#xff0c;为什么可以转为double BigDecimal 是 Java 中用于表示任意精度的十进制数的类。它主要用于金融和商业计算&#xff0c;能够提供比 double 类型更高精度的运算&#xff0c;特别是在处理货币等需要精确计算的场景中。 1.1 BigDecimal 的基…...

C/C++实现蓝屏2.0

&#x1f680;欢迎互三&#x1f449;&#xff1a;程序猿方梓燚 &#x1f48e;&#x1f48e; &#x1f680;关注博主&#xff0c;后期持续更新系列文章 &#x1f680;如果有错误感谢请大家批评指出&#xff0c;及时修改 &#x1f680;感谢大家点赞&#x1f44d;收藏⭐评论✍ 前…...

Unity音频管理器插件AudioToolKit

Unity音频管理器插件AudioToolKit 介绍AudioToolKit介绍具体用法总结 介绍 最近在自己写音频管理器的时候在网上发现了一款比较好用并且功能很全的一个音频管理插件&#xff0c;叫做AudioToolKit的插件。 如果需要的可以直接从我资源中找AudioToolKit。 AudioToolKit介绍 A…...

搜维尔科技:驾驶模拟器背后的技术: Varjo的虚拟/混合现实 (VR/XR)提供独特的优势,最终加快汽车开发创新的步伐

专业驾驶模拟器广泛应用于车辆开发&#xff0c;帮助汽车行业在开发过程的早期做出更好的设计决策。总体目标是为测试驾驶员提供最真实的驾驶体验&#xff0c;包括动态动作和声音&#xff0c;并测试控制算法或辅助系统等功能。环境越真实&#xff0c;驾驶员的体验就越接近最终车…...

OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官

OSL 望为香港数字资产市场发展建设添砖加瓦 &#xff08;香港&#xff0c;2024 年 8 月 13 日&#xff09;- 8 月 11 日至 12 日&#xff0c; 由 香港唯一专注数字资产的上市公司 OSL 集团&#xff08;863.HK&#xff09;冠名赞助&#xff0c;Foresight News、 Foresight Ventu…...

LeetCode 3148.矩阵中的最大得分:每个元素与其左或上元素之差的最大值(原地修改O(1)空间)

【LetMeFly】3148.矩阵中的最大得分&#xff1a;每个元素与其左或上元素之差的最大值&#xff08;原地修改O(1)空间&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-difference-score-in-a-grid/ 给你一个由 正整数 组成、大小为 m x n 的矩阵 g…...

主流的开源大型语言模型

本期我们来聊聊目前主流的开源大型语言模型。这些模型就像是AI界的超级英雄&#xff0c;各具特色&#xff0c;为我们的研究和开发提供了强大的力量。&#x1f680; GPT-Neo&#xff1a;这是EleutherAI的杰作&#xff0c;它模仿了OpenAI的GPT-3。GPT-Neo虽然规模小一些&#xf…...

【自动驾驶】话题通信

目录 构建发布者构建订阅者编写lanch文件自动启动节点测试运行ROS的目录结构 切换到工作空间的src目录下&#xff1a; 构建发布者 catkin_create_pkg publisher std_msgs rospy roscpp编写发布者程序&#xff1a; // 1.包含头文件 #include "ros/ros.h" #include &…...

【Linux】中的软件安装:深入探索RPM、SRPM与YUM

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Linux的起源与发展 2、RPM、SRPM与YUM的简要介…...

uniapp自定义请求头信息header

添加请求头&#xff1a;uniapp自定义请求头信息header&#xff0c;如下&#xff1a;添加tenant-id参数 代码...

OpenClaw技能安装失败全解析:从依赖冲突到网络问题的系统性解决方案

1. 项目概述&#xff1a;当技能“卡住”时&#xff0c;我们遇到了什么&#xff1f;最近在折腾OpenClaw这类开源AI助手平台时&#xff0c;不少朋友都踩进了同一个坑&#xff1a;从官方市场或者第三方渠道找到了心仪的技能&#xff08;Skill&#xff09;&#xff0c;点击“安装”…...

Spring Cloud AWS 实战教程:构建高可用 SQS 消息队列应用 [特殊字符]

Spring Cloud AWS 实战教程&#xff1a;构建高可用 SQS 消息队列应用 &#x1f680; 【免费下载链接】spring-cloud-aws The New Home for Spring Cloud AWS 项目地址: https://gitcode.com/gh_mirrors/sp/spring-cloud-aws Spring Cloud AWS 是一个强大的开源框架&…...

机器学习与深度学习在地球物理勘探中的应用:基于电阻率数据预测极化率模型

1. 项目概述与核心价值在花岗岩这类地质条件复杂的地区搞勘探&#xff0c;最头疼的就是地下情况“看不清”。传统的电阻率&#xff08;ERT&#xff09;和激发极化&#xff08;IP&#xff09;联合反演&#xff0c;就像用一把刻度模糊的尺子去量一块表面坑洼不平的石头——面对高…...

MAX78000移植Zephyr RTOS实战:从BSP创建到AI边缘设备开发

1. 项目概述与动机作为一名长期在嵌入式边缘AI和机器人领域摸爬滚打的开发者&#xff0c;我最近把目光投向了一块相当有潜力的板子&#xff1a;Maxim Integrated&#xff08;现为ADI一部分&#xff09;的MAX78000FTHR开发套件。这块板子的核心——MAX78000微控制器&#xff0c;…...

[智能体-81]:工程化智能体 = 模型做脑力拆解 + 框架做流程落地。前者是决策者,后者是管理者,tools/function call是内部员工;mcp server是外部资源;

一、全角色人设 & 对应技术组件角色定位对应技术模块核心职责决策者&#xff08;脑力大脑&#xff09;大模型 LLM理解目标、任务拆解、逻辑判断、分支决策、内容生成&#xff0c;负责 “想方案、定步骤”管理者&#xff08;流程总管&#xff09;智能体编排框架&#xff08;…...

基于Arduino的智能蓝调节拍器:DIY音乐练习伴侣

1. 项目概述&#xff1a;一个能“演奏”蓝调的低成本节拍器玩乐器的人&#xff0c;对节拍器这东西又爱又恨。它像一位严厉的监工&#xff0c;用单调的“嘀嗒”声强迫你跟上节奏。但你想过没有&#xff0c;这个监工其实可以很有趣&#xff1f;几年前&#xff0c;我在练习蓝调吉他…...

毕业设计 yolov11骨折检测医疗辅助系统(源码+论文)

文章目录 0 前言1 项目运行效果2 课题背景2.1 研究背景2.2 国内外研究现状2.3 研究意义 3 设计框架&#xff08;骨折检测系统设计框架说明&#xff09;3.1. 系统架构图3.2. 技术选型3.2.1 核心组件3.2.2 辅助工具 3.3. 核心模块设计3.3.1 YOLO模型训练模块训练流程图关键伪代码…...

SMUDebugTool终极指南:如何深度掌控AMD Ryzen处理器的隐藏性能

SMUDebugTool终极指南&#xff1a;如何深度掌控AMD Ryzen处理器的隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: ht…...

2026年一键生成论文工具对比实测:5款神器从选题到格式全流程护航

写论文的焦虑&#xff0c;是每个科研人和学生都心照不宣的“隐形压力”。选题无从下手&#xff0c;文献检索耗时费力&#xff0c;逻辑框架反复推翻&#xff0c;格式排版让人抓狂&#xff0c;查重降重更是像在和系统玩“猫鼠游戏”。2026年的AI工具早已不是过去那种“打字机”&a…...

Burp Suite拦截与替换机制深度解析:从协议层到规则链

1. 这不是“点开就能用”的功能&#xff0c;而是你和目标系统之间的一道可编程闸门很多人第一次在Burp Suite里点开Proxy → Intercept&#xff0c;看到HTTP请求被拦下来&#xff0c;兴奋地改个User-Agent、删个Cookie就点Forward&#xff0c;以为自己已经掌握了“拦截与替换”…...