CAN通信讲解(2)——数据帧和遥控帧

2023-05-16

本文注意参考了《CAN入门书》,源于此书图片不再特殊标注

目录

  • 2.1 帧的种类
  • 2.2 数据帧和遥控帧
  • 2.3 仲裁过程
  • 2.4 各段详解
  • 2.5 小结

数据帧和遥控帧格式类似,放在一起串讲

2.1 帧的种类

CAN协议帧分为5种,

  1. 数据帧
  2. 遥控帧
  3. 错误帧
  4. 过载帧
  5. 帧间隔(不是间隔帧)

其中数据帧和遥控帧有标准格式扩展格式两种

用途
数据帧发送固定ID数据
遥控帧请求固定ID数据
错误帧检查出错误通知其他节点
过载帧接收过载通知其他节点
帧间隔用于将数据帧或遥控帧与前面帧间隔开来

2.2 数据帧和遥控帧

数据帧和遥控帧十分相似,对比理解

  • 数据帧有7段:帧起始、仲裁段、控制端、数据段、CRC段、ACK段、帧结束
  • 遥控帧有6段:帧起始、仲裁段、控制端、数据段、CRC段、ACK段、帧结束

遥控帧只是缺少数据段
数据帧和遥控帧有标准格式扩展格式两种
在这里插入图片描述
在这里插入图片描述
图片源自

简称全程含义
RTRRemote Tranmission Request(远程发送请求)隐性1=遥控帧,显性0=数据帧, 保证优先级数据帧>遥控帧
IDEIdentifier Extension (ID扩展位)隐性1=扩展帧,显性0=标准帧,保证优先级标准帧>扩展帧
SRRSubstitute for Remote Request(代替远程请求)恒为显性1,扩展时让TRT后移
SOFStart Of Frame(帧起始)恒为1bit 显性0
EOFEnd Of Frame(帧结束)恒为7bit 隐性1
DLCData Length Code(数据长度)普通CAN来说0~8

2.3 仲裁过程

CAN总线不像IIC一样,每个节点有自己的唯一固定地址,CAN总线上的每个节点都可以发1个或多个ID,接收者只需要接收它关心的ID就行,因为哪个节点发哪个ID是提前统一分配好的,所以可以理解成某个ID是某个CAN节点的”固定地址“之一,同一时刻有可能不同节点同时发送数据,所以需要通过ID仲裁方式,让ID大的(优先级低)节点主动放弃控制权,让ID小(优先级高)的节点先发送数据。
在这里插入图片描述
图片源自

线与机制:总线上显性位能覆盖隐性位,两个节点如果一个发显性信号,一个发隐性信号,最后总线上呈现显性信号。
ID号越小优先级越高:通过线与机制发现显性优先级高,逻辑0优先级高,0约多号越小优先级越高
回读机制:节点在向总线发送报文过程中,会对总线电平进行回读,如果自己发显性0,回读肯定显性0,如果自己发隐性1,回读可能是显性0,则说明有ID更小的节点同时也在发数据,自己要马上终止发送。
非破坏性仲裁机制:即使出现多节点同时发送,ID小(优先级高)节点数据不会遭到破坏,也不会延时,ID大(优先级低)节点会主动终止发送主动延时。

在这里插入图片描述
图片源自

CAN总线上有四个节点:Node_A、Node_B、Node_C、Node_D。发送的报文的ID号分别为5、7、3、6,可以看出ID=7延时最严重,ID=3虽然优先级最高,但ID=5仲裁段已经发出,在发数据段时ID=3也只能临时等待了,其他同理。

2.4 各段详解

以标准数据帧为例(忽略扩展帧)
在这里插入图片描述

图片源自

帧起始:1bit 显性位,总线空闲都是隐性电平位,通过显性代表有报文发出
仲裁段:11bit ID位+ RTR(远程发送请求,标准数据帧中恒显性0)
控制段:IDE(ID扩展,显性0)+ r0(保留位,保留一般要求显性0)+ DLC(数据段长度)
数据段:可变长度数据
CRC段:15bit CRC + 1bit 隐性1(代表CRC结束)

着重讲解ACK段
在这里插入图片描述
图片源自

