CAN详解

CAN简介

CAN 总线( Controller Area Network Bus )控制器局域网总线
CAN 总线是由 BOSCH 公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域
CAN 总线特征:
1、两根通信线( CAN_H CAN_L ),线路少。
2、差分信号通信,抗干扰能力强。
3、高速 CAN ISO11898 ): 125k~1Mbps, <40m。
4、低速 CAN ISO11519 ): 10k~125kbps, <1km。
5、异步,无需时钟线,通信速率由设备各自约定。
6、半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序。
7、11 /29 位报文 ID ,用于区分消息功能,同时决定优先级。
8、可配置 1~8 字节的有效载荷。
9、可实现广播式和请求式两种传输方式。

                   10、应答、CRC校验、位填充、位同步、错误处理等特性。

CAN硬件电路

每个设备通过 CAN 收发器挂载在 CAN 总线网络上
CAN 控制器引出的 TX RX CAN 收发器相连, CAN 收发器引出的 CAN_H CAN_L 分别与总线的 CAN_H CAN_L 相连
高速 CAN 使用闭环网络, CAN_H CAN_L 两端添加 120Ω 的终端电阻
120Ω 的终端电阻作用:
        1.防止回波。
        2.当为总线为1(隐形)时,具有快速收紧趋势,使电压保持一致(2.5V)。
低速 CAN 使用开环网络, CAN_H CAN_L 其中一端添加 2.2kΩ 的终端电阻

CAN电平标准 

CAN 总线采用差分信号,即两线电压差( V CAN_H -V CAN_L )传输数据位
高速 CAN 规定:

                  电压差为0V时表示逻辑1(隐性电平)

          电压差为2V时表示逻辑0(显性电平)

低速 CAN 规定:

                  电压差为-1.5V时表示逻辑1(隐性电平)

                  电压差为3V时表示逻辑0(显性电平)

 

CAN收发器 – TJA1050(高速CAN

 

 

 

数据帧 

SOF Start of Frame ):帧起始,表示后面一段波形为传输的数据位
ID Identify ):标识符,区分功能,同时决定优先级
RTR Remote Transmission Request ):远程请求位,区分数据帧和遥控帧
IDE Identifier Extension ):扩展标志位,区分标准格式和扩展格式
SRR Substitute Remote Request ):替代 RTR ,协议升级时留下的无意义位
r0/r1 Reserve ):保留位,为后续协议升级留下空间
DLC Data Length Code ):数据长度,指示数据段有几个字节
Data :数据段的 1~8 个字节有效数据
CRC Cyclic Redundancy Check ):循环冗余校验,校验数据是否正确
ACK Acknowledgement ):应答位,判断数据有没有被接收方接收
CRC/ACK 界定符:为应答位前后发送方和接收方释放总线留下时间
EOF End of Frame ):帧结束,表示数据位已经传输完毕

 

遥控帧 

 

 错误帧

 •总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误”或“CRC错误”或“格式错误”或“应答错误” ,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备

过载帧 

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失

 

帧间隔 

 

位填充 

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

          即将发送:  100000110     10000011110  0111111111110

          实际发送:  1000001110     1000001111100  011111011111010

          实际接收:  1000001110     1000001111100  011111011111010

          移除填充后: 100000110     10000011110  0111111111110

位填充作用:
1、增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机
2、将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性
3、保持 CAN 总线在发送正常数据流时的活跃状态,防止被误认为总线空闲

 位时序

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

硬同步 

每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到 SOF 的下降沿时,接收方会将自己的位时序计时周期拨到 SS 段的位置,与发送方的位时序计时周期保持同步
硬同步只在帧的第一个下降沿( SOF 下降沿)有效
经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近

 

 

再同步 

若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离 SS 段,则此时接收方根据再同步补偿宽度值( SJW )通过加长 PBS1 段,或缩短 PBS2 段,以调整同步
再同步可以发生在第一个下降沿之后的每个数据位跳变边沿

波特率计算

波特率 = 1 / 一个数据位的时长 = 1 / (T SS + T PTS + T PBS1 + T PBS2 )
例如:

  SS = 1TqPTS = 3TqPBS1 = 3TqPBS2 = 3Tq

  Tq = 0.5us

  波特率 = 1 / (0.5us + 1.5us + 1.5us + 1.5us) = 200kbps

仲裁

CAN 总线只有一对差分信号线,同一时间只能有一个设备操作总线发送数据,若多个设备同时有发送需求,该如何分配总线资源?
解决问题的思路:制定资源分配规则,依次满足多个设备的发送需求,确保同一时间只有一个设备操作总线

 

资源分配规则1 - 先占先得 

若当前已经有设备正在操作总线发送数据帧 / 遥控帧,则其他任何设备不能再同时发送数据帧 / 遥控帧(可以发送错误帧 / 过载帧破坏当前数据)
任何设备检测到连续 11 个隐性电平,即认为总线空闲,只有在总线空闲时,设备才能发送数据帧 / 遥控帧
一旦有设备正在发送数据帧 / 遥控帧,总线就会变为活跃状态,必然不会出现连续 11 个隐性电平,其他设备自然也不会破坏当前发送
若总线活跃状态其他设备有发送需求,则需要等待总线变为空闲,才能执行发送需求

 

