汽车CAN总线入门,通俗易懂

2023-05-16

附件:文档原件github

CAN总线简介

CAN(Controller Area Network,控制器局域网络) 属于工业现场总线的范畴。最初CAN总线是由德国的Bosch(博世)
公司为汽车监测,系统控制而设计的。由于其高性能,高可靠性及独特的设计,CAN总线越来越受到人们的重视。它在汽车领域得到广泛的应用,世界上几乎所有的汽车制造厂商都在使用。
在这里插入图片描述

CAN总线简史

CAN总线的发展历史在很大程度上代表着车载网络从产生到普及的过程,以下为总线发展的5个关键阶段。
1983年,德国的Bosch公司开发设计了CAN总线协议。
1987年,第一块CAN控制器芯片由Intel公司设计成功。
1990年,第一辆应用CAN总线的量产车Mercedes S-Class出现。
1991年,CAN2.0发布。
1993年,CAN成为国际标准ISO 11898(高速应用) 和 ISO11519(低速应用)。

CAN总线的特点

CAN的规范从CAN1.2规范 (标准规范) 发展为兼容CAN1.2规范的CAN2.0规范(CAN2.0A为标准格式,CAN2.0B为扩展格式),目前应用的CAN器件大多符合CAN2.0规范。

CAN总线是一种串行通信协议总线,其通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充,数据块编码,循环冗余检验,优先级判别等工作。

CAN总线的特点主要如下:
1)可以多主方式工作,网络上任意一个节点可以在任意时刻主动地向网络上地其他节点发送报文消息,不分主从,通信方式灵活。
2)采用无破坏性的基于优先级的逐位仲裁,标识符越小,优先级越高。若两个节点同时向网络上传送数据,优先级高的报文获得总线访问权,优先级低的报文会在下一个总线周期自动重发。
3)可以采用点对点,点对多及全局广播等传送方式收发数据。
4)直接通信距离可达到10Km(速率 5kb/s以下)。
5)通信速率最高可达1Mb/s (此时距离最长40米)。
6)节点数实际可达110个。
7)每帧信息都有CRC校验及其他检错措施,数据出错率极低。
8)通信介质可采用双绞线,同轴电缆和光导纤维,一般采用廉价的双绞线即可。
9)节点在错误严重的情况下,具有自动关闭总线的功能,以切断它与总线的联系,使总线上的其他操作不受影响。

CAN的两种标准介绍

CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。
ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同,但物理层不同。

(1) 关于 ISO11898
ISO11898 是通信速度为 125kbps-1Mbps 的 CAN 高速通信标准。
目前, ISO11898 追加新规约后,成为 ISO11898-1 新标准。

(2) 关于 ISO11519
ISO11519 是通信速度为 125kbps 以下的 CAN 低速通信标准。
ISO11519-2 是 ISO11519-1 追加新规约后的版本。
下图表示 CAN 协议和 ISO11898 及 ISO11519-2 标准的范围。
在这里插入图片描述

(3)物理层的不同点
如上图所示, ISO11898 和 ISO11519-2 在 CAN 协议中物理层的标准有所不同。 CAN 协议的物理层如下图所示,定义了三个子层, ISO11898 和 ISO11519-2 在物理层中的 PMA 层和 MDI 层有所不同。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CAN总线网络结构

CAN总线网络为半双工总线(同一时刻只能接收和发送数据)。

1,闭环总线网络
在这里插入图片描述
1)概述
can闭环通讯网络是一种遵循ISO11898标准的高速,短距离网络,它的总线最大长度40米,通信速度最高1Mbps,总线的两端各要求有一个120Ω的电阻
2)工作流程
->节点1的can控制器发送数据,通过CAN_Tx线传输至CAN收发器1
-> 差分成CAN高和CAN低两种信号至can总线上
-> 通过数据帧的参数传输至指定的节点N的收发器
-> 通过节点N的CAN_Rx传输至节点N的控制器解析

