CAN总线详解

2023-05-16

CAN总线协议


要了解报文数据帧的直接看第三点

1. CAN简介

CAN(controller area network)控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线

其特点有:

  1. 总线上节点不分主从
  2. 采用载波监听多路访问、逐位仲裁的非破坏性总线仲裁技术。
  3. 直接通信距离最远10km,速率5Kb/s
  4. 通信速率最高可达1Mb/s,距离40m
  5. 末端要有120欧终端电阻

11898协议

  • iso的osi模型
  • 11898-1对应controller
  • 11898-2对应高速can收发器
  • 11898-3对应低速can收发器
  • 11898-4增加时间触发通讯机制

can总线协议主要工作在osi模型中的物理层和数据链路层

ISO 11898-2 和 ISO 11898-3主要应用于物理层,两种can收发器主要是对应的茶分电压不一样。

ISO 11898-1主要应用于数据链路层。

2. CAN总线电平

can总线采用差分电压传输数据,分别是CANH和CANL两根总线。总线上的信号电平分为这两条线之间的差分电压。

V d i f f = V C A N H − V C A N L V_{diff} = V_{CANH} - V_{CANL} Vdiff=VCANHVCANL

image-20210928153423098

CAN总线具有两种逻辑电平:隐性电平和显性电平。

隐性电平:CANH和CANL之间的差分电压近似为0,表示逻辑1

显性电平:CANH和CANL之间的差分电压近似为2~3V,表示逻辑0

CAN总线上的逻辑是“线与”的形式,显性电平可以覆盖隐性电平,因此0可以覆盖1

3. CAN数据帧

CAN的报文帧可以分为标准帧和扩展帧两大类型。

3.1 标准帧 Standard CAN

image-20210928141242303

  • 帧起始:SOF仅由一个显性位构成。在总线空闲时才允许节点发SOF。
  • 仲裁场:由11位ID号(标识符)远程请求位RTR组成。ID号以高位到低位的顺序发送,其中高7位(ID.10~ID.4)不能全为隐位。RTR在数据帧中必须是显位,在远程帧中必须为隐位。当需要请求另一个节点的信息时,RTR位为显性表示远程帧,所有的节点都会收到请求并根据ID号确认响应节点。
  • 控制场:由扩展标识符IDE、保留位r0数据长度码DLC组成。IDE位为0表示改帧为标准帧。DLC为4bits,允许使用数目为0~8。r0保留显性位0。
  • 数据场:最多64bits即8个字节长度数据
  • CRC场:由15位CRC序列和1位界定符组成。
  • 应答场:ACK由2bits组成,包括应答间隙和应答界定符。应答场中发送器发出2位隐性位,如果接受器正确接收到数据,则发送一个显性位告知正确收到有效报文。即接收节点当CRC校验结果正确时会在应答间隙内发一个显性位。第二位应答界定符必须是隐性位。
  • 帧结束:EOF由7个隐位组成。当接收到EOF 字段的最后一位且全为隐性位时,该消息被认为是有效的。 若 EOF 字段中出现显性位将会使发送器重复发送信息。

image-20210928145714011

7 位字段标志 CAN 帧的结束并禁用位填充,当出现显性时表示填充错误。

位填充:正常工作时,当连续出现5位相同逻辑电平时,将填充一位相反的逻辑电平到数据中。

3.2 扩展帧Extended CAN

image-20210928150336145

为区别标准帧和扩展帧,将CAN2.0A标准中的r1改为扩展ID号IDE。

  • SRR为替代远程请求位,用于取代标准帧中的RTR位,作为扩展帧中的占位符,同样是在数据帧中为隐性位。
  • IDE为扩展标识符,隐性位表示后面有更多的标识符位(ID位),IDE位后面跟着18位扩展ID。
  • r1和r0都是保留位,保留显性0。

扩展ID位IDE位在标准帧中为显性,在扩展帧中为隐性电平。可根据IDE位电平判断帧格式。

image-20210928160033001

图片来源:CSDN

4. CAN总线仲裁

如果两个节点试图同时占用总线,CAN协议协议采用非破坏性逐位仲裁来决定总线的占有权。赢得仲裁的节点只需继续处理消息,不会被其他节点破坏信息完整。

CAN总线的一个特性是为节点ID号的消息分配优先级。ID号越低,优先级越高。最高优先级ID为0。

