一文详解汽车电子CAN总线

0.什么是CAN总线

CAN总线(控制器区域网络Controller Area Network)是一个中央网络系统,连接不同的电子控制单元(ECU)以及车辆中的其他设备。现在的汽车可以有100个ECU,因此CAN总线通信变得非常重要。

1.CAN总线流行的背景

  • 集中式:CAN总线系统允许对连接到网络的ECU进行集中控制,使控制ECU变得容易。

  • 鲁棒性:CAN总线协议具有内置的故障检测机制,因此它具有较好的鲁棒性。当检测到错误时,网络中的所有节点(ECU)都被告知此错误,所有节点丢弃此消息,以保证数据的一致性。CAN总线系统还具有抗电磁干扰的鲁棒性。

  • 低成本和高效率:CAN不需要复杂的布线,因为通信不是通过直接的模拟信号。相反,通过单个CAN接口进行通信,并且是一种非常有效的基于消息的协议。

  • 灵活性:由于CAN使用基于消息的协议,总线上的ECU没有关联的id,因此很容易添加或删除ECU。

  • 速度:数据的传输速度很重要。因此,根据电缆的长度,高速可以支持40 kbps到1 Mbps之间的数据传输速率。

2.CAN总线的历史

Robert Bosch GmbH于1983年开始开发CAN总线协议,但CAN总线协议于1986年在密歇根州底特律汽车工程师协会(SAE)会议上才予以正式发布。

1993年,国际标准化组织(ISO)发布了CAN标准ISO 11898,该标准后来被重组为两个部分:

  • ISO 11898-1应用于数据链路层

  • ISO 11898-2为CAN物理层,用于高速CAN

如上所示,从1983年开始至今,CAN发生了很多的发展变化。博世仍在致力于扩展CAN标准,并于2012年发布了CAN FD或CAN with Flexible Data-Rate。

3.CAN总线的应用

其最常见的应用是车载电子网络,因为CAN是为汽车使用而创建的。然而,多年来CAN已用于许多其他领域,如铁路,工业自动化,电梯,自动扶梯等。

说到汽车行业,由于现代汽车对安全性和舒适性的重视,大多数现代汽车都可以拥有100个电子控制单元(ECU)。ECU主要用于以下方面:

  • 发动机控制

  • 燃油喷射系统

  • 安全气囊、传动系统

  • 防抱死制动系统(ABS)

  • 电子动力转向,音响系统

  • 电动车窗、车门和座椅

  • 电动、混合动力汽车的电池管理系统

  • 其他领域

其中一些ECU与传感器和执行器交互以执行各种操作。下面是一些具体的例子。

  • 燃油喷射系统:ECU计算油门踏板角度,并通过CAN发送信号,以便其他ECU可以在需要时使用它。控制燃油喷射的ECU读取信号,进行计算,并向执行器发送燃油喷射信号。因此CAN总线系统在其中起着重要的作用。

  • 防抱死制动系统(ABS)    ECU通过CAN与传感器、执行器和其他ECU相互作用,从而实现有效制动,防止车轮在制动过程中锁死。

4.CAN总线层

想知道CAN协议是如何工作的?作为第一步,首先需了解CAN层次结构。ISO/OS参考模型指定了以下七个层。

标准的CAN总线实现,忽略了数据链路层与应用层之间的连接。

CAN总线物理层

这一层定义了电平、CAN总线上的信号方案、电缆阻抗等。以下是物理层的主要特点:

  • 双线平衡信令方案由CAN标准(ISO 11898部分)定义,又称高速CAN。

  • 基于ISO标准的低总线速度的双线平衡信令方案11898-3又称低速CAN。

  • 单线接地符合SAE J2411标准。

CAN总线拓扑

下面是一个示例CAN网络,其中节点由两条线连接,CAN High (CAN- h)和CAN Low (CAN- l)。CAN总线端接120欧姆电阻。总线两端的终端电阻是必要的,以消除总线上的任何电反射,并保证正确的直流电平。通常情况下,物理传输采用双绞线共地铜缆。

