什么是CAN总线?

目录

1 CAN总线简介

2 CAN总线物理结构

2.1 CAN总线原理

2.2 CAN总线和I2C

3 CAN的电气属性

4 CAN帧的种类

4.1 CAN帧的种类

4.2 数据帧

4.3 遥控帧


CAN总线简介

1.1 CAN是什么?

CAN总线,全称为Controller Area Network,即控制器局域网,CAN 总线最初是由德国电气商博世公司开发,其最初动机就是为了解决现代汽车中庞大的电子控制系统之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。

1.2 CAN总线特点

  •  多主方式:可以多主方式工作,网络上任意一个节点均可以在任意时刻主动地向网络上的其他节点发送信息,而不分主从,通信方式灵活。

  • 系统柔软性:由于CAN总线的设计允许节点自主决定何时发送数据,这使得系统能够灵活地适应不同的通信需求和条件。

  • 速度快,距离远:CAN总线支持较高的数据传输速率,并且可以在较长的距离上稳定传输数据,这得益于其高效的通信协议和抗干扰能力。

  • 具有错误检测、错误通知和错误恢复功能:CAN总线使用循环冗余校验(CRC)等机制来检测数据在传输过程中是否出现错误。当检测到错误时,节点会发送错误帧,以通知网络上的其他节点。在检测到错误后,系统可以采取相应的措施,如重传数据,以确保数据的正确传输。

  • 故障封闭功能:CAN总线能够将故障节点隔离,防止故障扩散到整个网络,从而保证系统的稳定性。

  • 连接节点多:CAN总线理论上可以支持多达110个节点,这使得它非常适合大规模的网络通信。 

2 CAN总线物理结构

2.1 CAN总线原理

CAN 控制器根据两根线(CAN_H、CAN_L)上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。显性电平为逻辑 0,隐性电平为逻辑 1。发送方通过使总线电平发生变化,将消息发送给接收方。

1)CAN总线硬件电路一般包括

  • 微控制器(如51单片机):负责处理数据和控制通信。
  • CAN控制器(如SJA1000):负责CAN协议的实现和数据帧的生成。
  • CAN收发器(如PCA82C250):将CAN控制器的数字信号转换为适合在CAN总线上传输的电信号。

2)一些现代微控制器,如STM32系列,已经将CAN控制器集成到芯片内部,因此只需要外加一个CAN收发器,如SN65HVD230,来完成信号的转换。

3)CAN总线由两条线组成:CAN_H(高电平)和CAN_L(低电平),它们通过差分信号传输数据,以提高抗干扰能力,通常使用带屏蔽的双绞线来减少电磁干扰。

2.2 CAN总线和I2C

CAN总线和I2C(Inter-Integrated Circuit)总线都是用于设备间通信的串行通信总线协议,但两者有以下不同点:

  • 用途不同:CAN总线通常用于工业控制、汽车网络等高可靠性应用,而I2C通常用于低速控制和数据传输。
  • 速率不同:CAN总线速率可以高达1 Mbps,而I2C总线通常在400 Kbps以下。
  • 线路不同:CAN总线使用双绞线,I2C总线则可以使用双线、三线和四线架构,其中最常见的是双线架构。
  • 地址机制不同:CAN总线使用11位或29位标准帧标识符来识别设备,而I2C总线使用7位或10位设备地址来寻址。
  • 工作方式不同:CAN总线是多主机环境下的异步通信协议,而I2C总线通常在单主机环境下的同步通信协议。

总的来说,虽然CAN总线和I2C总线都是串行通信协议,但它们的应用场景和特点有所不同。

3 CAN的电气属性

CAN总线的电平信号是差分信号,它使用两条线(CAN_H和CAN_L)来传输数据。差分信号的一个主要优点是它对外部电磁干扰具有较好的抗干扰能力。

  • 如果CAN控制器发送逻辑1时,CAN收发器使CAN_H和CAN_L都为2.5V,这时,两条线上的电压差为0V。总线上称为隐性电平。
  • 如果CAN控制器发送逻辑0时,CAN收发器使CAN_H为3.5V,CAN_L为1.5V,这时,两条线上的电压差为2V。总线上称为显性电平。
  • 多个节点同时开始发送时,会涉及到总线仲裁。

