【嵌入式】CAN总线详解

【嵌入式】CAN总线详解

一、CAN总线简介

CAN总线是一种控制器局域网总线,每一个挂载在CAN局域网的设备,都可以利用CAN去发送信息,也可以接收局域网的各种信息,每个设备都是平等的,共享CAN的资源。广泛应用于汽车、嵌入式和工业控制等领域。

总线特征:

  • 两根通信线路(CAN_H, CAN_L)路线少,无需共地
  • 差分信号通信,抗干扰能力强
  • 异步通信,无需时钟线,通信速率由设备各自约定
  • 半双工,可挂载多个设备,多个设备同时发送数据会通过仲裁判断先后顺序
  • 11位/29位报文ID,用于区分消息功能和优先级
  • 可配置1~8Byte有效载荷
  • 包括广播式和请求式两种传输方式

CAN总线一共有五种帧
在这里插入图片描述

二、CAN物理层

2.1 CAN硬件电路

在CAN中,每个设备通过CAN收发器挂载在CAN总线网络上。CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CAN_H和CAN_L分别与总线的CAN_H和CAN_L相连。CAN总线分为高速CAN总线和低速CAN总线两种
在这里插入图片描述

2.2 CAN的电平标准

高速CAN规定,电压差为0V的时候表示为逻辑1(隐形电平),电压差为2V的时候为逻辑0(显性电平)
低速CAN规定,电压差为-1.5V的时候表示为逻辑1(隐性电平),电压差为3V的时候表示为逻辑0(显性电平)。低速CAN传输距离更远,因此有可能有压降,所以他的显隐性之间的电压差更大。但是这也使得他的显隐性切换所需的时间更大,因此低速CAN传输速率不如高速CAN。

显性和隐性表示的是总线的状态,两线自然状态下的默认状态为隐性状态。而逻辑0和逻辑1则是电路约定俗成的逻辑规定
在这里插入图片描述

在这简单提一嘴STM32用的CAN收发器——TJA1050。其实其他MCU也能用,大概是会将MCU输出的高低电平通过电路转化为CAN标准中的逻辑0和逻辑1。同样,CAN总线上传输的数据也会通过该收发器转化为高低电平。这主要是因为MCU的0和1的实际电路表示是和CAN总线的不一样。详情可以看High speed CAN transceiver TJA1050中文数据手册

2.3 CAN物理层汇总

在这里插入图片描述

三、CAN总线的帧格式

在物理层上规定了0和1的表示方式之后,就需要对01数据流进行定义,定义每一位的具体意思,汇总成协议,供CAN总线及其各个设备的解析和通信使用。CAN协议规定了以下五种类型的帧
在这里插入图片描述

3.1 数据帧

数据帧组成如下:
在这里插入图片描述
图中灰色表示必须为显性(0),白色表示必须为隐形(1),紫色则表示是我们可以自行制定的位。

首先,在发送之前,总线一定要处于空闲状态,也就是隐性电平(1),数据帧第一位则以显性电平(0)作为起始位

  • 仲裁段:发送起始位之后则是连续11位的报文ID,用于表明身份。RTR为远程请求标志位, 用于区分是数据帧还是遥控帧,在数据帧里为显性0
  • 控制段:控制端第一个是IDE,为ID扩展标志位,用于标志是标准格式还是扩展格式,标准格式为0,扩展格式为1。本文主要讲标准模式。接下来的r0为保留位。然后是4位的DLC,用于表达数据段的长度,以字节为单位 。、
  • 数据段:长度为0~64位,根据DLC的值确定
  • CRC段:使用CRC循环冗余检测码的CRC段,长度16,包含15位CRC码和一位的CRC界定符,界定符必定为隐性1
  • ACK段:包括ACK槽和ACK界定符,用于标记该数据帧是否有设备收到。发送方在发送数据帧到ACK段的时候,则会释放总线,总线回归到隐性1。任意接收方读取数据帧读取到ACK位的时候,都会拉开总线,使得总线处于显性0的状态。发送方释放总线,会读取总线状态,如果发现总线为显性0,则表示该数据帧有至少一个接收方接收到了;否则则没人收到。需要注意的是,一个数据帧并不是发送方全部发送一整个帧后再等待应答的,而是发送方再ACK位上交出控制权,和接收方共同完成了整个帧的发送
  • 结束段:发送方发送七个隐性1,作为EOF,表示结束

