CAN学习笔记2:CAN简介

news2024/9/29 7:18:51

CAN

1 概述

CAN(Controller Area Network),是 ISO 国际标准化的串行通信协议,目的是适应汽车“减少线束的数量”、“通过多个网络进行大量数据的高速传输”的需求。
低速 CAN(ISO11519)通信速率 10~125Kbps,总线长度可达 1000米.
高速 CAN(ISO11898)通信速率 125~1Mbps,总线长度 ≤ 40米
CAN FD 通信速率可达 5Mbps,并且兼容经典 CAN,遵循 ISO 11898-1做数据收发

2 特性

  1. 多主控制 ,每个设备都可以主动发送数据
  2. 非破坏性的基于线路竞争的仲裁机制
  3. 利用接受滤波对帧实现多点传送
  4. 支持远程数据请求
  5. 系统的柔软性,没有类似地址的信息,添加设备不改变原来总线的状态
  6. 通信速度,速度快,距离远
  7. 错误检测&错误通知&错误恢复功能
  8. 故障封闭,判断故障类型,并且进行隔离
  9. 连接节点多,速度和数量找个平衡

3 CAN 的分层结构和功能

遵循 OSI 参考模型,CAN 的体系结构体现了相应于 OSI 参考模式的如下两层:数据链路层,物理层。
数据链路层:将比特流组成帧数据,判断数据是否正常
物理层:收发比特流的物理层
物理层是实现 ECU 与总线相连的电路。ECU 的总数取决于总线的电力负载。CAN 能够使用多种物理介质,例如双绞线、光纤等,最常用的是双绞线,信号使用差分电压传送,两条信号线被称为 CAN_H 和 CAN_L。静态时均为 2.5V 左右,此时状态表示为逻辑 1,也可以叫做隐性。用 CAN_H 比 CAN_L 高表示逻辑 0,称为显性,此时通常电压值为 CAN_H = 3.5V 和 CAN_L = 1.5V。

4 CAN 的消息帧

CAN 的消息帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B),其本质的不同在于 ID 的长度。
在这里插入图片描述
CAN 的消息帧根据用途分为四种不同类型:数据帧用于数据传输、远程帧用于请求发送数据、错误帧用于识别探测到的错误、超载帧用于延迟下一个信息帧的发送。同时间隔帧用来间隔数据帧/远程帧与其他帧。
在这里插入图片描述

4.1 数据帧

数据帧由 7 个不同的位场组成,即帧起始、仲裁场、控制场、数据场、CRC 场、应答场和帧结束,其中数据场长度可为0。
在这里插入图片描述
①帧起始(Start Of Frame,SOF):标志数据帧和远程帧的开始,它仅由一个显性位组成,只有在总线空闲时,才允许开始发送。
②仲裁场:在标准的格式中,仲裁场由 11 位标识符和 RTR 位组成;在扩展格式中,仲裁场由 29位标识符和 SRR 位、标识位以及 RTR 组成。

  • RTR 位(远程传输请求位):在数据帧中,RTR 位必须是显性电平,而在远程帧中,RTR 位必须是隐形电平。
  • SRR 位(替代传输请求位):在扩展格式中始终为隐形位。
  • IDE 位(标识符扩展位):IDE 位对于扩展格式属于仲裁场,对于标准格式属于控制场。IDE 在标准格式中为显性电平,而在扩展格式中为隐形电平。
    ③控制场:由 6 位组成。在标准格式中,一个消息帧包括 DLC、发送显性电平的 IDE 位和保留位 r0。在扩展格式中,一个消息帧包括 DLC 和保留位 r1 和 r0,这两个位必须发送显性电平。
    DLC(数据长度位):数据场的字节数目由数据长度码给出。数据长度码为 4 位,在控制场中被发送。
    ④数据场:由数据帧中被发送的数据组成,可包括 0~8 字节。
    ⑤CRC 场:包括 CRC 序列和 CRC 界定符。
    ⑥应答场:包括 2 位,即应答间隙和应答界定符。在应答场中发送站送出两个隐性位。一个正确接收到有效报文的接收器,在应答间隙期间,将此消息通过传送一个显性位报告给发送器。所有接收到匹配 CRC 序列的站,通过在应答间隙内把显性位写入发送器的隐性位来报告。应答界定符是应答场的第二位,并且必须是隐性位。
    ⑦帧结束:每个数据帧和远程帧均由 7 个隐性位组成的标志序列界定。