ACK只有两bit,最后一位ACK界定符代表ACK结束,恒为隐性1。而ACK槽(ack slot)对于发送节点需要发隐性1,而接收节点需要收到正确报文(无填充错误,格式错误,CRC错误)后将此位拉到显性0,接收节点通过回读机制就知道有节点正确接收到此报文。

帧结束:连续7bit 隐性1(总线空闲也是隐性1,所以看示波器不好区分)

2.5 小结

CAN在汽车行业使用最多的就是标准数据帧,而遥控帧几乎用不到,扩展帧也用的极少,8字节数据承载能力毕竟有限,升级版的CANFD一次最多承载64字节也在逐渐代替普通CAN,但归根结底普通CAN是基础,标准帧又是普通CAN基础,这些行业基本知识点还是要掌握的。

>>返回总目录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAN通信讲解(2)——数据帧和遥控帧 的相关文章

  • 学习CANopen --- [9] CAN总线的状态检查

    本文讲述如何判断CAN总线是否存在以及是否bus off xff0c 以vcan0进行讲解 xff0c vcan0是虚拟的CAN接口 xff0c 可以把它看做一个软件CAN适配器 xff08 区别于硬件CAN适配器 xff0c 如PeakC
  • 自动驾驶之——CAN总线简介

    自动驾驶技术之 无人驾驶中的CAN总线 CAN 是Controller AreaNetwork 的缩写 xff0c 中文名为控制器局域网络 xff0c 是ISO国际标准化的串行通信协议 xff0c 是一种用于实时应用的串行通讯协议总线 xf
  • can't run '/etc/init.d/rcS': No such file or directory 最终解决方法

    drivers rtc hctosys c unable to open rtc device rtc0 end request I O error dev mtdblock2 sector 256 isofs fill super bre
  • Linux内核Socket CAN中文文档

    自己在年假中空闲之余翻译的内核中Socket CAN的文档 xff0c 原文地址在 xff1a http lxr linux no linux 43 v2 6 34 Documentation networking can txt 但是这篇
  • CAN总线 标准帧/扩展帧滤波器设置

    在CAN协议里 xff0c 报文的标识符不代表节点的地址 xff0c 而是跟报文的内容相关的 因此 xff0c 发送者以广播的形式把报文发送给所有的接收者 节点在接收报文时 根据标识符 CAN ID 的值决定软件是否需要该报文 xff1b
  • CAN总线数据帧/标准帧/扩展帧/远程帧/错误帧的组成格式对比

    最近在研究CAN总线的驱动 xff0c 需要详细了解数据帧 标准帧 扩展帧 远程帧 错误帧这几种帧的详细组成格式 xff0c 于是收集了一下 xff0c 统一放在这里进行对比和记录 xff0c 以便日后需要时查阅 1 数据帧 标准帧 CAN
  • 图解CAN总线数据的组成和帧格式

    CAN 是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 在汽车产业中 xff0c 出于对安全性 舒适性 方便性 低公害 低成本的要求 xff0c
  • 下一代CAN通信技术CAN XL简介

    众所周知 xff0c CAN网络具有易于实现 可扩展 并支持复杂拓扑结构等诸多优点 xff0c 所以目前在各个行业特别是汽车领域 xff0c 得到了非常广泛的应用 但是 xff0c 它也存在着诸多问题 xff0c 其中最大的一点就是总线带宽
  • Nvidia Jetson Xavier 上使用CAN

    为了利于回忆 xff0c 将自己查询到的资料在这里记录一下 资料一 xff1a 20条消息 NVIDIA Xavier CAN weifengdq的专栏 CSDN博客 资料二 xff1a 英文版Enabling CAN on Nvidia
  • 基于NRF24L01的CAN数据透传

    闲谈 xff1a 闲来无聊 xff0c 恰好公司又经常用CAN数据的传输 xff0c 自己觉得要是用无线传送多好 xff0c 然后 xff0c 就是一个奇想 xff0c 就想做一个无线数据的透传 xff0c 恰好身边又有NRF24L01 那
  • Nvidia jetson agx xavier can通讯失败,修改时钟源pllaon

    一 问题详情 在调试Xavier can的过程中 xff0c can通信始终有问题 xff0c 收发都会报错 后来发现时钟源导致波特率不匹配 xff0c 所以不能通信 二 修改时钟源 在虚拟机使用官方sdkmanager xff0c 下载安
  • QT5使用PCAN读取CAN数据

    文章目录 QT5使用PCAN读取CAN数据 CAN Bus example 重点讲解 pro文件 创建CAN bus Device 参数设置 接收报文 PCAN支持的QCanBusDevice ConfigurationKey类型 QT5使
  • 一文读懂CAN总线及通信协议

    CAN总线的汽车 CAN概念 CAN是控制器域网 Controller Area Network CAN 的简称 是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的 并最终成为国际标准 ISO11898 是ISO国际标准化的串行通信
  • STMCubeMX5.10版本CAN使用loopback模式自测

    使用芯片 STM32F103C8T6 cube软件版本 5 10 软件包版本为 STM32Cube FW F1 V1 7 0 一 配置时钟为使用外部晶振 并配置为72M 二 使能 can 并配置参数 设置can波特率为500k 并设置为lo
  • STM32的CAN总线的接收双FIFO使用方法

    通过下面的框图我们可以看到 STM32F013有两个接收FIFO 但是实际的使用中如何让着两个FIFO都被使用呢 解决办法就在这里 1 STM32F103有0 13共14个过滤器组 每个过滤器组都可以绑定指定的FIFO 2 特别需要注意的一
  • 各种通信接口的简单对比

    对比表 同步方式与异步方式的主要区别在于 是否传输时钟信号 只要是通訊前雙方需要設定相同波特率的 都是異步傳輸方式 异步传输 Asynchronous Transmission 每次异步传输的信息都以一个起始位开头 它通知接收方数据已经到达
  • CAN总线的EMC设计方案

    一 CAN接口EMC设计概述 Controller Area Network简称为CAN 多用于汽车以及工业控制 用于数据的传输控制 在应用的过程中通讯电缆容易耦合外部的干扰对信号传输造成一定的影响 单板内部的干扰也可能通过电缆形成对外辐射
  • Canoe 安装流程

    硬件 VN5620 软件 CANoe V15 0 软件 Vector License Client 6 2 驱动 Vector Driver Setup license 购买硬件时 vector会分配 参考文档 First Steps to
  • CAN总线的报文分析(三)

    系列文章目录 文章目录 系列文章目录 前言 一 数据帧 最常用 1 帧起始 2 仲裁段 3 控制段 4 数据段 5 CRC段 6 ACK段 7 帧结束 二 远程帧 三 错误帧 四 过载帧 五 帧间隔 总结 前言 CAN总线上的节点发送数据都
  • CAN协议详解-01

    CAN 是控制器局域网络 Controller Area Network 的简称 它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的 并最终成为国际标准 ISO11519以及ISO11898 是国际上应用最广泛的现场总线之一 差

