当前位置: 首页 > article >正文

CAN学习记录

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

低速CAN(ISO11519)通信速率10~125kbps,总线长度可达1000米

高速CAN(ISO11898)通信速率125~1Mbps,总线长度<=40米

CAN FD通信速率可达5Mbps,并且兼容经典CAN,遵循ISO11898-1做数据收发

CAN总线由两根线CANL和CANH组成,运行挂载多个设备节点(低速CAN:20,高速CAN:30)

CAN总线特点

1.多主控制                 每个设备都可以主动发送数据

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

3.通信速度                  速度快,距离远

4.错误检测、通知、恢复功能

5.故障封闭                 判断故障类型,并且进行隔离

6.连接节点多              速度与数量找个平衡

CAN总线协议已广泛应用在汽车电子、工业自动化、船舶、医疗设备、工业设备等

CAN物理层

CAN使用差分信号进行数据传输,根据CANH和CANL上的电位差来判断总线电平

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

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

CAN协议层

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

数据帧:用于发送单元向接收单元传输数据的帧

遥控帧:用于接收单元向具有相同ID的发送单元请求数据的帧

错误帧:用于当检测出错误时向其他单元通知错误的帧

过载帧:用于接收单元通知其尚未做好接收准备的帧

间隔帧:用于将数据帧及遥控帧与前面帧分离开来的帧

数据帧

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

帧起始:表示数据帧开始的段,显性信号

仲裁段:表示该帧优先级的段,优先级

控制段:表示数据的字节数及保留位的段

数据段:数据的内容,一帧可发送0~8字节

CRC段:检查帧的传输错误的段

ACK段:表示确认正常接收的段

帧结束:表示数据帧结束的段,7个隐性信号

CAN位时序介绍

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

采样点是指读取总线的电平,并将读到的电平作为位值的点

根据位时序,就可以计算CAN通信的波特率

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

数据同步过程

时钟频率误差、传输上的相位延迟引起偏差

CAN为了实现对总线电平信号的正确采样,数据同步分为硬件同步和再同步

硬件同步:节点通过CAN总线发送数据,一开始发送帧起始信号。总线上其他节点会检测帧起始信号在不在数据的SS段内,判断内部时许与总线是否同步

假如不在SS段内,这种情况下,采样点获得的电平状态时不正确的。所以节点会使用硬件同步方式调整,把自己的SS段平移到检测到边沿的地方,获得同步,同步情况下,采样点获得的电平状态才是正确的

再同步:再同步利用普通数据位的边沿信号(帧起始信号是特殊的边沿信号)进行同步

再同步的方式分为两种情况:超前和滞后,即边沿信号与SS段的相对位置

再同步时,PBS1和PBS2中增加或者减少的时间被称为“再同步补偿宽度(SJW)”,其范围:1~4Tq

限定了SJW值后,再同步时,不能增加限定长度的SJW值。SJQ值较大时,吸收误差能力更强,但是通讯速度会下降

CAN总线仲裁   优先级决定

CAN总线处于空闲状态,最先开始发送消息的单元获得发送权

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

竞争失败单元,会自动检测总线空闲,在第一时间再次尝试发送

CAN控制器

CAN控制器的工作模式有三种:初始化模式、正常模式和睡眠模式

CAN控制器的测试模式有三种:静默模式、环回模式和环回静默模式(初始化模式下进行配置)

 CAN控制器框图

CAN内核:包含各种控制/状态/配置寄存器,可以配置模式、波特率等

发送邮箱:用来缓存待发送的报文,最多可以缓存3个报文

接收FIFO:缓存接收到的有效报文

接收过滤器:筛选有效报文

发送处理

发生优先级由邮箱中报文的标识符决定。标识符数值越低优先级越高。如果标识符值相同,邮箱小的先被发送

接收处理

有效报文指的是(数据帧直到EOF段的最后一位都没有错误),且通过过滤器组对标识符过滤

接收过滤器

当总线上报文数据量很大时,总线上的设备会频繁获取报文,占用CPU。过滤器的存在,选择性接收有效报文,减轻系统负担

每个过滤器组都有两个32位寄存器CAN_FxR1和CAN_FxR2。根据过滤器组的工作模式不同,寄存器的作用不尽相同

位宽可设置32位或16位,寄存器存储的内容就有所区别

选择模式可设置屏蔽位模式或标识符列表模式,寄存器内容的功能就有所区别

