CAN 一: CAN基础知识介绍

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.mzph.cn/news/193173.shtml

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

相关文章

【LeetCode】每日一题 2023_12_2 拼车(模拟/差分)

文章目录 刷题前唠嗑题目&#xff1a;拼车题目描述代码与解题思路学习大佬题解 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 题目&#xff1a;拼车 题目链接&#xff1a;1094. 拼车 题目描述 代码与解题思路 func carPooling(trips [][]int…

【Linux】第二十四站:模拟实现C语言文件标准库

文章目录 一、实现细节1.需要实现的函数2.fopen的实现3.fclose4.fwrite5.测试6.缓冲区的实现7.FILE中缓冲区的意义 二、完整代码 一、实现细节 1.需要实现的函数 #include "mystdio.h"int main() {_FILE* fp _fopen("test.txt","w");if(fp N…

超大规模集成电路设计----基本概念(二)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----基本概念&#xff08;二&#xff09; 简短的历史回顾(A Brief Historical Perspective)第…

观察者设计模式

package com.jmj.pattern.observer;/*抽象观察者类*/ public interface Observer {void update(String message);}package com.jmj.pattern.observer;/*** 抽象主题角色*/ public interface Subject {//添加观察者对象void attach(Observer observer);//删除订阅者void detach(…

LeetCode(51)简化路径【栈】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 简化路径 1.题目 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff…

SmartSoftHelp8,FrameCode极速二次开发框架源码

1.winform outlook style UI C/S 极速开发框架 netframework 2.0 2.winform toolbar style UI C/S 极速开发框架 netframework 2.0 3.WPF toolbar style UI C/S 极速开发框架 netframework 4.0 4.Xadmin-UI jquery B/S 极速开发框架 5.Vue element UI B/S…

Presto基础学习--学习笔记

1&#xff0c;Presto背景 2011年&#xff0c;FaceBook的数据仓库存储在少量大型hadoop/hdfs集群&#xff0c;在这之前&#xff0c;FaceBook的科学家和分析师一直靠hive进行数据分析&#xff0c;但hive使用MR作为底层计算框架&#xff0c;是专为批处理设计的&#xff0c;但是随…

在vue3项目嵌套 导入老项目 jQuery项目,减少重复开发

背景&#xff1a; 公司管理平台项目一直是前辈用jQuery做的&#xff0c;为扩展根据自身的技术栈&#xff0c;将jQuery的老项目嵌套入vue3的框架&#xff0c;新功能用vue开发&#xff0c;旧的功能不动直接在vue3用iframe容器来展示 嵌套步骤 2种方式嵌套&#xff0c;一个是已…

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

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

同旺科技 USB TO SPI / I2C --- 调试W5500_Ping测试

所需设备&#xff1a; 内附链接 1、USB转SPI_I2C适配器(专业版); 首先&#xff0c;连接W5500模块与同旺科技USB TO SPI / I2C适配器&#xff0c;如下图&#xff1a; 设置寄存器&#xff1a; SHAR&#xff08;源MAC地址寄存器&#xff09;&#xff0c;该寄存器用来设置源MAC…

【预计IEEE出版|EI征稿通知】第六届下一代数据驱动网络国际学术会议 (NGDN 2024)

第六届下一代数据驱动网络国际学术会议 (NGDN 2024) The Sixth International Conference on Next Generation Data-driven Networks 2024年4月26-28日 | 中国沈阳 基于前几届在英国埃克塞特 (ISPA 2020) 、中国沈阳 (TrustCom 2021) 和中国武汉 (IEEETrustCom-2022) 成功举…

如何查看Microsoft Office 使用期限

1.进入到 Office 软件的安装目录&#xff08;******\Microsoft Office\Office&#xff09; ## 以管理员身份打开 Windows PowerShell输入以下命令&#xff0c;回车 cscript ospp.vbs /dstatusREMAINING GRACE 一行表示激活剩余天数&#xff08;括号内是换算成的剩余分钟数…

Android实验:绑定service实验

目录 实验目的实验内容实验要求项目结构代码实现代码解释结果展示 实验目的 充分理解Service的作用&#xff0c;与Activity之间的区别&#xff0c;掌握Service的生命周期以及对应函数&#xff0c;了解Service的主线程性质&#xff1b;掌握主线程的界面刷新的设计原则&#xff…

文心一言 VS 讯飞星火 VS chatgpt (148)-- 算法导论12.2 3题

三、用go语言&#xff0c;写出过程 TREE-PREDECESSOR 的伪代码。 文心一言&#xff1a; 以下是使用Go语言编写的TREE-PREDECESSOR函数的伪代码&#xff1a; func TREE-PREDECESSOR(node) { if node.parent ! nil { return node.parent } // 如果节点是根节点&#xff0c…

Centos图形化界面封装OpenStack Ubuntu镜像

目录 背景 环境 搭建kvm环境 安装ubuntu虚机 虚机设置 系统安装 登录虚机 安装cloud-init 安装cloud-utils-growpart 关闭实例 删除细节信息 删除网卡细节 使虚机脱离libvirt纳管 结束与验证 压缩与转移 验证是否能够正常运行 背景 一般的镜像文件在上传OpenSt…

第 374 场 LeetCode 周赛题解

A 找出峰值 枚举 class Solution { public:vector<int> findPeaks(vector<int> &mountain) {int n mountain.size();vector<int> res;for (int i 1; i < n - 1; i)if (mountain[i] > mountain[i - 1] && mountain[i] > mountain[i 1…

登录界面(flex布局练习)

练习&#xff1a;登录界面在我们网页制作的过程中经常遇见&#xff0c;所以请你编写一个界面联系一下&#xff0c;这个可以增加一些动画或者是其他的效果&#xff0c;当然越帅越好。请使用flex或者其他布局练习 例如&#xff1a; 代码 <!DOCTYPE html> <html lang…

SLAM ORB-SLAM2(10)轨迹跟踪过程

SLAM ORB-SLAM2(10)轨迹跟踪过程 1. 总体过程2. ORB 特征点提取2.1. 相机数据处理2.1.1. 单目相机图像处理2.1.2. 双目相机图像处理2.1.3. RGBD相机图像处理2.2. ORB 特征点3. 地图初始化3.1. 坐标形式3.2. 坐标原点3.3. 地图尺度4. 相机位姿初始估计4.1. 关键帧4.2. 运动模型…

文件搜索神器—Everything,结合内网穿透秒变在线搜索神器!

Everythingcpolar搭建在线资料库&#xff0c;实现随时随地访问 文章目录 Everythingcpolar搭建在线资料库&#xff0c;实现随时随地访问前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前…

2 文本分类入门:TextCNN

论文链接&#xff1a;https://arxiv.org/pdf/1408.5882.pdf TextCNN 是一种用于文本分类的卷积神经网络模型。它在卷积神经网络的基础上进行了一些修改&#xff0c;以适应文本数据的特点。 TextCNN 的主要思想是使用一维卷积层来提取文本中的局部特征&#xff0c;并通过池化操…