当前位置: 首页 > 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字节,无数据内容

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

今日壁纸:

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

相关文章:

  • UE网络同步(一) —— 一个项目入门UE网络同步之概念解释
  • MATLAB中rsf2csf函数用法
  • Java基础 文字小游戏
  • 「数组」归并排序 / if语句优化|小区间插入优化(C++)
  • 颠覆传统 北大新型MoM架构挑战Transformer模型,显著提升计算效率
  • 接口优化笔记
  • pandas 科学计数法显示
  • PHP正则替换字符串中的图片地址
  • 基于多商户AI智能名片商城小程序的粉丝忠诚度提升策略:深度融合足额法则与多维度激励体系
  • BigDecimal高精度运算
  • C/C++实现蓝屏2.0
  • Unity音频管理器插件AudioToolKit
  • 搜维尔科技:驾驶模拟器背后的技术: Varjo的虚拟/混合现实 (VR/XR)提供独特的优势,最终加快汽车开发创新的步伐
  • OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官
  • LeetCode 3148.矩阵中的最大得分:每个元素与其左或上元素之差的最大值(原地修改O(1)空间)
  • 主流的开源大型语言模型
  • 【自动驾驶】话题通信
  • 【Linux】中的软件安装:深入探索RPM、SRPM与YUM
  • uniapp自定义请求头信息header
  • SpringBoot整合Liquibase
  • 虚幻5|给武器添加碰撞检测与伤害
  • RESTful API设计指南:构建高效、可扩展的Web服务
  • 黑马头条vue2.0项目实战(九)——编辑用户资料
  • 43.【C语言】指针(重难点)(F)
  • 【STM32+HAL】杆球控制系统
  • 用Python实现9大回归算法详解——04. 多项式回归算法
  • vue打包更新packge.json版本号
  • 计算机视觉技术解析:从基础到前沿
  • unity游戏开发003:深入理解Unity中的坐标系
  • 伊索寓言两则