4.2 远程帧

在这里插入图片描述
远程帧的主要作用是向其他的CAN节点发送数据请求,发送相同标识符的数据帧。与数据帧相比,远程帧的RTR位是隐性的,而且没有数据场。

4.3 错误帧

在这里插入图片描述
错误帧由错误标志的叠加和结束符组成。
错误标志有主动错误标志与被动错误标志。主动错误标志为6个显性位,被动错误标志为6个隐性位。

4.4 过载帧

过载帧包括两个位场,超载标志和超载界定符。

5 CAN总线拓扑结构

在这里插入图片描述
CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻。为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线。
CAN_H 和 CAN_L 有一个共同的特点,传递的数据是一样的,但波形是相反的,主要是出于安全的考虑,如下图
在这里插入图片描述

6 CAN 收发过程

发送过程: CAN控制器将CPU传来的信号转换为逻辑电平(即逻辑0-显性电平或者逻辑1-隐性电平)。CAN发射器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。
在这里插入图片描述
接收过程: CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。
在这里插入图片描述

参考资料

  1. CAN总线之CAN的报文格式
  2. CAN总线协议详解
  3. CAN总线详解

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

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

相关文章

cnn卷积神经网络(基础)

convolutional neural networks 特征提取(卷积、下采样)->分类器 (全连接) 卷积过程 依次进行数乘 (每个相同位置上的数字相乘再加和) 左右数乘矩阵channel数量要一样,输出得到一个通道 卷…

吴师傅教你几招极速清理C盘,高能操作绝不让你失望!

电脑使用久了,C盘堆积的垃圾过多;每天上网会给电脑带来很多临时文件,这些垃圾文件不清理掉时间久了就会影响到电脑的运行速度;也会导致C盘变红,空间不足。那么,电脑C盘满了如何清理呢?教你几招极…

SpringBoot 如何进行 统一异常处理

在Spring Boot中,可以通过自定义异常处理器来实现统一异常处理。异常处理器能够捕获应用程序中抛出的各种异常,并提供相应的错误处理和响应。 Spring Boot提供了ControllerAdvice注解,它可以将一个类标记为全局异常处理器。全局异常处理器能…

NICE-SLAM: Neural Implicit Scalable Encoding for SLAM论文阅读

论文信息 标题:NICE-SLAM: Neural Implicit Scalable Encoding for SLAM 作者:Zihan Zhu, Songyou Peng,Viktor Larsson — Zhejiang University 来源:CVPR 代码:https://pengsongyou.github.io/nice-slam…

ARM单片机中断处理过程解析

前言 中断,在单片机开发中再常见不过了。当然对于中断的原理和执行流程都了然于胸,那么对于ARM单片机中断的具体处理行为,你真的搞清楚了吗? 今天来简单聊一聊,ARM单片机中断处理过程中的具体行为是什么样的&#xf…

spring5源码篇(13)——spring mvc无xml整合tomcat与父子容器的启动

spring-framework 版本:v5.3.19 文章目录 整合步骤实现原理ServletContainerInitializer与WebApplicationInitializer父容器的启动子容器的启动 相关面试题 整合步骤 试想这么一个场景。只用 spring mvc(确切来说是spring-framework)&#x…

Windows环境下安装及部署Nginx

一、安装Nginx教程 1、官网下载地址:https://nginx.org/en/download.html 2、下载教程:选择Stable version版本下载到本地 3、下载完成后,解压放入本地非中文的文件夹中: 4、启动nginx:双击nginx.exe,若双击…

Vue 3:玩一下web前端技术(五)

前言 本章内容为VUE语法的简单学习与相关语法讨论。 上一篇文章地址: Vue 3:玩一下web前端技术(四)_Lion King的博客-CSDN博客 下一篇文章地址: Vue 3:玩一下web前端技术(六)_L…

