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总线详解 的相关文章

  • 四、数据转换、ros-CAN通讯

    1 CAN通讯 1 1驱动安装 1 1 1在我的gitee上下载test功能包 xff0c 将libusbcan so文件复制到 lib 其他位置 计算机 lib 目录下 1 2参考 我另一篇博客一 2 1 3 下载功能包 1 3 1 在我
  • 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帧
  • RS232/RS485/CAN_BUS 通信原理总结与通信波形分析

    分析一 xff1a 232串口信号 要点 xff1a RS232 xff0c 全双工 xff0c 采用三线制传输分别为TXD RXD GND xff0c 其中TXD为发送信号 xff0c RXD为接收信号 在RS232中任何一条信号线的电压
  • CAN通信矩阵的理解(CAN报文信号的属性)

    CAN通信矩阵 1 CAN通信矩阵是什么 CAN通信矩阵 xff08 CAN Communication Matrix xff09 通常由整车厂完成定义 xff0c 车辆网络中的各个节点需要遵循该通讯矩阵才能完成信息的交互和共享 我们知道C
  • CAN通信讲解——总目录

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 总目录 CAN通信讲解 xff08 1 xff09 基本知识 CAN通信讲解 xff08 2 xff09 数据帧和遥控帧 CAN通信讲解 xff08 3 xff09 错误据
  • 【车载开发系列】CAN总线帧种类介绍篇

    车载开发系列 CAN总线帧种类介绍篇 CAN总线帧种类介绍篇 车载开发系列 CAN总线帧种类介绍篇一 CAN总线当中帧的种类二 五种类型帧用途说明三 数据帧的组成1 xff09 帧起始2 xff09 仲裁段3 xff09 控制段4 xff0
  • 图解CAN总线数据的组成和帧格式

    CAN 是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 在汽车产业中 xff0c 出于对安全性 舒适性 方便性 低公害 低成本的要求 xff0c
  • CAN总线协议:标准CAN和扩展CAN

    CAN通讯协议是一个载波侦听 基于报文优先级碰撞检测和仲裁 xff08 CSMA CD 43 AMP xff09 的多路访问协议 CSMA的意思是总线上的每一个节点在企图发送报文前 xff0c 必须要监听总线 xff0c 当总线处于空闲时
  • 大疆M3508、M2006必备CAN总线知识与配置方法

    大疆M3508 M2006必备CAN总线知识与配置方法 文章目录 大疆M3508 M2006必备CAN总线知识与配置方法前言 xff1a 0x00 需要 额外的 CAN收发器 xff01 xff01 xff01 0x01 硬件层面分析为什么
  • linux-can编程(一)

    建立can的socket int can create socket char name int fd struct sockaddr can addr struct ifreq ifr socklen t len 61 sizeof ad
  • Linux Socket CAN——驱动开发(转)

    Linux Socket CAN驱动开发 一 CAN总线协议 CAN是Controller Area Network 控制器局域网 的缩写 CAN通信协议在1986年由德国电气商博世公司所开发 xff0c 主要面向汽车的通信系统 现已是IS
  • Nvidia jetson agx xavier can通讯失败,修改时钟源pllaon

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

    1 rtt中使能CAN1 2 CubeMX生成部分代码 xff0c 完成下面操作然后生成MDK ARM项目文件 3 将CubeMX生成的 HAL CAN MspInit 函数 粘贴到drv can c中 并在rt hw can init 函
  • QT5使用PCAN读取CAN数据

    文章目录 QT5使用PCAN读取CAN数据 CAN Bus example 重点讲解 pro文件 创建CAN bus Device 参数设置 接收报文 PCAN支持的QCanBusDevice ConfigurationKey类型 QT5使
  • Ubuntu系统周立功CAN驱动安装及常见问题

    文章目录 前言 一 步骤 1 检查是否安装libusb的库 2 驱动安装 3 测试 部分常见问题 前言 系统是ubuntu16系列 周立功的是usbcan 提示 以下是本篇文章正文内容 下面案例可供参考 一 步骤 1 检查是否安装libus
  • 一文读懂CAN总线及通信协议

    CAN总线的汽车 CAN概念 CAN是控制器域网 Controller Area Network CAN 的简称 是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的 并最终成为国际标准 ISO11898 是ISO国际标准化的串行通信
  • CAN与CANOpen(一)

    CAN与CANOpen 一 基本概念 CAN与CANOpen 二 报文格式 CAN与CANOpen 三 错误处理 CAN与CANOpen 四 CANOpen对象字典 CAN与CANOpen 五 PDO和SDO CAN与CANOpen 六 网
  • CAN总线的EMC设计方案

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

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

随机推荐

  • 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 总线上节点不分主