最大CAN总线速度

根据标准,最大CAN总线速度为1mbit /s,并通过CAN高速收发器实现。对于低速CAN,速度可达125 kbit/s。在标准模式下,单线最高可达50 kbit/s。

电缆长度

对于仲裁方案,信号的波前必须到达最远的节点并在采样之前返回,因此可以在1mbit /s的can速度下使用最大40m的长度。

5.CAN总线协议基础—CAN消息

由于CAN总线是一种广播类型的总线,因此CAN总线上的所有节点都可以获得所有的传输信息。因此,我们无法将特定消息发送到特定节点。

CAN使用短消息。具体来说,CAN有以下消息或帧类型:

  • 数据帧:包含要传输的节点数据

  • 远程帧:获取相应数据帧的传输信息

  • 错误帧:节点检测到错误时发送

  • 过载帧:节点过载时发送

CAN协议帧格式

数据帧

数据帧由以下部分组成:

标准CAN

扩展CAN

仲裁域

这决定了当两个节点争用总线时,哪个消息获得优先级。具体来说,

  • 包含了11位标识符和1位远程传输(RTR)位,该位用于数据帧起主导作用,称为标准CAN。

  • 29位标识符(包括两个隐性位:替代远程请求(SRR)和标识符扩展(IDE)以及RTR位),这被称为扩展CAN。

  • 具有0到8字节数据的数据字段循环冗余校验(CRC)字段,它包含一个用于错误校验的15位校验和.

  • CRC 分隔符

  • ACK位

  • ACK 分隔符

  • End-of-frame (EOF)

远程帧

远程帧获取相应数据帧的传输信息,它没有任何数据字段。因此,对于请求-响应类型的总线通信,远程帧是有用的。

错误帧

错误帧消息就是不符合CAN消息格式规则的消息帧。当节点检测到错误时,发送错误帧。错误帧包括

  • ERROR标志(6位相同的值)

  • 错误分隔符(8位隐性分隔符)

过载帧

顾名思义,当节点过于繁忙时传输过载信息。通常,不使用过载帧。

消息仲裁与优先级

仲裁是决定哪个控制器将使用总线的过程。当两个或多个控制器同时开始传输消息时,总线仲裁变得很重要。

如果发送隐性级别的节点找到了主导级别,那么它将停止仲裁并成为接收方。这个过程确保没有延迟到高优先级消息,发送较低优先级消息的节点将在主导消息结束后尝试重传6位时钟。

6.位时钟

CAN上的每个位至少分为4个quanta。quanta具体分为以下几种类型。

  • 同步段——用于时钟同步,是一个quanta

  • 传播段—— 补偿总线上的延迟

  • 相位段1——缩短以保持时钟同步

  • 相位段2——延长以保持时钟同步

时钟同步

CAN控制器可以通过一定的量程缩短或延长一个比特,从而调整片上总线时钟。这被称为同步跳跃宽度(SJW)。

7.错误处理

CAN协议有一个内置的错误处理机制,可以检测CAN消息中的错误,以便尽快检测到错误。

节点一旦检测到错误,就发送错误标志。其他节点一旦检测到错误标志就丢弃当前消息。

每个节点有两个错误计数器,具体而言,以下两种:

  • 传输错误计数器(TEC)

  • 接收错误计数器(REC)

通过这些错误计数器,CAN节点可以检测故障并限制错误。下面是CAN协议中提到的错误检测方法。

  • 位监控(Bit Monitoring)

  • 位填充(Bit Stuffing)

  • 帧检查(Frame Check)

  • 确认检查(Acknowledgment Check)

  • 循环冗余校验 CRC(Cyclic Redundancy Check)

位监控

位监控确保传输数据的完整性。CAN总线上的每个发送器回读传输的数据,如果传输的数据和实际读取的数据存在差异,则会产生误码。