算法与数据结构(四)--排序算法

一.冒泡排序 原理图: 实现代码: /* 冒泡排序或者是沉底排序 *//* int arr[]: 排序目标数组,这里元素类型以整型为例; int len: 元素个数 */ void bubbleSort (elemType arr[], int len) {//为什么外循环小于len-1次?//考虑临界情况&#xf…

自动驾驶感知系统-全球卫星定位系统

卫星定位系统 车辆定位是让无人驾驶汽车获取自身确切位置的技术,在自动驾驶技术中定位担负着相当重要的职责。车辆自身定位信息获取的方式多样,涉及多种传感器类型与相关技术。自动驾驶汽车能够持续安全可靠运行的一个关键前提是车辆的定位系统必须实时…

为什么你的独立站有流量没转化?如何做诊断检查?

新店的创业初期,即使网站有流量,但是销售额为零的情况也常有发生。如果你确定流量是高质量的,寻找阻止潜在客户购买的具体因素可能会感到困难重重。 从“立即购买”按钮的色彩选择这样的细节,到构建品牌故事这样的大计划&#xf…

开发一个RISC-V上的操作系统(四)—— 内存管理

目录 往期文章传送门 一、内存管理简介 二、Linker Script 链接脚本 三、动态分配内存 四、测试 往期文章传送门 开发一个RISC-V上的操作系统(一)—— 环境搭建_riscv开发环境_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统(二…

springboot创建并配置环境(三) - 配置扩展属性(上集)

文章目录 一、介绍二、配置文件application.yml 一、介绍 在上一篇文章:springboot创建并配置环境(二) - 配置基础环境中,我们介绍了springboot如何配置基础环境变量。本篇文章讨论如何处理配置文件。即来自不同位置的配置属性,如&#xff1…

chatglm2外挂知识库问答的简单实现

一、背景 大语言模型应用未来一定是开发热点,现在一个比较成功的应用是外挂知识库。相比chatgpt这个知识库比较庞大,效果比较好的接口。外挂知识库大模型的方式可以在不损失太多效果的条件下获得数据安全。 二、原理 现在比较流行的一个方案是langcha…

OpenLayers入门,OpenLayers使用瓦片加载事件实现瓦片加载进度条,进度条根据瓦片加载数量自动更新进度,加载完毕后隐藏进度条

专栏目录: OpenLayers入门教程汇总目录 前言 本章主要讲解OpenLayers如何使用瓦片加载事件(tileloadstart)、瓦片加载完成事件(tileloadend)以及瓦片加载错误事件(tileloadend)。 并通过OpenLayers使用瓦片加载事件通过实现瓦片加载进度条的案例,实现进度条根据瓦片加…

vue3 vant上传图片

在 Vue 3 中使用 Vant 组件库进行图片上传,您可以使用 Vant 的 ImageUploader 组件。ImageUploader 是 Vant 提供的图片上传组件,可以方便地实现图片上传功能。 以下是一个简单的示例,演示如何在 Vue 3 中使用 Vant 的 ImageUploader 组件进行…

解决Font family [‘sans-serif’] not found问题

序言 以下测试环境都是在 anaconda3 虚拟环境下执行。 激活虚拟环境 conda activate test_python_env 或 source activate test_python_env工具: WinSCP Visual Studio Code 这里笔者使用 WinSCP 工具连接,编辑工具是 Visual Studio Code 一、字体…

【Python数据分析】Python基本数据类型

🎉欢迎来到Python专栏~Python基本数据类型 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:Python学习专栏 文章作者技术和水平有限,如果文中出现错误,希望…

C\C++内存管理

目录 1.C/C内存分布2.C语言中动态内存管理方式3.C中动态内存管理3.1new/delete内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数4.2重载operator new与operator delete(了解) 5.new和delete的实现原理5.1内置类型5.2 自定义类…

Vue 3:玩一下web前端技术(六)

前言 本章内容为VUE请求后端技术与相关技术讨论。 上一篇文章地址: Vue 3:玩一下web前端技术(五)_Lion King的博客-CSDN博客 下一篇文章地址: (暂无) 一、请求后端技术 1、使用Mock.js模…