CAN总线通信

news2025/2/27 7:14:08

CAN总线通信

CAN 是控制器局域网络(Controller Area Network) 的缩写,是 ISO 国际标准化的串行通信协议。

CAN是半双工通信

CAN总线特点

(1) 多主控制

在总线空闲时,所有的单元都可开始发送消息(多主控制)。

最先访问总线的单元可获得发送权(CSMA/CA 方式)。

多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权。

(2) 消息的发送

在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。

(3) 系统的柔软性

与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

(4) 通信速度

根据整个网络的规模,可设定适合的通信速度。

在同一网络中,所有单元必须设定成统一的通信速度。

即使有一个单元的通信速度与其它的不一样,此单元 也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。

(5) 远程数据请求

可通过发送“遥控帧” 请求其他单元发送数据。

(6) 错误检测功能·错误通知功能·错误恢复功能

所有的单元都可以检测错误(错误检测功能)。

检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。

正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

(7) 故障封闭

CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

(8) 连接

CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

CAN总线电路

TJA1040T芯片负责将单片机的TTL逻辑电平转换为CAN总线的通讯电平,芯片的TXD引脚接到单片机的CAN_TX引脚,RXD引脚接到单片机的CAN_RX引脚,STB引脚可接单片机的一个普通IO口

TJA1040T芯片就是CAN收发器,单片机内部的CAN外设就是CAN控制器

在这里插入图片描述

CAN协议

CAN 协议涵盖了 ISO 规定的 OSI 基本参照模型中的传输层数据链路层物理层。也就是说CAN协议参照了网络中的七层参考模型,但只使用到了其中的传输层、数据链路层和物理层

这三层在CAN中具体的定于事项和功能如下图所示

在这里插入图片描述

数据链路层分为 MAC 子层和 LLC 子层,MAC 子层是 CAN 协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息的帧化、仲裁、 应答、错误的检测或报告。数据链路层的功能通常在 CAN 控制器的硬件中执行

CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。(ISO11519-2 是 ISO11519-1 追加新规约后的版本。)ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同,但物理层不同

在这里插入图片描述

CAN总线电平

CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。总线上执行逻辑上的线“与”关系,也就是说总线上所有设备都是隐性电平(1)的话,总线就呈空闲状态,只要有一个变为显性电平(0),总线就是处于数据传输过程。

在这里插入图片描述

因为CAN的标准有两个:ISO11898ISO11519-2,两个标准的差分电平又不相同

常用的标准是ISO11898,该标准通信速度比较快

ISO11898标准

该标准的速度最大可达1M

逻辑1是隐性电平,CAN_High和CAN_Low都是2.5V,电位差为0V,

逻辑0是显性电平,CAN_Hight为3.5V,CAN_Low为1.5V,电位差是2V

CAN总线默认是隐性电平,两根线的电位差为0V

在这里插入图片描述

ISO11519-2标准

该标准的速度最大只有125kbps

逻辑1是隐性电平,CAN_High为1.5V左右,CAN_Low为3V左右,电位差为1.5V

逻辑0是显性电平,CAN_High为4V,CAN_Low为1V,电位差为3V

因为两根线的电压变化比较大,硬件需要的反应时间就长,所以该标准的通信速率较慢

在这里插入图片描述

ISO11898和ISO11519-2物理层的主要不同点如下图所示

在这里插入图片描述

在这里插入图片描述

帧种类

CAN通信是通过以下 5 种类型的帧进行的。

在这里插入图片描述

其中错误帧、过载帧和帧间隔用得比较少,编程时主要是数据帧和遥控帧,数据帧发送的是接收方的ID,遥控帧因为要要求别人发送信息过来,所以发送的是发送方的ID

数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier: 以下称 ID), 扩展格式有 29 个位的 ID。

数据帧

数据帧的构成主要由帧起始、仲裁段、控制段、数据段、CRC段、ACK段和帧结束组成