2,开环总线网络
在这里插入图片描述
1)概述
can开环总线网络是遵循ISO11519-2标准的低速,远距离网络,最大传输距离1KM,最高传输速率125kbps,两根线是独立的,不形成环路,要求每根总线上各串联个2.2千欧的电阻

2)工作流程
->节点1的can控制器发送数据,通过CAN_Tx线传输至CAN收发器1
-> 差分成CAN高和CAN低两种信号至can总线上
-> 通过数据帧的参数传输至指定的节点N的收发器
-> 通过节点N的CAN_Rx传输至节点N的控制器解析

那么!数据是以怎样的形式传输的呢?传输过程中数据是否会收到干扰?下面接着解答

数据是以差分信号传输的,差分信号又称为差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1
在这里插入图片描述
优点:
1)抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上, 而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。

2)能有效抑制它对外界的电磁干扰,同理,由于两根信号的极性相反,它们对外辐射的电磁场可以相互抵消,耦合的越紧密,泄放到外界的电磁能量越少。

3)时序定位精确,由于差分信号的开关变化是位于两个信号的交点,而不像普通单端信号依靠高低两个阈值电压判断,因而受工艺,温度的影响小,能降低时序上的误差,同时也更适合于低幅度信号的电路。

4)由于差分信号线具有这些优点,所以在USB协议,485协议,以太网协议及CAN协议的物理层中,都使用了差分信号传输。

CAN协议对它使用的CAN_High和CAN_Low表示的差分信号做了规定:
以高速CAN为例,当表示逻辑1时(隐性电平),CAN_High和CAN_Low线上的电压均为2.5V,即他们的电压差是0V;而表示逻辑0时(显性电平),CAN_High的电平是3.5V,CAN_Low的电平是1.5V,即电压差是为2V…
在这里插入图片描述

CAN协议层

-规定了数据通讯逻辑
1,CAN的报文种类及结构(主要讲数据帧)
数据帧以一个显性位(帧起始SOF,逻辑0)开始,以7个连续的隐性位(帧结束EOF,逻辑1)结束。
在它们之间,分别有仲裁段,控制段,数据段,CRC段和ACK段。

在这里插入图片描述
下面一起来拆分数据帧

1)数据帧-帧起始(SOF段)
在这里插入图片描述
SOF信号只有一个数据位,是一个显性电平,它用于通知各个节点将有数据传输,其他节点通过帧起始信号的电平跳变沿来进行硬同步。

2)数据帧-仲裁段
(当IDE为0时,表示标准标准格式帧。为1时,表示扩展帧)
在这里插入图片描述
当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输。
在这里插入图片描述
仲裁段ID的优先级也影响着接收设备对报文的反应。因为在CAN总线上数据是以广播的形式发送的,
所有连接在CAN总线的节点都会收到所有其他节点发出的有效数据,因而CAN控制器大多具有根据ID过滤报文的功能,
它可以控制自己只接收某些ID的报文。

3)数据帧-RTR,IDE,SRR
在这里插入图片描述
当RTR=逻辑0时,表示数据帧;=逻辑1时,表示遥控帧。
当IDE=0时,表示标准帧,1表示扩展帧。

4)数据帧-控制段
在这里插入图片描述
在控制段中的r1和r0为保留位,默认设置为显性位。它最重要的是DLC段(Data Length Code),数据长度码,它由四个数据位组成,用于表示本报文中的数据段含多少个字节,DLC段表示的数字是0~8 (因为数据段的大小是0到8字节大小)。

5)数据帧-数据段
在这里插入图片描述
数据段为数据帧的核心内容,它是节点要发送的原始信息,由0到8字节组成。

6)数据帧-CRC段
在这里插入图片描述

