CAN - 基础
CAN 基础
- 概念
- 分类
- 特点
- 物理层
- 收发器
- 线与
- 编码方式
- 通信方式
- 采样点/位
- 常见故障
- 数据链路层
- CAN控制器
- 数据帧
- 分类
- 数据帧格式
- 数据帧DBC解析
- CRC校验
- 远程帧
- 总线竞争与仲裁
- 非破坏性仲裁机制
- 节点状态与错误处理机制
- 节点状态
- 错误处理机制
- 错误帧
概念
分类
- CAN
- CAN FD
- 高速CAN
- 低俗容错CAN
特点
- 多主通讯 (节点之间 一对一、一对多、多对一、广播等)
- 短帧结构:报文帧的有效字节有8个
- 报文ID值越小,优先级越高
- 非破坏性总线仲裁处理机制
- 可靠的CRC校验方式,传输数据出错率极低
- 在报文帧仲裁失败或传输期间被破坏有自动重发机制
- 节点在错误严重的情况下,具有自动脱离总线的功能,切断它与总线的联系,不影响总线的正常工作
物理层
收发器
数字信号 <–> 物理信号(CAN_H/CAN_L)两者之间的转换采用差分电平信号
属于OSI模型中的物理层
线与
多个CAN节点并介到同一总线时,只要其中一个节点输出低电平,总线就为低电平
当所有节点输出高电平,总线才为高电平
编码方式
通信方式
异步串行通信:采样点按约定的频率采样数据,根据波特率采样
为减少波特率的误差带来的通信错误
解决:CAN总线规定信号的跳变沿时刻进行同步,将误差累积限制在两个跳变沿
问题:发送多个相同位时没有跳变沿用于同步,会导致误差不断累计
解决:使用位填充的方法进行同步:采用填充位在连续5个相同位后插入一个相反位,产生跳变沿,用于同步(这里时CAN控制器自己去填充)
采样点/位
一个位时间=1/波特率
位时间:同步段、传播段、相位缓冲段1、相位缓冲段2
1位时间=10时间份额
- 同步段:1时间份额
- 传播段:1时间份额
- 相位缓冲段1:4时间份额
- 相位缓冲段2:4时间份额
一个时间份额:Tq
采样点:规定在第x个时间份额后进行采样
常见故障
数据链路层
CAN控制器
属于OSI模型中的数据链路层
数据帧
分类
- 数据帧
发送节点向接收节点传送数据,使用最多
- 远程帧
接收节点向某个发送节点请求数据(发送节点让另外一个节点反馈数据的时候)
- 错误帧
当总线、某节点检测出错误时向其他节点通知错误的帧
- 过载帧
接收节点向发送节点通知自身接收能力的帧
- 间隔帧
数据帧或远程帧与前面的帧分离的帧
数据帧格式

格式
- 帧起始(1位):显性位SOF,标识一个数据帧的开始,用于同步;只有在总线空闲期间,节点才能发送SOF(在总线空闲的时候,发送节点发出帧起始;其他接收节点从这个帧起始位进行同步(用于减少累计误差))

- ID(11位):标识符,唯一确定一条报文,表明报文的含义,可以包括报文的源地址、目标地址;用于确定报文的仲裁优先级(ID数值越小,优先级越高)
- SRR(1位):无实际意义,SRR永远置1
- IDE(1位):用于区分标准帧和扩展帧:标准帧IDE=0(11位ID);扩展帧IDE=1(29位ID)
- extended ID(18位):如果IDE=1
- RTR位(1位):区分数据帧和远程帧(没有数据场???很少用):数据帧RTR=0; 远程帧RTR=1

-
r1(1位):保留位,显性电平0填充
-
r0(1位):保留位,显性电平0填充
-
DLC(4位):数据场包含数据的字节数

-
数据场(0-8个字节):实际CAN数据发送的内容

-
CRC(15位):进行CRC校验,CRC位之前的所有数据位根据一定规则进行校验
-
DEL(1位):CRC界定符,在CRC界定符之前 从SOF开始,到DEL之前进行位填充,显性位电平0