接下来简单说一下扩展模式,扩展模式的用途是扩展ID段。当IDE位为1的时候,原RTR位变为闲置的SRR位,则接下来的18位为扩展的ID段和一位的RTR,然后再接一位的IDE,此时的IDE固定为隐性1

3.2 遥控帧

遥控帧主要用于主动请求设其他设备发送数据,无数据负载。他和数据帧十分类似。
在这里插入图片描述
广播式发送数据指的是发送方会按照一定频率发送帧。而请求式发送数据,则是设备A发送请求B发送数据的遥控帧,然后数据B收到请求后发送数据帧。主要是通过RTR位区分遥控帧和数据帧,当RTR为隐性1的时候,为遥控帧。遥控帧中的ID字段则是表示请求的目标ID。

3.3 错误帧

在这里插入图片描述
总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备。错误帧可以叠加在数据帧上,并且可以破坏数据帧。

3.4 过载帧

当发送方发送太快,接收方接受不来的时候,会发送过载帧,破坏发送方发送的帧内容,这会导致发送方的CRC校验不通过,然后发送方就会重试。在破坏和重试之间,一方面会延缓数据的发送,另一方面间接告诉发送方,接收方暂时收不了,发送方可以调整发送速率。
在这里插入图片描述

3.5 帧间隔

将数据帧和遥控帧与前面的帧分离开,分为主动错误和被动错误:主动错误为3位间隔,被动错误位三位帧间隔加8位延迟传输。此处不展开
在这里插入图片描述

3.6 位填充

除了常用数据帧之外,CAN总线协议还会进行位填充。

位填充规则:发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据。

  • 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机
  • 将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性。因为错误帧会出现连续六个的相同电平,可以一眼看出是错误帧。
  • 保持CAN总线在发送正常 数据流时的活跃状态,防止被误认为总线空闲。CAN协议规定连续11个隐性1会被认为是空闲。

第四章 位同步

CAN总线没有时钟线,是一种异步通信总线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长。发送方和接收方会以指定的速率进行数据收发。但是这样还会有一些问题:

  1. 接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近
    在这里插入图片描述
  2. 接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离
    在这里插入图片描述
    这就需要位同步机制来保证同步采集。同步机制中一个关键的概念是位时序

为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成

其中每个段的长度可以自定义:SS = 1Tq,PTS = 1~8Tq,PBS1 = 1~8Tq, PBS2 = 2~8Tq。CAN协议要求跳变沿必须出现在SS段,如果跳变沿出现在其他时段,则会使用同步机制进行同步。

PTS负责容纳总线上信号传播的延时。PBS1和PBS2用于控制采样点,理想采样点应该出现在PBS1和PBS2中间,通过设定PBS1和PBS2的长度,可以控制采样点的位置

4.1 硬同步

硬同步负责将接收方的第一个采样点和波形的第一位对齐。当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF的下降沿时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步

这样,接收方和发送方的时钟就完成了硬同步,硬同步主要解决第一类同步问题
在这里插入图片描述

4.2 再同步

再同步主要解决第二类同步问题

若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据再同步补偿宽度值(SJW)通过加长PBS1段,或缩短PBS2段,以调整同步。一般SJW设置在1~3Tq,这取决于各个设备之间的时间精度。

再同步可以发生在第一个下降沿之后的每个数据位跳变边沿。这也是为什么需要进行位填充,因为电平长时间不跳变,那会无法进行再同步机制,会导致位之间的间隔变得模糊。
在这里插入图片描述

五 总线的资源分配规则

CAN总线上只有一对差分信号线,因此同一个时间只能由要给设备操作总线发送数据,我们需要指定资源分配规则,依次满足多个设备发送的需求

5.1 先到先得

若当前已经有设备正在操作总线发送数据帧/遥控帧,则其他任何设备不能再同时发送数据帧/遥控帧(可以发送错误帧/过载帧破坏当前数据)

那么怎么表示总线空闲呢?任何设备检测到连续11个隐性电平,即认为总线空闲。

5.2 非破坏性仲裁