随机推荐

  • Linux Shell 实现一键部署subversion

    subversion SVN是subversion的缩写 xff0c 是一个开放源代码的版本控制系统 xff0c 通过采用分支管理系统的高效管理 xff0c 简而言之就是用于多个人共同开发同一个项目 xff0c 实现共享资源 xff0c 实
  • PowerShell install 一键部署TortoiseSVN

    TortoiseSVN TortoiseSVN是 Subversion 版本控制系统的一个免费开源客户端 xff0c 可以超越时间的管理文件和目录 文件保存在中央版本库 xff0c 除了能记住文件和目录的每次修改以外 xff0c 版本库非常
  • PowerShell install 一键部署subversion

    subversion SVN是subversion的缩写 xff0c 是一个开放源代码的版本控制系统 xff0c 通过采用分支管理系统的高效管理 xff0c 简而言之就是用于多个人共同开发同一个项目 xff0c 实现共享资源 xff0c 实
  • ROS(1)安装

    1 ros安装 安装过程参考https www cnblogs com letisl p 11815191 html安装wsl略 xff0c 利用mobaxterm进行连接与可视化 1 1 添加源 sudo sh c 39 etc lsb
  • ROS(11)move_base详解

    11 move base详解 11 1 move base配置参数解读 参考链接 xff1a https blog csdn net banzhuan133 article details 90239252 https wenku baid
  • vscode c/c++ global插件实现代码跳转

    问题 在打开某些大的工程 xff0c 如ROS时 xff0c 有些类成员或接口无法进行自动跳转 xff0c 比较难受 vscode插件安装 安装C C 43 43 GNU Global插件 安装C 43 43 Intellsense插件 G
  • gammaray剖析QT程序——如何解析qt版本不同的exe

    gammaray是个非常牛逼的工具 xff0c 但是当我们要分析的exe和当前编译gammaray不一致时 xff0c 是没法使用的 方法很简单 xff0c 其实版本和exe无关 xff0c 和exe依赖的qt dll库有关 xff0c 我
  • do{}while(0)用法

    linux内核和其他一些开源的代码中 xff0c 经常会遇到这样的代码 xff1a do while 0 这样的代码一看就不是一个循环 xff0c do while表面上在这里一点意义都没有 xff0c 那么为什么要这么用呢 xff1f 实
  • windows下vscode安装go插件

    1 GIT安装 vscode安装 略 2 GO在win下安装及环境变量配置 安装完GO后 xff0c 创建一个目录作为工作区 xff0c 如G my project go xff0c 环境变量添加GOPATH并指向该目录 在该目录下创建三个
  • GDB调试中 如何在so共享库中打断点、保存断点以及加载断点

    最近在使用gdb的过程中 xff0c 需要对so文件进行调试 xff0c 在这里记录一下调试中的问题及解决方法 如何在so源文件中打断点 xff1f 首先编译so时需要 g指令 在gdb xxx指令后 xff0c 发现无法在so对应的源码文
  • [Net]SSE消息推送简介

    文章目录 SSE网络协议客户端服务端事件 SSE示例客户端服务端 SSE xff08 Server Sent Events xff09 是一种服务端到客户端 xff08 浏览器 xff09 的单向消息推送方式 SSE网络协议 SSE是基于H
  • 记录一次Windows下通过reimp和dlltool转换.lib到.a的过程

    背景是这样的 xff1a 在linux下的一个C 43 43 服务由于特殊原因 xff0c 需要在windows下跑 xff0c 该工程为cmake搭建 xff0c 用到了qt的一些基础库 xff0c 我们想在qtcreator中用ming
  • DGPS知识详解

    什么是DGPS xff1f DGPS Difference Global Positioning System英文单词的缩写 xff0c 即差分全球定位系统 由于当前GPS全球卫星定位系统精度不能满足人们定位导航的需要 xff0c 因此 x
  • CMake 指定gcc编译版本

    修改 CMakeLists txt 文件 xff0c 添加如下命令 SET CMAKE C COMPILER home hhb gcc 5 2 0 bin gcc SET CMAKE CXX COMPILER home hhb gcc 5
  • 避免头文件的多重包含

    避免头文件的多重包含 通过预处理器变量 xff0c 我们可以以头文件保护符的形式避免在已经见到头文件的情况下重新处理该头文件的内容 使用预处理器变量作为头文件保护符 预处理器变量有两种状态 xff1a 已定义与未定义 define指示接受一
  • 空气动力与电机力学

    空气动力学 1 空气阻力的公式 xff1a F 61 1 2 C SV 2 式中 xff1a C为空气阻力系数 xff1b 为空气密度 xff1b S物体迎风面积 xff1b V为物体与空气的相对运动速度 由上式可知 正常情况下空气阻力的大
  • java学习记录

    前言 Java系列课之基础入门 xff1a 钟洪发老师JAVA零基础入门笔记 JAVA学习指导 00 关于Java学习的一个开场白 01 常用dos命令和ava环境软件下载 在开始学习java之前 我们必须掌握一些常用的dos命令 一 di
  • GPS串口数据接收程序实例

    GPS串口数据接收程序实例 摘 要 xff1a 目前GPS xff08 全球定位系统 xff09 定位应用市场日趋成熟 xff0c 正在进入应用的高速发展时期 本文以一款EverMore公司的GM X205GPS接受模块为例 xff0c 介
  • OSEK网络管理入门

    目录 OSEK初级认知OSEK中级认知结构说明1 正常上线 建环 传递令牌 xff08 Taken 及休眠2 已建环有403新节点插入3 已建环现有节点403异常掉线4 上线未发现其他节点建环失败 xff08 跛足模式 xff09 OSEK
  • CAN通信讲解(2)——数据帧和遥控帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 2 1 帧的种类2 2 数据帧和遥控帧2 3 仲裁过程2 4 各段详解2 5 小结 数据帧和遥控帧格式类似 xff0c 放在一起串讲 2 1 帧的种类 CAN协议帧分