屏蔽位模式,可以选择出一组符合条件的报文,寄存器内容功能相对于是否符合条件

标识符列表模式,可以选择出几个特定ID的报文,寄存器内容功能就是标识符本身

REG中Bit值代表的是匹配与否:1必须匹配,0不用关心

CAN_FxR1作为标识符寄存器

CAN_FxR2作为屏蔽位寄存器

过滤出1组符合条件的报文

CAN_FxR1作为标识符寄存器

CAN_FxR2作为标识符寄存器

过滤出2个符合条件的报文

CAN_FxR1作为标识符寄存器和屏蔽位寄存器

CAN_FxR2作为标识符寄存器和屏蔽位寄存器

过滤出2组符合条件的报文

CAN_FxR1作为2个标识符寄存器

CAN_FxR2作为2个屏蔽位寄存器

过滤出4个符合条件的报文

CAN控制器位时许

CAN基本驱动步骤

1.CAN参数初始化        工作模式、波特率等HAL_CAN_Init

2.使能CAN时钟和初始化相关引脚     GPIO模式设为复用功能模式 HAL_CAN_MspInit

3.设置过滤器                      HAL_CAN_ConfigFilter完成过滤器的初始化

4.CAN数据接收和发送        HAL_CAN_AddTxMessage发送消息

                                             HAL_CAN_GetRxMessage接收消息

5.使能CAN相关中断/设置NVIC/编写中断服务函数   __HAL_CAN_ENABLE_IT可选

相关文章:

CAN学习记录

CAN(Controller Area Network),是ISO国际标准化的串行通信协议&#xff0c;为了满足汽车产业的“减少线束的数量”、“通过多个LAN&#xff0c;进行大量数据的高速通信”的需求 低速CAN&#xff08;ISO11519)通信速率10~125kbps&#xff0c;总线长度可达1000米 高速CAN&#…...

滑动窗口算法篇:连续子区间与子串问题

1.滑动窗口原理 那么一谈到子区间的问题&#xff0c;我们可能会想到我们可以用我们的前缀和来应用子区间问题&#xff0c;但是这里对于子区间乃至子串问题&#xff0c;我们也可以尝试往滑动窗口的思路方向去进行一个尝试&#xff0c;那么说那么半天&#xff0c;滑动窗口是什么…...

机器翻译同样的文本,是从英语翻译成日语更准确还是中文翻译成日语更准确

在大多数情况下&#xff0c;从英语翻译成日语会比从中文翻译成日语更准确&#xff0c;原因如下&#xff1a; 1. 语言结构的相似性 英语和日语的句子结构更接近&#xff0c;特别是在语法、从句使用、定语位置等方面。例如&#xff0c;日语和英语都使用 SVO 结构&#xff08;主…...

MybatisMybatisPllus公共字段填充与配置逻辑删除

Mybatis/MybatisPllus公共字段填充与配置逻辑删除 在开发过程中&#xff0c;很多时候需要处理一些公共字段&#xff0c;例如&#xff1a;创建时间、修改时间、状态字段等。这些字段通常会在插入或更新数据时进行填充&#xff0c;以便记录数据的变化和状态。同时&#xff0c;逻…...

001-监控你的文件-FSWatch-C++开源库108杰

fswatch 原理与应用简介fswatch 安装fswatch 实践应用具体应用场景与细节补充 1. 简介 有些知识&#xff0c;你知道了不算厉害&#xff0c;但你要是不知道&#xff0c;就容易出乱。 很多时候&#xff0c;程序需要及时获取磁盘上某个文件对象&#xff08;文件夹、文件&#xff0…...

SpringMVC环境搭建

文章目录 1.模块创建1.创建一个webapp的maven项目2.目录结构 2.代码1.HomeController.java2.home.jsp3.applicationContext.xml Spring配置文件4.spring-mvc.xml SpringMVC配置文件5.web.xml 配置中央控制器以及Spring和SpringMVC配置文件的路径6.index.jsp 3.配置Tomcat1.配置…...

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…...

学习笔记之debian的thonny开发(尚未验证)--从stm32裸机到linux嵌入式系统

