CAN 一: CAN基础知识介绍

news2025/1/12 20:41:28

1、CAN介绍

1.1、什么是CAN?

(1)CAN(Controller Area Network:控制器局域网),是ISO国际标准化的串行通信协议。为满足汽车产业的“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需求。

(2)CAN总线的发展历史:

  • 1986年,博世公司开发出CAN通信协议
  • 1993年,ISO发布CAN标准ISO11898及ISO11519
  • 2011年,博世公司开发出CAN FD
  • 现在,汽车网络的标准协议

(3)小结

  • 低速CAN(ISO11519)通信速率10~125kbps,总线长度可达1000米。
  • 高速CAN(ISO11898)通信速率125kbps~1Mbps,总线长度 <= 40米。
  • 高速CAN也称为经典CAN。
  • CAN FD通信速率可达5Mbps,并且兼容经典CA,遵循ISO 11898-1做数据收发。

(4)CAN官网

(5)CAN总线拓扑图

  • 下图中电阻为终端电阻,用于阻抗匹配,以减少回波反射。
  • 闭环总线的为高速CAN,开环总线的为低速CAN。
  • CAN总线由两根线(CANL和CANH)组成,允许挂载多个设备节点。
  • CAN入门规范中:低速CAN可挂载20个;高速CAN可挂载30个。
  • CAN能挂载多少个由CAN的收发器芯片决定。

图1 高速CAN

图2 低速CAN

1.2、CAN总线特点

(1)多主控制:每个设备都可以主动发送数据。

(2)系统的柔软性:没有类似地址的信息,添加设备不改变原有总线的状态。

(3)通信速度:速度快,距离远。

(4)错误检测&错误通知&错误恢复功能。

(5)故障封闭:判断故障类型,并且进行隔离。

(6)连接节点多:速度与数量找个平衡。

1.3、CAN应用场景

(1)CAN总线协议已广泛应用再汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。

2、CAN物理层

2.1、CAN物理层特性

(1)CAN使用差分信号进行数据传输,根据CAN_H和CAN_L上的电位差来判断总线电平。

(2)总线电平分为显性电平(逻辑0)和隐性电平(逻辑1),二者必居其一。

(3)显性电平具有优先权。发送方通过使总线电平发生变化,将消息发送给接收方。

(4)CAN总线逻辑时序图:

(5)总结(表中的值只是典型值,真实值有一定偏差)

电平高速CAN低速CAN
显性电平(0)UCAN_H - UCAN_L = 2V UCAN_H - UCAN_L = 3V
隐形电平(1)UCAN_H - UCAN_L = 0VUCAN_H - UCAN_L = -1.5V

2.2、CAN收发器芯片介绍

(1)CAN收发器芯片常见有:TJA1050、TJA1042、SIT1050T。

(2)收发器芯片原理图:

(3)CAN芯片引脚介绍

引脚功能
D接STM32 CAN_TX,CAN发送引脚
GND接地
VCC该芯片工作电压为5V
R接STM32 CAN_RX,CAN接收引脚
RS高速/静音模式选择(低电平为高速)
CANH高电位CAN电压输入输出端
CANL低电位CAN电压输入输出端
Vref参考电压输出

3、CAN协议层

3.1、CAN帧种类介绍

(1)CAN总线以“帧”形式进行通信。CAN协议定义了5种类型的帧:数据帧、遥控帧、错误帧、过载帧、间隔帧,其中数据帧最为常用。

(2)各类数据帧作用:

帧类型帧作用
数据帧(Data Frame)用于发送单元向接收单元传送数据的帧
遥控帧(Remote Frame)用于接收单元向具有相同ID的发送单元请求数据的帧
错误帧(Error Frame)用于当检测出错时向其他单元通知错误的帧
过载帧(Overload Frame)用于接收单元通知其尚未做好接收准备的帧
间隔帧(Inter Frame Space)用于将数据帧及遥控帧与前面的帧分离开来的帧

3.2、CAN数据帧介绍

(1)数据帧由7段组成。数据帧又分为标准帧(CAN2.0A)和扩展帧(CAN2.0B),主要体现在仲裁段和控制段。

(2)数据帧各段功能

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

(3)标准数据帧

位长度功能
帧起始SOF1bit表示数据帧开始的段,显性信号0
仲裁段Ident ifier(ID)11bit标识符位:标识帧优先级
RTR1bit远程发送请求位:0数据帧、1遥控帧(遥控帧没有后面的数据段)
控制段IDE1bit扩展标识符位:这一位决定是标准数据帧还是扩展数据帧
R01bit保留位
DLC4bit数据段长度编码位,单位是字节;2表示数据段有2字节数据
数据段Data Field0~64bit数据的内容
CRC段CRC1515bit循环校验序列(帧起始到数据段)
DEL1bit界定符
ACK段ACK1bit确认位(发送方拉高,接收单元接收后校验通过拉低)
DEL1bit界定符
帧结束EOF7bit表示数据帧结束的段,7个隐形信号