资源分配规则2 - 非破坏性仲裁

若多个设备的发送需求同时到来或因等待而同时到来,则 CAN 总线协议会根据 ID 号(仲裁段)进行非破坏性仲裁, ID 号小的(优先级高)取到总线控制权, ID 号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送
实现非破坏性仲裁需要两个要求:
线与特性:总线上任何一个设备发送显性电平 0 时,总线就会呈现显性电平 0 状态,只有当所有设备都发送隐性电平 1 时,总线才呈现隐性电平 1 状态,即: 0 & X & X = 0 1 & 1 & 1 = 1
回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确认自己发出的电平是否被真实地发送出去了,根据线与特性,发出 0 读回必然是 0 ,发出 1 读回不一定是 1

 

数据位从前到后依次比较,出现差异且数据位为1的设备仲裁失利

 

数据帧和遥控帧ID号一样时,数据帧的优先级高于遥控帧

 

标准格式11ID号和扩展格式29ID号的高11位一样时,标准格式的优先级高于扩展格式(SRR必须始终为1,以保证此要求)

 

错误类型 

错误共有5种: 位错误、填充错误、CRC错误、格式错误、应答错误

 

主动错误状态的设备正常参与通信并在检测到错误时发出主动错误帧
被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧
总线关闭状态的设备不能参与通信
每个设备内部管理一个 TEC REC ,根据 TEC REC 的值确定自己的状态

 

 

 标识符过滤器

每个过滤器的核心由两个 32 位寄存器组成: R1[31:0] R2[31:0]
FSCx :位宽设置

    置016位;置132

FBMx :模式设置

    置0,屏蔽模式;置1,列表模式

FFAx :关联设置

    置0FIFO 0;置1FIFO 1

FACTx :激活设置

    0,禁用;置1,启用

 

 过滤器配置示例

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

透视投影(Perspective projection)与等距圆柱投影(Equirectangular projection)

一、透视投影 1.方法概述 Perspective projection&#xff08;透视投影&#xff09;是一种模拟人眼观察三维空间物体时的视觉效果的投影方法。它通过模拟观察者从一个特定视点观察三维场景的方式来创建二维图像。在透视投影中&#xff0c;远处的物体看起来比近处的物体小&…

(四)Spring Boot学习——整合修改使用druid连接池

我的是使用springboot3的&#xff0c;对应的有整合的druid-spring-boot-3-starter的jar实现对springboot3的兼容。 <!--******************数据库相关配置************************--> <!-- 1.配置数据库相关的jar包,连接池使用druids上&#xff0c;并引入整合spring…

think php处理 异步 url 请求 记录

1、需求 某网站 需要 AI生成音乐&#xff0c;生成mp3文件的时候需要等待&#xff0c;需要程序中实时监听mp3文件是否生成 2、用的开发框架 为php 3、文件结构 配置路由设置 Route::group(/music, function () {Route::post(/musicLyrics, AiMusic/musicLyrics);//Ai生成歌词流式…

Linux八股积累与笔记

1、iptables 是一个用于配置Linux内核防火墙规则的工具。四表五链&#xff1a;在iptables中&#xff0c;有四个表&#xff08;tables&#xff09;和五个链&#xff08;chains&#xff09;&#xff0c;用于管理不同类型的数据包过滤规则。如下&#xff1a; 表&#xff08;Tabl…

乐鑫发布 esp-iot-solution v2.0 版本

今天&#xff0c;乐鑫很高兴地宣布&#xff0c;esp-iot-solution v2.0 版本已经发布&#xff0c;release/v2.0 分支下的正式版本组件将为用户提供为期两年的 Bugfix 维护&#xff08;直到 2027.01.25 ESP-IDF v5.3 EOL&#xff09;。该版本将物联网开发中常用的功能进行了分类整…

【爬虫框架:feapder,管理系统 feaplat】

github&#xff1a;https://github.com/Boris-code/feapder 爬虫管理系统 feaplat&#xff1a;http://feapder.com/#/feapder_platform/feaplat 爬虫在线工具库 &#xff1a;http://www.spidertools.cn &#xff1a;https://www.kgtools.cn/1、feapder 简介 对于学习 Python…

uni-app 蓝牙开发

一. 前言 Uni-App 是一个使用 Vue.js 开发&#xff08;所有&#xff09;前端应用的框架&#xff0c;能够编译到 iOS、Android、快应用以及各种小程序等多个平台。因此&#xff0c;如果你需要快速开发一款跨平台的应用&#xff0c;比如在 H5、小程序、iOS、Android 等多个平台上…

C语言——海龟作图(对之前所有内容复习)

一.问题描述 海龟作图 设想有一只机械海龟&#xff0c;他在C程序控制下在屋里四处爬行。海龟拿了一只笔&#xff0c;这支笔或者朝上&#xff0c;或者朝下。当笔朝下时&#xff0c;海龟用笔画下自己的移动轨迹&#xff1b;当笔朝上时&#xff0c;海龟在移动过程中什么也不画。 …