在这里插入图片描述

帧起始

表示帧开始的段。1 个位的显性位。

一开始总线上是隐性电平,为逻辑1,当电平由隐性变为显性,即由1变为0,则表示帧起始

在这里插入图片描述

仲裁段

表示数据的优先级的段。

标准格式和扩展格式在此的构成有所不同。

当ID号都一样时,RTR就是用来区分数据帧和遥控帧的,RTR为显性时就是数据帧,为隐性时就是遥控帧,数据帧的优先级是大于遥控帧的

在这里插入图片描述

优先级的决定

在总线空闲态,最先开始发送消息的单元获得发送权。

多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平(逻辑0)最多的单元可继续发送

CAN总线在发送电平状态的时候,同时会检查总线上的电平,若电平不一致,则会做出一些改变

具体仲裁过程:单元1和单元2的帧起始和基本ID号都相同,进入仲裁段后,单元1在某一处出现了隐性电平(逻辑1),但此时单元2还是显性电平(逻辑0),因为显性电平的优先级比隐性电平的高,所以单元2就获得了总线仲裁权,可以继续发送数据,而单元1仲裁失利,转为接收状态

在这里插入图片描述

数据帧和遥控帧的优先级

具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权, 可继续发送

因为数据帧和遥控帧的ID完全相同,因此根据RTR的电平状态来决定谁拥有优先权,而数据帧的RTR是显性电平(逻辑0),遥控帧的RTR是隐性电平(逻辑1),显性电平优先级大于隐性电平,所以数据帧具有优先权

在这里插入图片描述

标准格式和扩展格式的优先级

标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送

在这里插入图片描述

控制段

控制段由 6 个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同

在这里插入图片描述

DLC指示后面数据段的字节数,为BCD编码,编码格式如下图,例如数据段的字节数为5,则DLC为0101

在这里插入图片描述

CRC(标准和拓展相同)

CRC 段是检查帧传输错误的帧。由 15 个位的 CRC 顺序*1 和 1 个位的 CRC 界定符(用于分隔的位)构成

这个校验是接收方来进行计算的,如果校验出错,则接收方会将错误信息发送到总线上,来通知发送方重新发送

在这里插入图片描述

ACK段

ACK 段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。

当前面数据都没问题时,发送方会发送两个位的隐性电平,接收方会回一个显性电平,通知发送方,已经正确接收

在这里插入图片描述

帧结束

帧结束是表示该该帧的结束的段。由 7 个位的隐性位(逻辑1)构成。

在这里插入图片描述

遥控帧

接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据帧的数据段。

组成:

在这里插入图片描述

在这里插入图片描述

数据帧和遥控帧的不同

遥控帧的 RTR 位为隐性位,没有数据段。

没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。

遥控帧没有数据段,数据长度码该如何表示?

遥控帧的数据长度码以所请求数据帧的数据长度码表示。

没有数据段的数据帧有何用途?

例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下

位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。

在这里插入图片描述

(1) 发送单元的工作

在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则要插入 1 位与前 5 位反型的电平。

(2) 接收单元的工作

在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个 位)再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

位时序

作用:为了通信的可靠性,可以设置波特率,节点通过位时序来进行同步

由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。

同步段(SS)

传播时间段(PTS)

相位缓冲段 1(PBS1)

相位缓冲段 2(PBS2)

这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。 1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。

Tq其实就是最小系统时钟,比如系统分配给CAN总线的时钟是36M,经过4分频,得到9M,那Tq就是1/9M

1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。

通过设定位时序,多个单元可同时采样,也可任意设定采样点。

在这里插入图片描述

同步段用于一个隐性电平变为显性电平的一段很小的缓冲时间,也可以是显性电平变为隐性电平,实现时序调整

传播时间段可根据总线的长度来设,如果总线长度长,Tq可以设大点,如果短则可以设小点