(4)扩展数据帧

位长度功能
帧起始SOF1bit表示数据帧开始的段,显性信号0
仲裁段Ident ifier(ID)11bit标识符位:标识帧优先级
SRR1bit用在扩展格式,替代RTR
IDE1bit扩展标识符位:这一位决定是标准数据帧还是扩展数据帧
Extended Identifier18bit扩展标识符
RTR1bitxx
控制段R01bit保留位
R01bit保留位
DLC4bit数据段长度编码位,单位是字节;2表示数据段有2字节数据
数据段Data Field0~64bit数据的内容
CRCCRC1515bit循环校验序列(帧起始到数据段)
DEL1bit界定符
ACKACK1bit确认位
DEL1bit界定符
帧结束EOF7bit表示数据帧结束的段,7个隐形信号

3.3、CAN位时序介绍

(1)CAN总线以“位同步”机制,实现对电平的正确采样。位数据都由都由四段组成:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每段又由多个位时序Tq组成。

(2)CAN位时序图

(3)采样点是指读取总线电平,并将读到的电平作为位值的点。根据位时序,就可以计算CAN通信的波特率。

(4)注意 : 节点监测到总线上信号的跳变在SS段范围内,表示节点与总线的时序是同步,此时采样点的电平即该位的电平。

3.4、CAN位时序数据同步

(1)时钟频率误差、传输上的相位延迟引起偏差,会造成CAN的传输出错。CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步。

(2)硬件同步

  • 节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测帧起始信号在不在位数据的SS段内,判断内部时序与总线是否同步。
  • 假如不在SS段内,这种情况下,采样点获得的电平状态是不正确的。所以,节点会使用硬件同步方式调整,把自己的SS段平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的。
  • CAN空闲时高电平,在SS段会产生一个下降沿跳变。

(3)再同步

  • 再同步利用普通数据位的边沿信号(帧起始信号是特殊的边沿信号)进行同步。
  • 再同步的方式分为两种情况:超前和滞后,即边沿信号与SS段的相对位置。
  • 再同步时,PBS1和PBS2种增加或减少的时间被称为“再同步补偿宽度(SJW)”,其范围:1~4Tq。
  • 限定了SJW值后,再同步时,不能增加限定长度的SJW值。SJW值较大时,吸收误差能力更强,但是通讯速度会下降。

3.5、CAN总线仲裁

(1)CAN总线仲裁是通过优先级决定的。

(2)CAN总线处于空闲状态时,最先开发发送消息的单元获得发送权。

(3)多个单元同时开始发送时,从仲裁段(报文ID)的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送,即首先出现隐形电平的单元失去对总线的占有权变为接收。

(4)仲裁段(报文ID)值越小,优先级越高。

(5)仲裁失败的单元,会自动检测总线空闲,在第一时间再次尝试发送。

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

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

相关文章

Apache Flink(六):Apache Flink快速入门 - Flink案例实现

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

最新最全的Postman接口测试: postman实现参数化

什么时候会用到参数化 比如&#xff1a;一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块&#xff1a;正确的用户名&#xff0c;密码 成功&#xff1b;错误的用户名&#xff0c;正确的密码 失败 postman实现参数化 在实际的接口测试中&#xff0c;部分参数…

Java 数组另类用法(字符来当数组下标使用)