如果两个或以上节点同时开始传输,则进入总线仲裁,由于CAN总线的特性决定显性电平可以覆盖隐性电平,在逐位仲裁的过程中,ID号高位为1的节点主动退出竞争,最终使具有最高优先级(ID号最小)的节点获得总线通信权,保留对CAN总线的控制并继续完成其消息传送。

image-20210928153702137

上图显示由 CAN 控制器自动处理的 CAN 仲裁过程。

由于每个节点持续监控自己的传输状态,当节点 B 的隐性位被节点 C 的显性位覆盖时,B 检测到总线状态与自身传输的位不匹配。因此,节点 B 停止传输,而节点 C 继续发送其消息。

一旦节点 C 释放总线,节点 B 将尝试传输消息。

5. 帧的有效性

CAN 协议包含五种错误检查方法:三种在消息级别,两种在位级别。

消息级别错误检查

消息级别由CRC校验ACK 应答间隙强制执行。 还有一个帧检查,查找帧中始终为隐性的字段,即SOF、EOF、ACK界定符和CRC界定符,若检测到出现显性位则产生错误。

位级别错误检查

位级别由发送器数据监测位填充规则执行。数据监测是在节点发送数据时会不断检测总线电平与自己发送的数据是否一致,如果发现不一致则产生一个位错误。位填充是在连续5个相同电平的位之后填充一个极性相反的位。如果下一位不是补码,则会产生错误。在将数据转发到应用程序之前,接收节点的控制器会删除填充位。

如果消息未通过任何一种错误检查,则该消息无效,接收节点生成错误帧,强制发送节点重新发送消息,直到它被正确接收。

如果故障节点通过不断重复错误而挂断总线,则在达到错误限制后,控制器将取消其传输能力。

6. 报文帧类型简介(扩展)

6.1 数据帧

image-20210928180128242

数据帧是最常见的消息类型,包括仲裁字段、数据字段、CRC 字段和确认字段。 仲裁字段包含图 2 中的 11 位标识符和 RTR 位,该位对数据帧起主导作用。 在图 3 中,它包含 29 位标识符和 RTR 位。 接下来是包含 0 到 8 个字节数据的数据字段,以及包含用于错误检测的 16 位校验和的 CRC 字段。 最后是确认字段。

6.2 远程帧

image-20210928171430167

6.3 出错帧

image-20210928171441409

6.4 超载帧

image-20210928171451105

7. 参考资料

CSDN

《CAN总线协议》:Introduction to the Controller Area Network (CAN)
《网络化控制系统————现场总线技术(第2版)》 阳宪惠 主编

修改时间:2021.09.28

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