相位缓冲段1和相位缓冲段2结合来设置采样点,两个都可以增加或者减少,改变的范围由再同步补偿宽度(SJW)来决定

采样点就是读取总线电平,因为总线会有延时,所以采样点一般设置在电平变化后的50% ~ 80%的区间,这个区间采集的电平就比较稳定

在这里插入图片描述

要注意:假如再同步补偿宽度(SJW)为2,因为相位缓冲段2是减少的,不能小于0,所以设置的值必须要大于2,也就是说设置的值要大于SJW,才能减少SJW的值后不小于0
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux追踪技术 ftrace 原理

文章目录一、ftrace架构二、Ring Buffer三、tracer原理3.1 静态插桩3.2 动态插桩四、trace event五、kprobe event参考资料一、ftrace架构 Linux ftrace中,trace类型最基础的就是:tracer和event这两类。如下图所示: tracer发展出了function、…

界面控件DevExpress WPF Pivot Grid——拥有强大多维数据分析能力!

界面控件DevExpress WPF的Pivot Grid组件是一个类似excel的数据透视表,用于多维数据分析和跨选项卡报表生成。它拥有众多的布局自定义选项,允许开发者完全控制其UI且以用户为中心的功能使其易于部署。PS:DevExpress WPF拥有120个控件和库&…

Qt中的多线程