4 CAN帧的种类

4.1 CAN帧的种类

CAN(Controller Area Network)协议定义了几种不同类型的数据帧,以下是CAN帧的基本种类:

数据帧用于发送单元向接收单元传送数据的帧。
遥控帧用于接收单元向具有相同 ID 的发送单元请求数据的帧。
错误帧当CAN节点检测到错误时发送,用于通知网络上的其他节点存在错误。(硬件自动完成)
过载帧

当CAN节点无法在当前的波特率下处理接收到的数据时发送。(硬件自动完成)

帧间隔用于将数据帧及遥控帧与前面的帧分离开来的帧(硬件自动完成)

帧的种类有很多,其中错误帧、过载帧、帧间隔都是由硬件完成的,没有办法用软件来控制。对于一般使用者来说,只需要掌握数据帧与遥控帧。

4.2 数据帧

数据帧由7个段组成,分别为:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。

  • 帧起始 :表示数据帧开始的段。
  • 仲裁段:表示该帧优先级的段。
  • 控制段:表示数据的字节数及保留位的段。
  • 数据段:表示数据的内容的段,可发送 0~8 个字节的数据。
  • CRC 段:检查帧的传输错误的段。
  • ACK 段:表示确认正常接收的段。
  • 帧结束:表示数据帧结束的段。

数据帧的发送过程:

  • 当总线空闲时,发送节点开始发送帧起始位。
  • 接着发送仲裁段和控制段。
  • 如果DLC不为零,则发送数据段。
  • 然后发送CRC段,用于错误检测。
  • 如果接收节点正确接收了帧,它会在ACK段将ACK槽置为显性,表示确认。
  • 最后,发送节点发送帧结束位,完成数据帧的发送。

仲裁段

仲裁段分为标准格式(11位)以及扩展格式(29位)。

  • ID位,标准格式的标识符长度的是11位,扩展格式的标识符长度的是29位,仲裁段中的ID号用于标识帧的唯一性并决定其在总线上的优先级。ID号越小,帧的优先级越高,
  • RTR位,用于表明此帧是数据帧还是远程帧。
  • IDE位,用于表明此帧是标准帧还是扩展帧。
  • ID位,扩展格式的标识符长度加起来是29位;
  • RTR位,用于表明此帧是数 据帧还是远程帧。

控制段

紧跟在仲裁段之后,为CAN网络中的节点提供关于即将传输数据的重要信息。以下是控制段的详细说明:

  • DLC(数据长度代码):控制段中的DLC字段是一个4位的字段,用于指示数据段中字节的数量。
  • RTR(远程传输请求位):在数据帧中,RTR位是显性的(逻辑"0"),表示这是一个包含实际数据的帧。而在遥控帧中,RTR位是隐性的(逻辑"1"),表示这是一个请求数据的帧。
  • IDE(标识符扩展位):仅在扩展格式的帧中存在,用于指示接下来的仲裁段是标准格式(11位ID)还是扩展格式(29位ID)。

4.3 遥控帧

CAN总线的遥控帧(Remote Frame),实际上是一种请求数据的帧。当一个节点需要从另一个节点请求数据时,它会发送一个遥控帧,这个帧只包含仲裁段和控制段,不包含数据段。

遥控帧组成

发送节点通过发送遥控帧来请求具有特定ID的数据。当接收节点识别到与其ID匹配的遥控帧时,它会响应并发送一个数据帧,其中包含请求的数据。这种方式的好处是,只需要一帧的时间就能完成一次双向交互,提高了通信的效率 。遥控帧组成如下:

  • 帧起始(SOF):表示帧开始的段。
  • 仲裁段:包含标识符(ID)和远程发送请求位(RTR),RTR位为隐性(1),表明这是一个遥控帧。
  • 控制段:包含数据长度代码(DLC),但在遥控帧中,DLC的值通常设置为0,因为遥控帧不包含数据段。
  • CRC段:用于检查帧传输过程中的错误。
  • ACK段:用于确认帧已被正常接收。
  • 帧结束:表示遥控帧结束的段。