-
ACK(1位): 确定报文被至少一个节点正确接收(发送节点ACK置1(隐性电平),接受方正确接收报文,则将ACK位置0(显性电平)),发送节点查看ACK位从以隐性变显性,知道有节点接收数据,如果没有节点接收,则报相应的错误帧
-
DEL(1位):界定符,隐性位电平1

- EOF(7位):连续7个隐性位
- ITM(3位):连续3个隐性位
- ITM之后,总线会进入空闲状态,此时其他节点可以发送报文,如果节点检测到11个连续的隐性位,就认为总线进入空闲阶段(1+7+3)
数据帧DBC解析
CRC校验

远程帧
- 标准帧
- 扩展帧


总线竞争与仲裁
竞争:多个节点同时要发送数据
非破坏性仲裁机制
仲裁发生在仲裁段
采用“线与”机制
ID值越小,优先级越高
仲裁失败进入“只听”模式

节点状态与错误处理机制
节点状态
- 主动错误状态
设备正常参与总线通信,检测到错误时发送主动错误标识
- 被动错误状态
设备正常参与总线通信,检测到错误时发送主动错误标识
- 总线关闭
数据帧的收发被禁止,脱离总线


错误处理机制
- CRC 错误
- 位填充错误
- 应答错误
- 位发送错误
- 格式错误


错误帧