CAN总线详解 的相关文章

  • STM32通信---CAN

    一 CAN是什么 xff1f CAN xff0c 全称为 Controller Area Network xff0c 即控制器局域网 xff0c 是一种多主方式的串行通讯总线 xff0c 是国际上应用最广泛的现场总线之一 二 CAN的起源
  • STM32 CAN总线说明

    简介 xff1a CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986年率先提出 此后 xff0c CAN通过I
  • CAN总线的标准帧和扩展帧

    CAN总线的标准帧和扩展帧主要决定帧ID的长度 xff0c 标准帧的帧ID长度是11位 xff0c 帧ID的范围是000 7FF 扩展帧的帧ID长度是29位 xff0c 帧ID的范围是0000 0000 1FFF FFFF CANopen帧
  • CAN扩展帧详解

    寻址方式
  • 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
  • RS232/RS485/CAN_BUS 通信原理总结与通信波形分析

    分析一 xff1a 232串口信号 要点 xff1a RS232 xff0c 全双工 xff0c 采用三线制传输分别为TXD RXD GND xff0c 其中TXD为发送信号 xff0c RXD为接收信号 在RS232中任何一条信号线的电压
  • CAN通信数据帧介绍

    CAN通信有五个帧 xff0c 其中最重要的是数据帧 xff01 xff01 xff01 xff01 我们下面开始讨论数据帧 一 数据帧的格式 xff08 数据帧有七个段组成 xff09 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
  • CAN报文格式简析

    Date xff1a 2022 5 11 Author xff1a MJQ Meta xff1a CAN CAN基础篇 CAN报文格式简析 1 Motornala和Intel格式 建议直接看图 xff0c 小白也能秒懂 xff01 注 xf
  • c#通过串口及CAN模块实现上位及下位机通讯

    目录 前言 一 串口 CAN总线 二 使用步骤 1 RS232串口通讯 xff08 指令下发与接收 xff09 2 CAN总线通讯 总结 前言 学习及工作中我们经常会遇到上位机与下位机通讯等工作 xff0c 结合场景使用不同的通讯方式实时通
  • CAN总线详解(转)

    1 简介 CAN是控制器局域网络 Controller Area Network CAN 的简称 xff0c 是一种能够实现分布式实时控制的串行通信网络 优点 xff1a 传输速度最高到1Mbps xff0c 通信距离最远到10km xff
  • Linux Socket CAN——驱动开发(转)

    Linux Socket CAN驱动开发 一 CAN总线协议 CAN是Controller Area Network 控制器局域网 的缩写 CAN通信协议在1986年由德国电气商博世公司所开发 xff0c 主要面向汽车的通信系统 现已是IS
  • rplidar_ros 报错:can‘t bind 和Operation Time Out的解决

    我使用的思岚A2的雷达在ros下运行 1 can t bind无法连接的错误 xff0c 一种是设备号不匹配引起的错误 xff0c 首先可以使用ll dev grep ttyUSB查看一下设备的dev号 xff0c 再检查一下rplidar
  • 链接mysql数据库 Navicat,2003-can‘t connect to MYSQL server on192.168.1.122 (10060)

    可能的原因如下 xff1a 一 关闭防火墙 xff1b 1 firewalld的基本使用 启动 xff1a systemctl start firewalld 关闭 xff1a systemctl stop firewalld 查看状态 x
  • STM32的CAN总线的接收双FIFO使用方法

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

    CAN与CANOpen 一 基本概念 CAN与CANOpen 二 报文格式 CAN与CANOpen 三 错误处理 CAN与CANOpen 四 CANOpen对象字典 CAN与CANOpen 五 PDO和SDO CAN与CANOpen 六 网
  • MCP2515独立控制器

    1 简介 MCP2515 是一款独立控制器局域网络 Controller Area Network CAN 协议控制器 完全支持 CAN V2 0B 技术规范 该器件能发送和接收标准和扩展数据帧以及远程帧 MCP2515 自带的两个验收屏蔽
  • Ubuntu 周立功CAN分析仪 USBCAN-II 驱动

    首先从官网https www zlg cn Index Search search key linux的下载资料界面下载 Linux驱动 USBCAN I I II II 2A I MINI安装驱动 USBCAN II新版驱动基于libus
  • STM32的CAN标识符过滤器超简单理解

    1 STM32中CAN1与CAN2的过滤器组 103系列14个过滤器组 104 107系列28个过滤器组 CAN FilterInitStructure CAN FilterNumber 0 0 13 2 每组过滤器组有两种工作模式 标识符