若多个设备的发送需求同时到来或因等待而同时到来,则CAN总线协议会根据ID号(仲裁段)进行非破坏性仲裁,ID号小的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送

首先非破坏仲裁有两个要求:

  1. 线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态,只有当所有设备都发送隐性电平1时,总线才呈现隐性电平1状态
  2. 回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实的发送出去了,根据线与特性,发出显性0读回必然是0,发出隐性1读回不一定是1,因为总线上可能会有别的设备在发送显性0

接下来我们详细了解CAN中的仲裁机制和依据:
简单来讲,其仲裁机制为:数据位从前到后依次比较,出现差异且数据位为1的设备仲裁失利

以下图为例,有两个单元同时发送数据,首先两个SOF段都是隐性1,然后接着是仲裁段,里面是报文ID号,直到红色部分,单元1发送了隐性1,单元2发送了显性0,在总线上显示为显性0。对于单元2,发送和回读数据一致,继续发送;对于单元1,发送和回读数据不一致,证明有设备在和它一同发送数据,并且其仲裁段ID号比设备1小(ID小者优先级高),那么设备1则仲裁失利,停止发送推迟到下一个帧再次发送。
在这里插入图片描述
当ID号一样的时候,数据帧优先级高于遥控帧,因为RTR位中数据帧为显性0,遥控帧为隐性1。换个说法,遥控帧是申请数据的,数据帧是发送数据的,那自然是优先发送负载有别人需要的数据的数据帧

同样,标准格式优先级高于扩展格式,因为IDE位标准格式为显性0,扩展格式相反

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

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

相关文章

101.qt qml-自定义日历控件2-附带动画效果

黑色风格截图如下所示: 白色风格如下所示: GIF效果如下所示: 1.控件使用介绍 QianWindow2.5版本及以上提供,源码位于:qrc:/common/qmlQianDateTime/QianCalendarInputField.qml QianWindow2.5版本及以上提供,示例使用代码位于:qrc:/pages/QianControlPages/QianDateTimeP…

金鸣识别:图片转excel的“黑科技”神器

近期,我意外发现了一个令人惊艳的工具——金鸣表格文字识别系统。起初,我只是出于好奇尝试了一下,但使用体验远远超出了我的预期,让我深感其价值。 在日常生活和工作中,我们经常需要从各类图片中提取文字信息&#xf…

express+vue在线im实现【一】

在线体验地址 需要用邮箱注册一个账号 在线链接 目前实现的功能 1、在线聊天(群聊) 2、实时监控成员状态 3、历史聊天,下拉加载 4、有新消息,自动滚动到最新消息,如果自己在查看历史记录,不会强行滚动 后续计划新增功能 感兴…

Java健身私教服务师傅小程序APP源码(APP+小程序+公众号+H5)

私人定制的健身之旅 🏋️ 引言:探索私人健身新纪元 在现代都市的快节奏生活中,越来越多的人开始注重身体健康和健身塑形。然而,传统的健身房模式可能无法满足每个人的个性化需求。这时,一款名为“健身私教服务师傅”的…

Spring IoC【控制反转】DI【依赖注入】

文章目录 控制反转(IoC)依赖注入(DI)IoC原理及解耦IoC 容器的两种实现BeanFactoryApplicationContext IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想&…

centos7.9部署k8s的几种方式

文章目录 一、常见的k8s部署方式1、使用kubeadm工具部署2、基于二进制文件的部署方式3、云服务提供商的托管 Kubernetes 服务4、使用容器镜像部署或自动化部署工具 二、使用kubeadm工具部署1、硬件准备(虚拟主机)2、环境准备2.1、所有机器关闭防火墙2.2、…

Cisco Catalyst 9800 wireless Controller配置操作指引

一、控制器基本信息 外立面信息: 硬件规格如下: 序号 硬件规格满配能力1业务端口 4个1G/10G光口 2 冗余端口 1个GE电口或1G光口 3 最大管理AP数量 20004 最大接入客户端数量 320005 最大WLAN数量(SSID) 40966电源模块数量 2 7 最大吞吐量 40 …

云计算 | (四)基本云安全