Qt中有多种方法实现多线程: QThreadQThreadPool和QPunnable(重用线程)Qt ConcurrentWorkerScript(QML中的线程)QThread 在上两篇文章中已经解释了,这里就不再赘述。 QThreadPoo和QRunnable(实现…

SpringBoot2核心技术-核心功能【05、Web开发】

目录 1、SpringMVC自动配置概览 2、简单功能分析 2.1、静态资源访问 1、静态资源目录 2、静态资源访问前缀 2.2、欢迎页支持 2.3、自定义 Favicon 2.4、静态资源配置原理 3、请求参数处理 0、请求映射 1、rest使用与原理 2、请求映射原理 1、普通参数与基本注解 …

PrivateLoader PPI服务发现RisePro恶意软件窃取分发信息

称为PrivateLoader的按安装付费(PPI)软件下载器服务正用于恶意软件RisePro的信息窃取。Flashpoint 于 2022 年 12月13日发现了新的窃取者,此前发现了在名为Russian Market的非法网络犯罪市场上使用该恶意软件泄露的“几组日志”。RisePro是一…

因“AI”而“深” 第四届OpenI/O 启智开发者大会高校开源专场25日开启!

中国算力网资源不断开发,开源社区治理及AI开源生态引来众多有才之士参与建设,国家级开放创新应用平台、NLP大模型等高新技术内容逐渐走向科研舞台上聚光灯的中心,新时代的大门缓缓打开。在启智社区,有一群人,他们年纪轻…

BEV感知:DETR3D

3D检测:DETR3D前言MethodImage Feature Extracting2D-to-3D Feature TransformationLoss实验结果前言 在这篇paper,作者提出了一个更优雅的2D与3D之间转换的算法在自动驾驶领域,它不依赖于深度信息的预测,这个框架被称之为DETR3D…

性能测试学习和性能瓶颈分析路线

很多企业招聘都只写性能测试,会使用LR,jmeter工具。其实会使用jmeter和LR进行性能测试还只是性能测试的第一步,离真正的性能测试工程师还很远,笔者也还在路上 .。 性能测试,都是要求测试系统性能,系统自然…

面试中经常被问到的【宏定义】,改变你对【C\C++】中宏定义的认识。

最近遇到挺多宏定义的代码,其实挺烦的,每次看复杂的宏定义看到一半就懵了,今天盘一盘它。本篇设计宏定义的原理、使用方法、使用技巧。 目录 一、宏定义原理 二、宏定义定义复杂功能函数 2.1 定义注册函数 三、宏定义实现条件编译 四、宏…

【OpenCV学习笔记01】- 初步使用OpenCV实现人脸识别

想要使用opencv实现人脸识别,我们需要做这样几步: 1.opencv-python的安装 这里我们使用的python的opencv-python库,在安装opencv-python库之前,我们需要安装numpy, matplotlib。 # 安装指令 # 安装 numpy pip install numpy # …

Chirp-Z变换(线性调频Z变换)原理

Chirp-Z变换(Chirp-Z Transform,CZT) 采用FFT算法可以很快地计算出全部DFT值,即Z变换在单位圆上的全部等间隔采样值。 在实际情况中,并不需要对整个单位圆的频谱进行分析,例如,对于窄带信号&am…

运动型蓝牙耳机推荐哪款、最新运动蓝牙耳机推荐

提起运动耳机,如今很多运动爱好者和职业教练员们,都会向萌新推荐骨传导运动耳机。骨传导耳机解决了入耳式蓝牙耳机掉落的问题,佩戴相当舒服。骨传导耳机在佩戴过程中解放了双耳,不会因为耳机堵住耳朵,听不到环境音&…

【Spring6】| Spring启示录、Spring概述

目录 一:Spring启示录 1. OCP开闭原则 2. 依赖倒置原则DIP 3. 控制反转IoC 二:Spring概述 1. Spring简介 2. Spring8大模块 3. Spring特点 一:Spring启示录 引言:前面我们已经学习了三层架构:表示层、业务层、…

【工作笔记】syslog,kern.log大量写入invalid cookie错误信息问题

任务描述 错误出现出现过四五次,应该是诊断单元tf卡读写出问题导致下面这条告警一直高频写入到/var/log/下的syslog、kern.log、messages中 Nov 23 06:25:12 embest kernel: omap_hsmmc 48060000.mmc: [omap_hsmmc_pre_dma_transfer] invalid cookie: data->hos…

将maven项目打包成可执行的jar(加入外部依赖)

在有些场景下我们需要将编写的Java工程编译打包成为一个完整的jar包,如果你的项目是使用maven构建的话可以通过以下方法来完成这个打包的过程。添加maven打包插件。在项目的pom.xml配置文件的build标签中添加以下代码,其中 mainClass 属性需要替换成你项…

多种调度模式下的光储电站经济性最优储能容量配置分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

安装MQTT Server遇到报错“cannot verify mosquitto.org‘s certificate”,该如何解决?

MQTT是基于发布/订阅的轻量级即时通讯协议,很适合用于低带宽、不稳定的网络中进行远程传感器和控制设备通讯等操作中。在我们的软件研发中,也经常使用MQTT协议进行消息通信等。今天来和大家分享一些关于在安装MQTT Server中遇到的疑难问题及解决思路。当…

为什么阳康后,感觉自己变傻了?

不少人在阳康后出现脑力下降的情况,好像脑子里被雾笼罩。脑雾并不是新名词,已经存在了十几年。以前慢性疲劳综合征患者和脑震荡患者会用它来形容自己的症状。脑雾其实是认知障碍,它可由多种原因引起。比如过度劳累、长期酗酒、缺乏睡眠、久坐…

Semi-supervised(半监督)布料缺陷检测实战

数据及源码链接见文末 1.任务目标和流程概述 对于常规的缺陷检测,常常需要我们准备好数据,使用分割或者检测的方法选择模型,进行训练。但是有一个问题。在日常生产中,我们接触到的往往都是正常的,缺陷数据往往很难收集,更何况我们还要打标签。我们能不能通过训练正常数据…

独立搭建 handle server

本节主要介绍,如何搭建一个与 GHR隔离的 handle sever,不与外界有任何连通。 下载文件 访问地址下载最新版:http://www.handle.net/download_hnr.html 这里以 9.3.0 版本作为讲解 解压服务端,解压客户端 # 解压 tar -xzvf handle-9.3.0-distribution.tar.gz# 到目录下 …