为了保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,一旦接收节点算出的CRC码和接收到的CRC码不同,则它会向发送节点反馈错误信息,利用错误帧请求它重新发送报文。CRC部分的计算一般由CAN控制器硬件完成,出错时的处理则由软件控制最大重发数。 在CRC校验码之后,有一个CRC界定符,它是隐性位,主要是把CRC校验码与后面的ACK段间隔开。

7)数据帧-ACK段
在这里插入图片描述
ACK段包括一个ACK槽位和ACK界定符位。类似I2C总线,在ACK槽位中,发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以应答。在ACK槽和帧结束之间由ACK界定符间隔开。

8)数据帧-EOF段
在这里插入图片描述

CAN波特率和位同步

由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点之间使用约定好的波特率进行通讯,特别地,CAN还会使用位同步的方式来抗干扰,吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

位时序分解
为了实现位同步,CAN协议把每一个数据位的时序分解成SS段,PTS段,PBS1段,PBS2段,这四段的长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,而一个完整的数据位有8~25个Tq组成。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系: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 在我
  • 通信接口五种主要的类型是什么?RS-232、485、CAN、USB

    笔者电子信息专业硕士毕业 xff0c 获得过多次电子设计大赛 大学生智能车 数学建模国奖 xff0c 现就职于南京某半导体芯片公司 xff0c 从事硬件研发 xff0c 电路设计研究 对于学电子的小伙伴 xff0c 深知入门的不易 xff0
  • STM32 CAN总线说明

    简介 xff1a CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986年率先提出 此后 xff0c CAN通过I
  • 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
  • socketcan_bridge 包 设置多路CAN口 小记

    参考链接 xff1a socketcan bridge ROS Wiki 基于ROS 43 CANopen的SocketCAN驱动在Ubuntu下的应用说明 SzZhangfq的博客 CSDN博客 ros socketcan socketc
  • 一帧CAN数据需要多长时间发送

    1 CAN通讯速率 默认 500kbit s xff1b 2 xff1a 从下图CAN数据包的完整结构可知 xff0c 一包完整的扩展帧CAN数据总共包含 128bit xff1b 3 xff1a 发送一帧扩展帧CAN数据耗时 128 50
  • CAN通信详解

    本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯 xff0c 并将结果显示在TFTLCD模块上 本章分为如下几个部分 xff1a 30 1 CAN简介 30 2 硬件设计 30 3 软件设计 30 4
  • Linux下CAN总线速率设置,socketCAN。

    背景 xff1a 飞思卡尔Freescale的ARM9处理器i MX25系列 socketCAN对于在Linux下操作CAN总线非常的快捷方便 xff0c 其配置方法和在Linux下对网卡的配置相似 xff0c 方法如下 xff1a 1 i
  • CAN总线数据帧/标准帧/扩展帧/远程帧/错误帧的组成格式对比

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

    为了利于回忆 xff0c 将自己查询到的资料在这里记录一下 资料一 xff1a 20条消息 NVIDIA Xavier CAN weifengdq的专栏 CSDN博客 资料二 xff1a 英文版Enabling CAN on Nvidia
  • 大疆M3508、M2006必备CAN总线知识与配置方法

    大疆M3508 M2006必备CAN总线知识与配置方法 文章目录 大疆M3508 M2006必备CAN总线知识与配置方法前言 xff1a 0x00 需要 额外的 CAN收发器 xff01 xff01 xff01 0x01 硬件层面分析为什么
  • Nvidia jetson agx xavier can通讯失败,修改时钟源pllaon

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

    准备 xff1a RT thread Studio 2 2 5 CubeMX 6 6 1 rt thread驱动包 4 0 3 1 新建项目 2 打开CubeMX Settings xff0c 设置CAN 找到CAN1 xff0c 并勾选激
  • kvaser pcie can 在ros中使用socketcan开发

    kvaser pcie can 在ros中使用socketcan开发 0 系统配置 Ubuntu 16 04 6 LTS Linux version 4 15 0 45 generic 1 官网下载地址 https www kvaser c
  • STM32F042 CAN使用例子

    代码如下 include mycan h CAN初始化 tsjw 重新同步跳跃时间单元 范围 1 3 CAN SJW 1tq CAN SJW 2tq CAN SJW 3tq CAN SJW 4tq tbs2 时间段2的时间单元 范围 1 8
  • CAN接口芯片MCP2515的波特率和滤波器设置问题

    配置波特率代码 MCP2515ByteWrite CNF1 3 MCP2515ByteWrite CNF2 0x80 PHSEG1 3TQ PRSEG 1TQ MCP2515ByteWrite CNF3 PHSEG2 3TQ 功能 波特率的
  • 【汽车电子】浅谈汽车四大总线:LIN、CAN、FlexRay、MOST

    目录 1 前言 2 汽车四大总线 2 1 LIN总线 2 1 1 LIN总线概述 2 1 2 LIN总线工作原理 2 2 CAN总线 2 2 1 CAN总线概述 2 2 2 CAN总线工作原理 2 2 3 CAN总线的优点 2 3 Flex
  • MCP2515独立控制器

    1 简介 MCP2515 是一款独立控制器局域网络 Controller Area Network CAN 协议控制器 完全支持 CAN V2 0B 技术规范 该器件能发送和接收标准和扩展数据帧以及远程帧 MCP2515 自带的两个验收屏蔽
  • 电池充放电自动测试系统介绍

    电池是国民经济的基础产品 广泛运用在交通运输 通讯 电力 铁路 国防 计算机 应急设备等各个领域 传统电池检测生产方式已经很难满足电池产品的市场需求 那么如何高效快速的进行电池产品的性能检测呢 今天就给大家介绍一款全能型电池测试系统 电池充
  • STM32F407 CAN1 CAN2

    注意CAN1可以单独使用 CAN2要开启CAN1时钟才能使用 u8 CAN1 Mode Init u8 mode GPIO InitTypeDef GPIO InitStructure CAN InitTypeDef CAN InitStr