文章目录 📚基本云安全🐇云安全背景🐇基本术语和概念⭐️风险(risk)⭐️安全需求🐇威胁作用者⭐️威胁作用者(threat agent)⭐️匿名攻击者(anonymous attacker)⭐️恶意服务作用者(malicious service agent)⭐️授信的攻击者(trusted attacker)⭐️恶意的内部人员(mal…

Neo4j Desktop界面认识以及数据库备份与还原

Neo4j Desktop界面认识以及数据库备份与还原 neo4j 版本信息:Neo4j Desktop Version 1.5.9;neo4j 5.12.0 系统信息:windows 11 Neo4j Desktop 界面 每个 Project 下可以有多个 DBMS,而每个 DBMS 中默认有 system 和 neo4j (def…

想要做好短视频?这5大关键点你知道吗?沈阳短视频剪辑培训

在新媒体运营中,短视频已成为抓住观众注意力的重要工具。制作成功的短视频需要细心规划和精确执行。今天小编就围绕做好短视频的五大关键点,为大家进行详细解析,帮助您提升视频的吸引力和效果。 做好短视频的5大关键点 01内容策划&#xff1…

新闻稿标题怎么写吸引人?建议收藏

一个好的标题,不仅能激发读者的好奇心,还能引导他们继续深入了解文章内容。本文伯乐网络传媒将为你揭秘新闻稿标题写作的十大技巧,让你轻松写出吸引人的标题。 1. 激发好奇心 a. 提出疑问:以问句的形式提出问题,让读者…

BetterZip 5软件安装包下载

BetterZip是一款功能强大的Mac解/压缩软件,可以满足用户对文件压缩、解压、加密和保护等方面的需求。以下是关于BetterZip软件的主要功能、特点和使用方法的详细介绍,以及对其用户友好度、稳定性和安全性的评价。 安 装 包 获 取 地 址: BetterZip 5-安…

PHP邮箱服务器搭建与配置教程?如何使用?

PHP邮箱服务器搭建的步骤?服务器搭建的注意事项? 在当今的数字化时代,电子邮件仍然是沟通和业务处理的重要工具之一。通过PHP搭建和配置一个邮箱服务器,您可以实现自主掌控邮件系统,确保数据的安全性和隐私性。AokSen…

英语学习笔记37——Making a bookcase

Making a bookcase 做书架 词汇 Vocabulary work v. 工作 ing形式:working 搭配:work on 工作 做……工作    work for 人 为……而工作 例句:我正在做我的家庭作业。    I am working on my homework.    我正在为Bobby工作。 …

使用 Cheerio 和 Node.js 进行网络搜刮 2024

Web scraping 是一种强大的技术,用于从网站提取数据,广泛应用于数据分析、市场研究和内容聚合。截至2024年,利用 Cheerio 和 Node.js 进行 web scraping 仍然是一种流行且高效的方法。本文将深入探讨使用 Cheerio 和 Node.js 进行 web scrapi…

机械师电脑文件丢失怎么办?6个恢复方法,希望能帮到您

机械师电脑作为高性能的计算机品牌,受到众多用户的青睐。然而,即便是品质卓越的电脑,也难免会遇到文件丢失的困扰。无论是由于误操作、系统故障还是硬盘损坏,文件丢失都可能给用户带来不小的麻烦。当您发现机械师电脑上的文件突然…

win10能用微信、QQ,不能打开网页

今天上班,打开电脑,突然遇到一个问题,发现QQ、微信可以登录,但是任何网页都打不开,尝试了重启电脑和路由器都不行,最终解决了电脑可以访问网页的问题,步骤如下: 1、打开电脑的网络设…

python之对接有道翻译API接口实现批量翻译

内容将会持续更新,有错误的地方欢迎指正,谢谢! python之对接有道翻译API接口实现批量翻译 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取&…

使用 C# 进行面向对象编程:第 10 部分

封装和抽象之间的区别 对于 OOP 初学者来说,封装和抽象之间存在非常基本的区别。他们可能会对此感到困惑。但如果你详细了解这两个主题,就会发现它们之间存在巨大差异。 抽象意味着向用户隐藏不必要的数据。用户只需要所需的功能或根据其需求的输出。例…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么?核心组件有什么?有什么特性和优势?适用于什么场景? 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…