位填充

位填充是节点在接收到连续的5个相同极性的比特后插入相反极性的比特的过程。接收器移除插入的额外比特。当CAN总线上出现超过5个连续的极性位时,会引发填充错误。

帧检查

有些部分在CAN消息中有固定的格式。如果节点检测到CRC分隔符、ACK分隔符、帧结束、间隔中的无效值,则引发格式错误信号。

确认检查

当节点接收到消息时,期望在消息的确认槽中发送一个主导位。如果ACK槽中缺少主导位,则会引发确认错误。当节点检测到消息中的CRC与它自己计算的CRC不同时,会引发循环冗余校验和(CRC)错误。

8.CAN总线更高层协议

CAN标准定义了物理层(硬件)和数据链路层(基本通信层)。需要一个更高层的协议来管理系统中的通信。有许多高层协议,其中比较常用的几种:

  • CANopen

  • J1939

  • CAN Communication Protocol (CCP)

  • MilCAN

  • CanKingdom

  • ARINC

9.CAN 接口 与 CAN 分析仪

要知道如何读取can总线数据?读取CAN总线需要查看硬件信号。需要CAN接口和CAN分析仪。CAN接口是将CAN总线连接到笔记本电脑或PC进行分析的硬件。它将有一个CAN收发器。CAN分析需要使用CAN分析仪软件,通过CAN接口采集CAN数据。

10.结论

本文回顾了CAN总线的历史由来及应用场景。

11.参考资料

What is CAN bus? – A Complete Guide (2023) -

Introduction to CAN (Controller Area Network) - Technical Articles

CAN Bus Uncovered: The Ultimate Guide for Automotive Enthusiasts

CAN Bus Uncovered: The Ultimate Guide for Automotive Enthusiasts

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android:窗口管理器WindowManager