相关文章:
CAN - 基础
CAN 基础 概念分类特点物理层收发器线与编码方式通信方式采样点/位 常见故障 数据链路层CAN控制器数据帧分类数据帧格式数据帧DBC解析CRC校验远程帧 总线竞争与仲裁非破坏性仲裁机制 节点状态与错误处理机制节点状态错误处理机制错误帧 概念 分类 CANCAN FD高速CAN低俗容错CA…...
【Hash表】找出出现一次的数字-力扣 136
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
Resize和centerCrop的区别
首先要记住,transforms只能对PIL读入的图片进行操作,而且PIL和opencv只能读取H * W * C形式的图片。 resize(size):将图片的短边缩放成size的比例,然后长边也跟着缩放,使得缩放后的图片相对于原图的长宽比不变。如果想要resize成自己想要的图…...
无涯教程-JavaScript - SUM函数
描述 SUM函数可添加值。 语法 SUM (number1, [number2]...)争论 Argument描述Required/Optionalnumber1The first number you want to add. The number can be a value, a cell reference, or a cell range.Requirednumber2, …You can specify up to 255 additional numbe…...
ChatGLM P-Tuningv2微调定制AI大模型
前言 什么是模型微调 想象一下,你正在学习如何弹奏一首钢琴曲目。你已经学会了一些基本的钢琴技巧,但你想要更进一步,尝试演奏一首特定的曲目。这时,你会选择一首你感兴趣的曲目,并开始深度练习。 Fine-tuning(微调)在机器学习中也是类似的概念。当我们使用预先训练好…...
关于RISC-V安全性的全面综述
目录 摘要引言RISC-V安全综述通用平台的安全要求信任的根源与硬件安全模块OTP管理模块安全内存对称加密(如AES)引擎不对称加密[131](例如,公钥RSA)引擎HASH/HAMC引擎随机数/位生成(例如TRNG[136]࿰…...
Python基础语法规则和Java不同的地方
Java是现在最流行的语言,也是广大程序员最熟悉的语言。然而,随着人工智能领域的快速发展,Python作为新星崭露头角。通过对比Java语言来学习Python语言,可以事半功倍。 首先,我们来看Python和Java在注释上的区别。在Jav…...
振弦采集仪安全监测路基边坡的解决方案
振弦采集仪安全监测路基边坡的解决方案 随着人们对交通安全的重视和公路工程的发展,路基边坡安全监测成为了重要的课题之一。路基边坡作为公路的基础,其稳定性直接关系到公路的使用寿命和行车安全。而振弦采集仪作为一种新型的安全监测设备,可…...
如何与QVC 建立EDI连接?
QVC,全称为Quality, Value, Convenience(品质、价值、便利),成立于1986年,是一家全球领先的零售电视和在线零售商。作为一家多渠道零售商,QVC致力于为客户提供高品质、独特的商品,通过电视、互联…...
脑网络图谱
前言 研究人脑面临的一个挑战是其多尺度组织和系统复杂性。我们对大脑组织的认识主要来源于离体组织学检查,如细胞结构映射。通过研究全脑微观结构特征的变化,可以划分为不同的脑区。然而,这种研究大脑组织的“局部”方法非常耗时、耗资源&a…...
无涯教程-JavaScript - SQRTPI函数
描述 SQRTPI函数返回(number * pi)的平方根。 语法 SQRTPI (number)争论 Argument描述Required/OptionalNumberThe number by which pi is multiplied.Required Notes If the specified number < 0, SQRTPI returns the #NUM! error value.如果指定的数字为非数字,则S…...
Nacos使用教程(四)——命名空间(Namespace)、配置分组(Group)和配置集ID(Data ID)
文章目录 Nacos命名空间(Namespace)一、什么是命名空间二、命名空间的作用1. 隔离环境2. 分类管理3. 权限控制 三、命名空间的使用四、总结 Nacos配置分组(Group)一、什么是配置分组二、配置分组的作用1. 分类管理2. 隔离控制3. 动…...
三、双指针(two-point)
文章目录 一、算法核心思想二、算法模型(一)对撞指针1.[704.二分查找](https://leetcode.cn/problems/binary-search/)(1)思路(2)代码(3)复杂度分析 2.[15.三数之和](https://leetco…...
Redis 是什么和使用场景概述(技术选型)
一、Redis 是什么 Redis是一款开源的高性能键值存储系统。它支持多种数据结构,如字符串、列表、集合、哈希表、有序集合等,并提供了丰富的操作命令和功能。Redis的主要特点包括: 内存存储:Redis将数据存储在内存中,因此…...
【数据结构】七大排序
文章目录 💐1. 插入排序🌼1.1 直接插入排序🌼1.2 希尔排序 💐2. 选择排序🌼2.1 直接选择排序🌼2.2 堆排序 💐3. 交换排序🌼3.1 冒泡排序🌼3.2 快速排序🌼3.2.…...
区块链实验室(24) - FISCO网络重构
若干次实验以后,FISCO网络中100个节点堆积了不少交易记录,消耗不少磁盘空间,见下图所示,100个节点累计消耗了10G空间。 观察每个节点的磁盘消耗,以node88为例,消耗了107MB,见下图所示。在该节点…...
AI智能写作工具有哪些?永久免费的AI智能写作工具你使用过吗?
AI智能写作是指借助人工智能技术,计算机程序可以自动生成各种文本内容,包括新闻报道、广告文案、科技文章、小说等等。这些AI写作工具通过大数据和深度学习模型,能够分析和模仿人类的写作风格,生成高质量的文本,甚至有…...
23.8.15 杭电暑期多校9部分题解
1002 - Shortest path 题目大意 对于一个数 x x x,可以进行以下三种操作: 1.将 x x x 变成 2 ∗ x 2*x 2∗x 2.将 x x x 变成 3 ∗ x 3*x 3∗x 3.将 x x x 变成 x 1 x1 x1 给定一个数 n n n,问最少操作几次才能将 1 1 1 变成…...
四个BY的区别 HIVE中
在Hive中,有四个BY比较:Order By、Sort By、Distribute By和Cluster By。 Order By是全局排序,只有一个Reducer。它可以按照升序(ASC)或降序(DESC)对结果进行排序。Order By子句通常用在SELECT语…...
计时函数与float32 float16 int8 数据转换
个人整理常用 部分来自 ncnn 计时函数 // window 平台 #include <windows.h>double get_current_time() {LARGE_INTEGER freq; // 频率LARGE_INTEGER pc; // 计数QueryPerformanceFrequency(&freq);QueryPerformanceCounter(&pc);return pc.QuadPart * 1000…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
机器学习的数学基础:线性模型
线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...