随机推荐

  • webpack中的加载器(loader)

    一 了解webpack加载器 1 webpack加载器 xff08 loader xff09 的作用 在实际开发过程中 xff0c webpack默认只能打包处理以 js后缀名结尾的模块 xff0c 其他非 js后缀名结尾的模块 xff0c
  • python画图(线条颜色、大小、类型:点、虚线等)(图文详细入门教程四)

    初衷 本人由于平常写论文需要输出一些结果图 xff0c 但是苦于在网上搜python画图时 xff0c 详细的教程非常多 xff0c 但是就是找不到能马上解决自己问题那一行代码 xff0c 所以打算写一些适合需求简单的朋友应急用的教程 xf
  • Linux常用命令详解 xfs文件系统的备份与还原 xfsdump和xfsrestore命令详解

    Linux常用命令详解 xfs文件系统的备份与还原 xfsdump和xfsrestore命令详解 一 引言 1 xfsdump xff1a xfs文件系统的备份 2 xfsstore xff1a xfs文件系统的还原 二 命令具体介绍与用法
  • 小白入门gitee(码云)

    文章目录 一 介绍二 注册账户三 本地环境的配置1 如果是在linux系统2 如果是windows系统 四 本地代码库的操作1 基本概念2 命令操作 五 远程代码库的操作1 下载远程代码库的代码2 同步远程仓库 xff08 上传代码 xff
  • ubuntu:安装cmake后查看版本报错:CMake Error: Could not find CMAKE_ROOT !!!

    问题描述 xff1a ubuntu18原来安装过cmake xff0c 想升级下版本 xff0c 在安装新版本的cmake完成后 xff0c 输入指令 xff1a cmake version 查看版本号时出现以下错误 xff1a CMake
  • g++ 编译选项

    返回主页 lsgxeva MyGitee https gitee com lsgx MyGithub https github com lsgxeva 博客园首页新随笔联系订阅管理 随笔 437 文章 0 评论 1 GCC 警告 优化以及调
  • STM32CubMx+FreeRTOS互斥锁和递归互斥锁(五)

    文章目录 FreeRTOS系统一 简绍二 STM32CubMx配置1 准备2 添加互斥锁2添加递归互斥锁 三 互斥锁1 代码2 测试 四 递归互斥锁1 代码2 测试 FreeRTOS系统 一 简绍 互斥锁 xff0c 谁获得的消息谁来释放
  • ESP8266-12F最小系统板程序烧录

    文章目录 ESP8266一 简介二 准备1 ESP8266 12F系统板2 转接板3 USB转串口模块4 烧录软件 三 连接烧录四 下载 ESP8266 一 简介 前一段时间一直用ESP8266 12F开发板来学习开发 xff0c 但是最近
  • ESP8266+0.96OLED驱动显示(I2C)

    文章目录 ESP8266一 简介二 管脚定义三 代码 ESP8266 一 简介 这篇我们说一下ESP8266来驱动OLED显示屏显示 xff0c 这里使用的是I2C的屏幕 xff0c 像Arduino中有好几个库可以驱动屏幕 xff0c 但
  • Node.js超详细指南(一)

    文章目录 一 概述二 Node js的特点1 异步I O2 事件驱动3 单线程4 支持微服务 三 Node js下载与安装安装步骤验证安装是否正确 一 概述 Node js的官方开发语言是JavaScript JavaScript是前端开发
  • Linux未设置root初始密码怎么办?

    问题描述 xff1a Linux未设置初始密码 xff0c 无法从用户状态切换到root状态怎么办 xff1f 是不是遇上下面的情况 xff1a 解决方案 xff1a 使用下列命令进行修改root密码 sudo passwd root
  • 计算机体系结构——功能部件

    一 功能部件 加法器 1 全加器 全加器 将两位本地二进制数和1位低位进位的数进行相加 xff0c 求的1位本地结果以及1位向高位进位的结果 简单来说就是3个input xff0c 2个output xff0c 这里的逻辑比较简单 xff0
  • Mac M1遇到更换清华源不成功问题解决办法(实测有效)

    遇到的问题 在使用如下命令更换为清华源后 xff0c update时出现了错误 xff1a bash span class token operator span c 39 echo span class token string 34 d
  • Ubuntu安装gcc遇到Depends依赖问题解决办法(XXX : Depends: gcc-12-base)

    gcc遇到依赖问题 libatomic1 Depends gcc 12 base 61 12 20220319 1ubuntu1 but 12 1 0 2ubuntu1 22 04 is to be installed libc6 dev
  • Tmux终端复用器下载安装及配置文件(超好用)

    1 Tmux简介 tmux是一款非常好用的终端复用软件 xff0c 曾经的你是不是还在为开n个终端而烦恼呢 xff0c 有了tmux就可以实现多终端显示在一个桌面上 xff0c 分屏丝滑 xff0c 当然还有其他功能 xff0c 比如保护现
  • make menuconfig遇到 warning:.config does not exists

    一生一芯PA0 xff1a PA0 xff1a make menuconfig 编译报错 问题描述 遇到的报错 xff1a 解决方案 xff1a 安装缺失的工具 xff1a 安装 bison 和 flex即可 xff0c flex和 bis
  • LibTorch1.7.1: error: ‘min_values’ is not a member of ‘at’

    错误描述 xff1a 原来用的libtorch的版本是1 5 0的 xff0c 今天换成了最新的1 7 1 xff0c 就报了这个错误 xff1a error min values is not a member of at 解决方法 xf
  • Github使用指南

    文章目录 注册成为用户GitHub功能及常用词汇板块说明Your profile使用仓库上传资源查找资源 注册成为用户 首次使用GitHub并准备长期使用需要先注册 xff0c 当然也可以以游客的方式进行浏览 登录官网GitHub Wher
  • 三孔插座接线方法(上地,左零,右火)

    三孔插座接线方法 一般三孔插座的线序 xff0c 如下图所示 xff1a 上 xff1a 地线 xff08 保护地 xff09 左 xff1a 零线 右 xff1a 火线 xff08 相线 xff09 正确的接接线方法 错误的接线方法 xf
  • CAN总线详解

    CAN总线协议 要了解报文数据帧的直接看第三点 1 CAN简介 CAN controller area network 控制器局域网是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线 其特点有 xff1a 总线上节点不分主