数据帧与遥控帧的区别

  • 数据帧和遥控帧在格式上非常相似,但遥控帧缺少数据段。
  • 数据帧的RTR位为显性(0),表示传输的是数据;而遥控帧的RTR位为隐性(1),表示传输的是请求 5。

遥控帧的应用场景

  • 遥控帧在需要周期性地从某个节点获取数据时非常有用,例如在汽车或工业自动化系统中,中控机可能需要定时获取传感器的实时数据。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/800364.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Ubuntu】安装使用pyenv - Python版本管理

当我们在Ubuntu上使用Python进行开发的时候,可能会遇到版本不兼容的问题,当然你可以选择使用apt的方式安装不同版本的python环境 但是存在一定的问题:安装不同版本的Python通常不会改变默认的python3命令指向的版本,而且就算你进行…

《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸

当攻击者获得一个容器环境的shell权限时,攻击者往往会尝试进行容器逃逸,利用容器环境中的错误配置或是漏洞问题,从容器成功逃逸到宿主机,从而获取到更高的访问权限。 在本节课程中,我们将详细介绍一些常见的容器逃逸方…

知识付费小程序源码 thinkphp后台 带3000多条教程数据

知识付费小程序源码 thinkphp后台 带3000多条教程数据,云码素材有进行了更新开发,更新了广告位管理,后台一键更新数据,用户登录 不单单是一个源码,我们对接了云码素材的教程资源,也就是说你可以免费拥有云码素材所有教程资源,后台一键更新,无须自己再更新资源,每天有我们更新,…

【嵌入式开发 Linux 常用命令系列 4.4 -- repo 工具安装】

请阅读【嵌入式开发学习必备专栏 】 文章目录 Repo 工具下载Repo 安装Multiple Git Repository Tool Repo 工具下载 Repo 官网链接 Repo 安装 方法一: # Debian/Ubuntu. $ sudo apt-get install repo# Gentoo. $ sudo emerge dev-vcs/repo方法二: $ …

系统架构设计师 - 系统配置与性能评价

系统配置与性能评价 系统配置与性能评价(0 - 2分)性能指标 ★ ★硬件软件性能调整 阿姆达尔解决方案 ★性能评价方法 ★ ★ ★ 大家好呀!我是小笙,本章我主要分享系统架构设计师 - 系统配置与性能评价知识,希望内容对你…

4.定时器

原理 时钟源:定时器是内部时钟源(晶振),计数器是外部计时长度:对应TH TL计数器初值寄存器(高八位,低八位)对应的中断触发函数 中断源中断处理函数Timer0Timer0_Routine(void) interrupt 1Timer1Timer1_Routine(void) …

ubuntu虚拟机安装ssh时报错 正在等待缓存锁

问题: 连接vm ubuntu虚拟机安装ssh时报错 正在等待缓存锁。 sudo apt install openssh-server 处理办法 sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock

关于SQLException: Illegal mix of collations (`utf8mb4_general_ci,IMPLICIT`)...错误

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、报错信息三、最后 开篇说明 记录一个查询错误 场景:数据库之间某表复…

写python代码,怎么用工厂模式思维设计接口?

接口的好处 接口就是抽象方法,用来设计后架构,后端开发者和客户端调用者都可以使用这个接口规则同步写代码,客户端调用者(app、网页甚至时自动化接口测试)不用担心后端对接口的实现细节具体是什么样子的。直接去调用就…

数据结构--二叉树遍历

目录 1.介绍 (1)前序遍历 (2)定义结构体 (3)前序遍历实现 (4)中序遍历实现 (5)二叉树的节点个数 (6)二叉树树叶节点个数 &…