这应该算 stm32裸机用户 转 linux嵌入式系统 的入门学习笔记。 【鲁班猫】39-vnc远程桌面连接鲁班猫_哔哩哔哩_bilibili 本集的鲁班猫的视频介绍中&#xff0c;没有清晰明确指出需要linux开发板接入网络&#xff0c;接入网络可以使用有线网口或者wifi路由&#xff0c;有些提示…...

React常用库

React 生态系统非常丰富&#xff0c;有许多常用的库可以帮助开发者更高效地构建应用。以下是一些常见的 React 库及其用途&#xff1a; --- ### 1. **状态管理** - **Redux** 最流行的全局状态管理库&#xff0c;适合中大型应用。 官网: https://redux.js.org/ - **…...

「软件设计模式」桥接模式(Bridge Pattern)

深入解析桥接模式&#xff1a;解耦抽象与实现的艺术 一、模式思想&#xff1a;正交维度的优雅解耦 桥接模式&#xff08;Bridge Pattern&#xff09;通过分离抽象&#xff08;Abstraction&#xff09;与实现&#xff08;Implementation&#xff09;&#xff0c;使二者可以独立…...

Python 用户输入和While循环(使用while 循环来处理列表和字典)

大多数程序都旨在解决最终用户的问题&#xff0c;为此通常需要从用户那里获取一些信息。例如&#xff0c;假设有人要判断自己是否到了投票的年龄&#xff0c;要编写回答这个问题的程序&#xff0c;就 需要知道用户的年龄&#xff0c;这样才能给出答案。因此&#xff0c;这种程序…...

docker 基础命令使用(ubuntu)

docker 状态查询 docker ps docker ps -adocker --version docker info docker --help docker run --help docker ps --help ...docker 操作镜像命令 docker imagesdocker rmi 镜像id/镜像名docker 操作容器命令 docker ps docker ps -adocker run 命令 # 端口映射 -p 参数…...

Jenkins 安装插件 二

Jenkins 安装插件 二 一. 打开 Dashboard 打开 Jenkins 界面&#xff0c;不管在任何界面&#xff0c;只需要点击左上角 Dashboard 按钮即可 二. 打开 Manage Jenkins 找到 Manage Jenkins -> System Configuration -> Plugins 点击 Plugins 打开界面如下 Updates&a…...

深入解析与解决 Oracle 报错:ORA-29275 部分多字节字符20250213

&#x1f6e0;️ 深入解析与解决 Oracle 报错&#xff1a;ORA-29275 部分多字节字符 引言 &#x1f31f; 在与 Oracle 数据库打交道的日常工作中&#xff0c;你是否遇到过 ORA-29275: partial multibyte character 这个令人头疼的错误&#xff1f;这个错误通常与字符编码、数…...

CI/CD(二)docker-compose安装Jenkins

1、docker-compose.yml version: 3.8services:jenkins:image: jenkins/jenkins:lts # 使用官方的 Jenkins LTS 镜像container_name: jenkinsuser: root # 如果需要以 root 用户运行ports:- "8080:8080" # Jenkins Web 界面端口- "50000:50000" # 用于 Jen…...

Windows环境安装部署minimind步骤

Windows环境安装部署minimind步骤 必要的软件环境 git git&#xff0c;可下载安装版&#xff0c;本机中下载绿色版&#xff0c;解压到本地目录下&#xff08;如&#xff1a;c:\soft\git.win64&#xff09;&#xff0c;可将此路径添加到PATH环境变量中&#xff0c;供其他程序…...

使用Node.js进行串口通信

目录 一、 安装 serialport 库二.、实现方法1.打开串口并配置参数2. 向串口传递信息3. 接收串口信息4. 处理错误5. 关闭串口6. 使用解析器7. 获取串口列表 三、 完整示例代码 一、 安装 serialport 库 首先&#xff0c;需要安装 serialport 库。可以通过 npm 安装&#xff1a;…...

C# ASP.NET的应用场景

.NET学习资料 .NET学习资料 .NET学习资料 C# ASP.NET作为一种强大的 Web 开发框架&#xff0c;在众多领域都有着广泛的应用&#xff0c;为各类 Web 应用的开发提供了高效、可靠的解决方案。以下是其主要的应用场景&#xff1a; 企业级 Web 应用 在企业级应用开发中&#xf…...

常用的网络安全设备

大家读完觉得有帮助&#xff0c;记得关注和点赞&#xff01;&#xff01;&#xff01; 一、 WAF 应用防火墙 范围&#xff1a;应用层防护软件 作用&#xff1a; 通过特征提取和分块检索技术进行模式匹配来达到过滤&#xff0c;分析&#xff0c;校验网络请求包的目的&#x…...