随机推荐

  • ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境

    ur3 43 robotiq ft sensor 43 robotiq 2f 140 43 realsense d435i配置rviz xff0c gazebo仿真环境 搭建环境 xff1a ubuntu 20 04 ros Nonetic
  • QT-信号槽中传递自定义数据类型

    Qt编程一个核心亮点就是信号槽机制 通过 QMetaObject connect const QObject sender const char signal const QObject receiver const char method
  • ubuntu20.04安装MinkowskiEngine

    ubuntu20 04安装MinkowskiEngine 安装这个库之前首先确认环境中pytorch的cudatoolkit版本是否与安装的CUDA版本一致 xff0c 确保一致 xff0c 然后开始安装 我的CUDA版本是11 6 故采用
  • 运行roscore 出现[rosout-1] process has died [pid 13103, exit code 127

    运行roscore 出现 rosout 1 process has died pid 13103 exit code 127 问题 xff1a 运行roscore后出现该报错 xff1a rosout 1 process has died
  • Zookeeper异常解决方案

    目录 一 Starting Zookeeper FAILED TO START 1 查看错误日志信息 2 总结 二 bash ZookeeperServer sh command not found异常 2 总结 一 Starting Zo
  • 用端口映射的办法使用矩池云隐藏的vnc功能

    矩池云隐藏了很多高级功能待用户去挖掘 租用机器 进入jupyterlab 设置vnc密码 span class token assign left variable VNC PASSWD span span class token oper
  • Linux apt-get autoremove千万别乱用

    使用linux下的apt get autoremove命令的心得体会 前几天在实验室搭建要做人工智能项目的环境时 xff0c 由于未解决python2 7和python3 6共存时 xff0c 只利用python2 7版本的库文件 xff0
  • 基于gazebo实现多机器人编队仿真(三)

    基于gazebo实现多机器人编队仿真 xff08 三 xff09 三角编队与一字编队的实现 前言原理简图代码实现虚拟坐标的发布跟随者消息接收 总结 前言 前文已经阐述了多机器人的编队模型实现与多辆小车跟随的实现 xff0c 本文以通过tf通
  • 天猫精灵通过AliOS网桥控制Zigbee设备

    天猫精灵对接AliOS 设备 The article is released under license CC BY NC ND 4 0 IoT Boot Camp系列课程是由TorchIoTBootCamp团队发起 xff0c 广大IoT
  • 什么是最长前缀匹配?为什么网络前缀越长,其地址块就越小,路由就越具体?

    使用 CIDR 时 xff0c 路由表中的每个项目由 网络前缀 和 下一跳地址 组成 在查找路由表时可能会得到不止一个匹配结果 应当从匹配结果中选择具有最长网络前缀的路由 xff1a 最长前缀匹配 longest prefix matchi
  • STM32 模拟串口(UART)使用

    学习目标 xff1a 由于在项目中需要用到多路的串口使用 xff0c 而自己的单片机目前来讲没法满足我们项目所需要的串口需求 xff0c 因此要对普通的GPIO进行转换为UART进行使用 从而使得我们单片机能够得到多一路的串口 学习内容 x
  • Linux(ubuntu) 基础

    本文主要讲解一些有关linux下的相关知识 xff1a 文章目录 一 shell 命令二 文件系统三 ubuntu磁盘管理操作四 Ubuntu下压缩和解压缩五 ubuntu用户和组六 ubuntu 文件权限管理七 Linux连接文件操作八
  • CentOS-7.2部署Squid服务

    一 安装Squid代理服务器 yum y install squid 1 启动Squid服务和设置开机启动 systemctl start squid systemctl enable squid 2 详解Squid服务器配置文件 默认的
  • 【Docker系列】Docker Swarm

    docker swarm 介绍 为什么不建议在生产环境中使用docker compose xff1f docker compose 单节点的问题 xff0c 多个实体机就无法适应的 多机器如何管理 xff1f 如果跨机器做scale横向扩展
  • 【mysql】远程连接服务器数据库出现 Client does not support authentication protocol requested by server的解决方法

    前言 之前已经配好了本地数据库与云服务器上的数据库的连接 xff0c 也能正常进行操作 几个月后某天打开navicat想打开此连接却弹出了个错误提示窗口 xff0c 显示Client does not support authenticat
  • Ubuntu16.04系统卡顿,刷新率低,输入有延迟

    问题 xff1a 从某次开机之后ubuntu就一直卡顿 xff0c 原本以为是cscode占用过大 xff0c 在删除部分文件后没有改善 xff0c swp也未使用 每次挂起重加载也经常出现失败的情况 在不断查找资料及更改配置文件之后 xf
  • vs code git配置及使用

    一 下载及安装git程序 浏览器中搜索git官网 xff1a https git scm com download win进行程序下载 xff0c 根据自己的系统选择不同版本 xff08 32 bit Git for Windows Set
  • 根文件系统rootfs的移植及制作镜像ramdisk.img

    根文件系统的移植 介绍 1 移植根文件系统的工具 gt busybox 1 短小精悍 2 版本更新较快 xff0c 版本之间差异不大 2 如何获取busybox 1 xff09 https busybox net downloads 选择b
  • 解决linux共享文件夹丢失的问题

    虚拟机已经设置了共享文件夹 xff0c ubuntu里 mnt hgfs 没有共享文件夹 在终端输入此命令 xff0c 即可恢复 xff08 前提必须有vmware tools安装过了 xff09 sudo vmhgfs fuse host
  • 汽车CAN总线入门,通俗易懂

    附件 xff1a 文档原件github CAN总线简介 CAN xff08 Controller Area Network xff0c 控制器局域网络 xff09 属于工业现场总线的范畴 最初CAN总线是由德国的Bosch 博世 公司为汽车