【Maven】继承和聚合

5. Maven的继承和聚合 5.1 什么是继承 Maven 的依赖传递机制可以一定程度上简化 POM 的配置&#xff0c;但这仅限于存在依赖关系的项目或模块中。当一个项目的多个模块都依赖于相同 jar 包的相同版本&#xff0c;且这些模块之间不存在依赖关系&#xff0c;这就导致同一个依赖…

Android 性能优化:内存优化(理论篇)

内存作为App程序运行最重要的资源之一&#xff0c;需要运行过程中做到合理的资源分配与回收&#xff0c;不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏&#xff0c;重则导致用户应用程序发生 OOM&#xff08;out of memory&#xff09;崩溃。喜马直播随着近些年的业…

技能之发布自己的依赖到npm上

目录 开始 解决 步骤一&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 运用 一直以为自己的项目在github上有了&#xff08;之传了github&#xff09;就可以进行npm install下载&#xff0c;有没有和我一样萌萌的同学。没事&#xff0c;萌萌乎乎的不犯罪。 偶然的机…

【选择排序和交换排序】直接选择排序、堆排序、冒泡排序、快速排序

【选择排序和交换排序】直接选择排序、堆排序、冒泡排序、快速排序 1. 选择排序1.1 直接选择排序1.1.1详细过程1.1.2 代码实现1.1.3 复杂度和稳定性 1.2 堆排序 2. 交换排序2.1 冒泡排序2.1.1 代码实现2.1.2 复杂度和稳定性 2.2 快速排序——挖坑法2.2.1详细过程2.2.2 代码实现…

DI依赖注入详解

DI依赖注入 声明了一个成员变量&#xff08;对象&#xff09;之后&#xff0c;在该对象上面加上注解AutoWired注解&#xff0c;那么在程序运行时&#xff0c;该对象自动在IOC容器中寻找对应的bean对象&#xff0c;并且将其赋值给成员变量&#xff0c;完成依赖注入。 AutoWire…

51c大模型~合集79

我自己的原文哦~ https://blog.51cto.com/whaosoft/12661268 #还是回谷歌好 创业一年半&#xff0c;胖了30斤&#xff0c;AI大佬感叹 回到大厂&#xff0c;和老领导重聚。 「由于工作强度和不健康的生活方式&#xff0c;我已胖了 15 公斤。」 本周一&#xff0c;知名 AI 学…

工业AI质检 AI质检智能系统 尤劲恩(上海)信息科技有限公司

来的现代化工厂&#xff0c;将逐步被无人化车间取代&#xff0c;无人工厂除了产线自动化&#xff0c;其无人质检将是绕不开的话题。尤劲恩致力于帮助工业制造领域上下游工厂减员增效、提高品质效率&#xff0c;真正实现无人质检IQC/IPQC/OQC的在线质检系统。分析生产环节真实品…

【CSS in Depth 2 精译_062】第 10 章 CSS 中的容器查询(@container)概述 + 10.1 容器查询的一个简单示例

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 ✔️ 10.1.1 容器尺寸查询的用法 ✔️ 10.2 深入理解容器10.3 与容器相关的单位10.4 容器样式查询的用法10.5 本章小结 文章目录 第 10…

ELK(Elasticsearch + logstash + kibana + Filebeat + Kafka + Zookeeper)日志分析系统

文章目录 前言架构软件包下载 一、准备工作1. Linux 网络设置2. 配置hosts文件3. 配置免密登录4. 设置 NTP 时钟同步5. 关闭防火墙6. 关闭交换分区7. 调整内存映射区域数限制8. 调整文件、进程、内存资源限制 二、JDK 安装1. 解压软件2. 配置环境变量3. 验证软件 三、安装 Elas…

视频汇聚平台Liveweb国标GB28181视频平台监控中心设计

在现代安防视频监控领域&#xff0c;Liveweb视频汇聚平台以其卓越的兼容性和灵活的拓展能力&#xff0c;为用户提供了一套全面的解决方案。该平台不仅能够实现视频的远程监控、录像、存储与回放等基础功能&#xff0c;还涵盖了视频转码、视频快照、告警、云台控制、语音对讲以及…

Linux 内核 调用堆栈打印函数

文章目录 内核函数调用堆栈打印1. dump_stack()一、作用二、工作原理三、实现方式四、示例实际演示 2.WARN_ON()3. panic()一、函数作用二、函数行为三、panic() 函数的参数四、使用场景 4. BUG_ON()使用场景 内核函数调用堆栈打印 1. dump_stack() dump_stack()是Linux内核中…

C语言——指针初阶(一)

目录 一.什么是指针&#xff1f;&#xff1f;&#xff1f; 指针是什么&#xff1f; 指针变量&#xff1a; 总结&#xff1a; 总结&#xff1a; 二.指针和指针类型 指针-整数&#xff1a; 总结&#xff1a; 指针的解引用 总结&#xff1a; 三.野指针 如何规避野指针 往期…