Qt信号槽调用出错:Qt: Dead lock detected while activating a BlockingQueuedConnection

目录 1.现象和原因分析 2. 总结 1.现象和原因分析 就在最近的开发过程中&#xff0c;程序一运行在控制台就打印&#xff1a; Qt: Dead lock detected while activating a BlockingQueuedConnection&#xff1a; 咋一看&#xff0c;怎么出现死锁了呢&#xff1f;仔细看下…...

应对DeepSeek总是服务器繁忙的解决方法

最近由于访问量过大&#xff0c;DeepSeek服务器官网经常弹出&#xff1a;“服务器繁忙&#xff0c;请稍后再试”的提示&#xff0c;直接卡成PPT怎么办&#xff1f;服务器繁忙直接看到视觉疲劳&#xff1a; 解决DeepSeek卡顿问题 DeepSeek使用卡顿问题&#xff0c;是因为访问量…...

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第八节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析&#xff08;RequestUpload0x35服务&#xff09; 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025-02-13 关键词&#xff1a;UDS协议、0x35服务、数据上传、内存读取、ECU测试 一、服务功能概述 0x35服务&#xff08…...

仿叮咚买菜鸿蒙原生APP

# DingdongShopping 这是一个原生鸿蒙版的仿叮咚买菜APP项目 鸿蒙Next发布至今已经有一年多的时间了&#xff0c;但有时候我们想要实现一些复杂的功能或者效果&#xff0c;在开发文档上查阅一些资料还是比较费时的&#xff0c;有可能还找不到我们想要的内容。而社会层面上分享…...

【kafka系列】Kafka事务的实现原理

目录 1. 事务核心组件 1.1 幂等性生产者&#xff08;Idempotent Producer&#xff09; 1.2 事务协调器&#xff08;TransactionCoordinator&#xff09; 1.3 事务日志&#xff08;Transaction Log&#xff09; 2. 事务执行流程 2.1 事务初始化 2.2 发送消息 2.3 事务提…...

HarmonyOS NEXT网络状态监听HTTP和RCP请求网络

当我们在HarmonyOS NEXT中开发的应用&#xff0c;基本上都会使用网络请求&#xff0c;从服务端获取数据在客户端显示或者供用户交互&#xff0c;有时候网络发生变化时&#xff0c;我们需要做一些相应的操作&#xff0c;接下来我们一起来了解下在HarmonyOS NEXT下如何监听网络状…...

2025.2.16

Web [GDOUCTF 2023]泄露的伪装&#xff1a; 点进去看就是装神弄鬼&#xff0c;那就直接扫描 果然有东西 第一个是php代码 第二个是个文件 访问发现是一样的 分析一下&#xff1a;使用 file_get_contents($cxk) 函数读取 $cxk 变量中指定的 URL 或文件的内容。 如果读取的内…...

使用Java爬虫获取京东JD.item_sku API接口数据

在电商领域&#xff0c;商品的SKU&#xff08;Stock Keeping Unit&#xff09;信息是运营和管理的关键数据。SKU信息包括商品的规格、价格、库存等&#xff0c;对于商家的库存管理、定价策略和市场分析至关重要。京东作为国内领先的电商平台&#xff0c;提供了丰富的API接口&am…...

【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析③】

ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase03 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月15日 关键词&#xff1a;UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-003测试用例 用例ID测试场景验证要点参考条款预期…...

MySQL安装MySQL服务时提示Install-Remove of the Service Denied

文章目录 问题描述排查1.字面意思2.搜索引擎3.官方文档4.源码 处理方法相关扩展 问题描述 MySQL安装MySQL服务时提示Install-Remove of the Service Denied! 详细报错如下&#xff1a; C:\Users\荷塘月色>net start mysql 服务名无效。请键入 NET HELPMSG 2185 以获得更多…...

python学opencv|读取图像(六十五)使用cv2.boundingRect()函数实现图像轮廓矩形标注

【1】引言 前序学习进程中&#xff0c;已经使用cv2.findContours()函数cv2.drawContours()函数实现图像轮廓识别和标注&#xff0c;这种标注沿着图像的轮廓进行&#xff0c;比较细致。相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;六十四&#xff09;使用…...