一、原因 看力扣的时候发现有位大佬使用字符来当数组下标使用。 class Solution {public int lengthOfLongestSubstring(String s) {int result 0;int[] hash new int[130];int i 0;for(int j 0; j < s.length(); j) {while(hash[s.charAt(j)] > 0) {hash[s.charAt…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(3)路由导航卫士、主页实现

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(2)后端跨域、登录模块、sp…

【带头学C++】----- 九、类和对象 ---- 9.2 构造函数

目录 9.2 构造函数 9.2.1 构造函数的概述 9.2.2 构造函数定义方法&#xff08;初始化构造函数&#xff09; 9.2.3 提供构造函数的影响 9.2 构造函数 以下是一些C引入构造函数的原因&#xff1a; 初始化对象&#xff1a;构造函数允许在创建对象时立即初始化该对象的成员变量…

数据挖掘实战-基于word2vec的短文本情感分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

微机原理——并行接口8255学习1

目录 并行接口特点 可编程并行接口芯片8255 8255端口地址 8255的三种工作方式 8255的两种命令&#xff08;方式命令和C端口命令&#xff09; 由用户扩展的并行接口8255的应用 声光报警器接口设计 步进电机控制接口设计 PA端口实现跑马灯 PB端口实现按键输入 并行接口特…

最大乘积分解(动态规划)

相较于我上一题写的动态规划&#xff0c;这一题比较简单 代码如下&#xff1a; #include<stdio.h>int main(void) {long long n, max[101] {0, 1};scanf("%lld", &n);for(int i 1; i < n; i)max[i] i;for(int i 1; i < n; i)for(int j 1; j &…

RT-Thread 汇编分析启动流程

文章目录 一、汇编指令二、启动文件三、流程图 一、汇编指令 这里介绍即几条最常见实用的汇编指令 LDR R0,[R1]&#xff1a;将R1指定内存地址数据&#xff0c;存储到寄存器R0中。STR R0,[R1,#4]&#xff1a;将寄存器R0中数据存储到寄存器R1加上偏移量4的位置。MOV r0,#0x01&a…

read()之后操作系统都干了什么

首先说明三个参数 file文件 buff从内存中开辟一段缓冲区用来接收读取的数据 size表示这个缓冲区的大小 有关file的参数&#xff1a; 状态&#xff1a;被打开 被关闭权限&#xff1a;可读可写最重要的是inode: 他包含了 文件的元数据(比如文件大小 文件类型 文件在访问前需要加…

Matlab和python详解数独谜题问题

&#x1f517; 运行环境&#xff1a;Matlab、Python &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f4…

c语言调用free,提示已触发了一个断点。

在用c语言写数据结构的链表的时候&#xff0c;执行也没有什么大错&#xff0c;逻辑也是对的&#xff0c;但是一道free函数会自动触发一个断点。如图&#xff1a; 这个断点产生的原因是由于分配的内存太小了在使用的时候没有任何问题&#xff0c;但是在执行程序的时候&#xff0…

JAVA毕业设计113—基于Java+Springboot+Vue的体育馆预约系统(源代码+数据库+12000字论文)

基于JavaSpringbootVue的体育馆预约系统(源代码数据库12000字论文)113 一、系统介绍 本项目前后端分离&#xff0c;本系统分为管理员、用户两种角色 用户角色包含以下功能&#xff1a; 注册、登录、场地(查看/预订/收藏/退订)、在线论坛、公告查看、我的预订管理、我的收藏…

[二分查找]LeetCode2040:两个有序数组的第 K 小乘积

本文涉及的基础知识点 二分查找算法合集 题目 给你两个 从小到大排好序 且下标从 0 开始的整数数组 nums1 和 nums2 以及一个整数 k &#xff0c;请你返回第 k &#xff08;从 1 开始编号&#xff09;小的 nums1[i] * nums2[j] 的乘积&#xff0c;其中 0 < i < nums1.…

45 - 多线程性能优化常见问题

1、使用系统命令查看上下文切换 上下文切换常见的监测工具 1.1、Linux 命令行工具之 vmstat 命令 vmstat 是一款指定采样周期和次数的功能性监测工具&#xff0c;我们可以使用它监控进程上下文切换的情况。 vmstat 1 3 命令行代表每秒收集一次性能指标&#xff0c;总共获取 …

代码随想录算法训练营 ---第五十三天

第一题&#xff1a; 简介&#xff1a; 本题和昨天的最大重复子串问题很相似&#xff0c;只不过本题不一定是连续的。 动规五部曲分析如下&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;长度为i-1 的字符串text1与长度为j-1的…

智能优化算法应用:基于供需算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于供需算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于供需算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.供需算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

YoloV8改进策略:Swift Parameter-free Attention,无参注意力机制,超分模型的完美迁移

摘要 https://arxiv.org/pdf/2311.12770.pdf https://github.com/hongyuanyu/SPAN SPAN是一种超分网络模型。SPAN模型通过使用参数自由的注意力机制来提高SISR的性能。这种注意力机制能够增强重要信息并减少冗余,从而在图像超分辨率过程中提高图像质量。 具体来说,SPAN模…

Java三种代理模式:静态代理、动态代理和CGLIB代理

Java三种代理模式&#xff1a;静态代理、动态代理和CGLIB代理 代理模式 代理模式是23种设计模式种的一种。代理模式是一种结构型设计模式&#xff0c;它允许为其他对象提供一个替代品或占位符&#xff0c;以控制对这个对象的访问。代理模式可以在不修改被代理对象的基础上&am…

JavaScript基础知识20——循环结构:退出循环

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近一段时间没学习JavaScript&#xff0c;今天看数字孪生的资料&#xff0c;发现很多低代码开发还是得必须熟悉JavaScript才行&#xff0c;为了以后方便搞数字孪生&#xff0c;有时间还是继续学习下JavaScript。 以下…