SpringBoot整合Swagger报错:Failed to start bean ‘documentationPluginsBootstrapper

文章目录 1 问题背景2 问题原因3 修改SpringBoot配置文件 application.properties参考 1 问题背景 Swagger是SpringBoot中常用的API文档工具,在刚接触使用的时候,按照通用的代码进行配置,发现报错了 [main] ERROR org.springframework.boot…

计算机的错误计算(三十二)

摘要 在计算机的错误计算(二十八)与(三十 一)中,我们探讨了 Visual Studio 对 6个随机exp(x)函数的计算精度问题。根据网友的反馈,本节将展示 Python 对它们的输出:结果几乎与 Visual Studio …

DataBricks Best Practice for Delta Lake

本文介绍了使用 Delta Lake 时的最佳做法。 Databricks 建议使用预测性优化。 请参阅 Delta Lake 的预测性优化。 删除并在同一位置重新创建表时,应始终使用 CREATE OR REPLACE TABLE 语句。 请参阅删除或替换 Delta 表。 移除旧版 Delta 配置 Databricks 建议在升…

实现将Nginx的每个网站配置单独的访问日志

一、问题描述 Nginx默认的访问日志是不会区分哪个网站有哪些日志的,全部糅杂在一起;如果需要哪个网站有哪些访问日志记录,还需要将访问日志下载下来后筛选,比较麻烦;希望将每个网站对应的日志能够单独记录到对应的日志文件里面,方便排查和管理。 # 进入Nginx默认的日志文…

FastAPI 学习之路(四十九)WebSockets(五)修复接口测试中的问题

其实代码没有问题,但是我们忽略了一个问题,就是在正常的开发中,肯定是遇到过这样的情况,我们频繁的有客户端链接,断开连接,需要统一的管理这些链接,那么应该如何管理呢。其实可以声明一个类去管…

Spring容器Bean之XML配置属性的细节

1、简单值注入使用&#xff1c;property&#xff1e;的value属性可以换一种写法 2、简单值注入使用&#xff1c;property&#xff1e;的value属性值中有些特殊的字符&#xff0c;比如< 、> 的时候可以用包裹 3、对象注入使用&#xff1c;property&#xff1e;的ref属性时…

二 GD32 MCU 烧录说明

GD32 MCU提供了多种烧录方法&#xff0c;可在调试和生产等阶段进行便捷的烧录。GD32目前主要烧录方法有ISP烧录、SWD/JTAG在线下载、脱机烧录三种类型。 ISP烧录&#xff1a;使用串口或USB即可烧录&#xff0c;无需特殊工具支持。可根据协议自行定制下载方式&#xff0c;需要控…

请你谈谈:AnnotatedBeanDefinitionReader 显式地注册一个Bean到Spring容器,以及注册并解析配置类

为了深入探讨Spring框架中的beanDefinition对象&#xff0c;我们不可避免地要提及BeanFactoryPostProcessor这一核心类&#xff0c;它作为Spring的bean工厂后置处理器发挥着关键作用。接下来&#xff0c;我们将详细讨论BeanFactoryPostProcessor的执行时机&#xff0c;这是一个…

人工智能 (AI) 应用:一个高精度ASD 诊断和照护支持系统

自闭症谱系障碍&#xff08;ASD&#xff09;是一种多方面的神经发育状况&#xff0c;影响全球大约1/100的儿童&#xff0c;而在中国&#xff0c;这一比例高达1.8%&#xff08;引用自《中国0&#xff5e;6岁儿童孤独症谱系障碍筛查患病现状》&#xff09;&#xff0c;男童为2.6%…

ns3-gym入门(三):在opengym基础上实现一个小小的demo

因为官方给的"opengym""opengym-2"这两个例子都很简单&#xff0c;所以自己改了一个demo&#xff0c;把reward-action-state相互影响的关系表现出来 一、准备工作 在ns3.35/scratch目录下创建一个文件夹&#xff1a; &#xff08;后续的运行指令后面都需要…