Android:窗口管理器WindowManager 导言 本篇文章主要是对Android中与窗口(Window)有关的知识的介绍,主要涉及到的有: WindowWindowManagerWindowManagerService 主要是为了更进一步地向下地深入Android屏幕渲染的知识(虽然窗口…

复习Animate和木疙瘩学习笔记-动画制作的回家之路

这个融媒体H5制作平台功能比较完善:包含了Flash(现在叫Animate)传统H5网页制作 720全景视频制作发布网页! 主要功能:素材导入、2D动画制作、常见交互添加、发布生成链接二维码 基本就是一个制作H5为主,但是里面的动画可以依赖4种…

力扣第738题 单调递增的数字 c++ 暴力超时 贪心优化

题目 738. 单调递增的数字 中等 相关标签 贪心 数学 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 1…

【DevChat】智能编程助手 - 使用评测

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

操作系统运行机制

文章目录 操作系统运行机制特权指令VS非特权指令内核态VS用户态中断和异常内中断(异常)外中断中断机制基本原理中断处理过程 系统调用系统调用和库函数的区别为什系统调用时必须的&#xff1f;什么功能需要用到系统调用系统调用的过程小结 操作系统内核 操作系统运行机制 特权…

Java 四种引用类型

文章目录 前言一、整体架构二、强引用&#xff08;Reference&#xff09;三、软引用&#xff08;SoftReference&#xff09;四、弱引用&#xff08;WeakReference&#xff09;五、虚引用&#xff08;PhantomReference&#xff09;六、引用队列&#xff08;ReferenceQueue&#…

React Hooks 实战案例

文章目录 一、React Hooks 简介二、React Hooks 的基本用法1. 使用 useState 创建状态2. 使用 useEffect 添加副作用 三、React Hooks 的常见问题1. 循环引用问题2. 副作用问题 四、React Hooks 实战案例1. 使用 useReducer 和 Redux&#xff1a;2. 使用 useContext&#xff1a…

如何使用drawio画流程图以及导入导出

画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器&#xff0c;让我们以一个最基本的流程图开始。 流程图&#xff0c;就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…

07、SpringCloud -- jmeter 压测

目录 jmeter 入门jmeter 安装测试步骤测试数据模拟多用户操作1、创建http请求2、添加http cookie 管理器3、并发获取当前登录用户数据的效果4、添加多个用户模拟并发请求5、访问方法6、jmeter添加 CSV Data Set Config7、高并发执行访问的效果8、总结流程高并发秒杀压测jmeter …

Python 日期和时间处理教程:datetime 模块的使用

Python 中的日期不是独立的数据类型&#xff0c;但我们可以导入一个名为 datetime 的模块来使用日期作为日期对象。 示例&#xff1a;导入 datetime 模块并显示当前日期&#xff1a; import datetimex datetime.datetime.now() print(x)日期输出 当我们执行上面示例中的代码…

springboot web项目中 Set-Cookie 失败 办法

1. 背景 目前有个项目 线上环境 使用spring session管理的登录 项目中有两个接口 一个用来登录的 登录成功后会设置cookie 后续请求就会使用该cookie &#xff08;cookie的键值就是session Id 和 登录后的信息 例如菜单&#xff0c;权限等&#xff09; 一个用来检查是否登录…

LeetCode热题100 旋转图像

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9…

2022年06月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 运行下列程序&#xff0c;输出的结果是&#xff1f;&#xff08; &#xff09; tup1 (苏炳添, 谷爱凌, 北京冬奥会, …

VSCode编写Unity代码自动补全配置

1.下载并安装.NET 7.0&#xff08;C#插件需要&#xff09;和.NET Framework 4.7.1&#xff08;Unity需要&#xff09; .NET 7.0下载链接&#xff1a;https://dotnet.microsoft.com/en-us/download .NET Framework 4.7.1下载链接&#xff1a;https://dotnet.microsoft.com/en-…

cmd基本命令

一、cmd黑框是什么 cmd 是 Windows 命令提示符&#xff08;cmd.exe&#xff09;是 Windows NT 及以后的 Windows 系统下的一个用于运行 Windows 控制面板程序或某些 DOS 程序的shell程序&#xff1b;或在 Windows CE 下只用于运行控制面板程序的外壳程序。 二、打开步骤 wind…

H5游戏源码分享-命悬一线

H5游戏源码分享-命悬一线 在合适的时机跳下绳子&#xff0c;能安全站到木桩上&#xff0c;就通过。 游戏源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name&…

多线程---阻塞队列+生产者消费者模型

文章目录 阻塞队列自己实现一个阻塞队列&#xff08;三步&#xff09;标准库中的阻塞队列使用阻塞队列的优势 生产者消费者模型 阻塞队列 队列&#xff08;Queue&#xff09;是我们熟悉的一个数据结构&#xff0c;它是“先进先出”的。但是并不是所有的队列都是“先进先出”的…

RocketMq源码分析(八)--消息消费流程

文章目录 一、消息消费实现二、消息消费过程1、消息拉取2、消息消费1&#xff09;提交消费请求2&#xff09;消费消息 一、消息消费实现 消息消费有2种实现&#xff0c;分别为&#xff1a;并发消费实现&#xff08;ConsumeMessageConcurrentlyService&#xff09;和顺序消费实现…

pre-existing shared memory block

发生原因: 1.服务器cpu、内存进行扩容 2.非正常关闭,导致任在占用共享内存段 解决方案: 根据shmid进行关闭 ipcs -mipcrm -m xxx

Kotlin协程核心理解

一、协程是什么&#xff1f; 1.1 基本概念的理解 我们知道JVM中的线程的实现是依赖其运行的操作系统决定的&#xff0c;JVM只是在上层进行了API的封装&#xff0c;包含常见的有线程的启动方法&#xff0c;状态的管理&#xff0c;比如&#xff1a;Java中抽象出了6种状态&#x…