CAN通信总结

article/2025/8/30 0:57:51

CAN通信总结

基本介绍

​ 1. CAN通过两条通信线(双绞线)产生的电压差传输数据,一个CAN网络里的所有节点都挂在这两条通信线上,使用差分信号半双工通信。

​ 2. CAN总线是广播类型的总线。所有节点都将始终接收所有通信,无法向一个特定的节点发送报文,但是,CAN 硬件能够提供本地过滤能力,从而每个节点可以只对感兴趣的报文做出响应。

物理层

网络拓扑

​ CAN物理层的形式主要分为闭环总线开环总线网络两种,一个适合于高速通讯,一个适合于远距离通讯。它的网络由很多CAN节点构成,每个节点均由一个MCU(微控制器)、一个CAN控制器和一个CAN收发器构成,然后使用双绞线连接到CAN网络中。

闭环

​ CAN闭环通讯网络是一种遵循ISO11898标准的高速、短距离网络,它的总线最大长度为40m,通信速度通信速率为 125 kbps ~1Mbps。在该闭环网络中,CAN总线的起止端都有一个120Ω的终端电阻,用来做阻抗匹配,以减少回波反射。其网络拓扑结构如图所示:

在这里插入图片描述

开环

​ CAN开环总线网络是遵循ISO11519-2标准的低速、远距离网络,它的最大传输距离为1km,通信速率为 10k~125 kbps 。两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2kΩ的电阻。其网络拓扑结构如图所示:

在这里插入图片描述

电平规范

​ CAN 控制器是根据CAN_LCAN_H上的电位差(即差分信号的形式)来判断总线电平。总线总线电平分为显性电平(对应逻辑0,电位差为2V左右)和隐性电平(对应逻辑1,电位差为0V),二者必居其一。发送方通过使总线电平发生跳变,将消息发送给接收方。对于高速CAN,总结一下,也就是:

  • CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。
  • CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。

在这里插入图片描述

协议层

帧类型

帧类型帧用途
数据帧用于发送单元向接受单元传送数据
遥控帧用于向具有相同ID的发送单元请求数据
错误帧当检测出错误时向其他单元通知错误
过载帧用于接收单元通知其他单元尚未做好接收准备
间隔帧将数据帧及遥控帧与其他帧分离

数据帧

​ 数据帧有标准格式扩展格式,这2种格式都具有相同的帧结构。总结构如下图所示:

在这里插入图片描述

各字段含义及长度分别为:

  • 起始段,长度固定为 1 bit,逻辑 0
  • 仲裁字段(ID),这里ID非地址,而是当两个或多个节点竞争总线时,确定报文的优先级。
    • 对于 CAN 2.0A,一个 11 位的标识符和一个支配数据帧的 RTR
    • 对于 CAN 2.0B,一个 29 位(11+18)的标识符,两个隐性位:SRRIDERTR位。
  • 控制段,前 2 bit 规定为 0,后 4 bit 为数据段的 Byte 长度
  • 数据段,长度可变,0~8 Byte
  • CRC段,包含15位CRC值和1位CRC界定符
  • ACK段,任何能够正确接收报文的CAN控制器都会在每条报文的末尾发送一个应答位。发送送节点检查应答位是否存在,如果没有检测到应答位,会重新发送报文。
  • 帧结束,由7个隐形位(高电平)组成。

在这里插入图片描述

对于软件工程师来说可以不关注,比较重要的是理解仲裁段、控制段和数据段的含义,其他部分都由CAN底层固件自动封装

Tips
  • 总线上存在应答位(ACK)不表示任何目标地址已经收到报文。唯一可知的是,总线
    上的一个或多个节点已经正确收到了它。
  • 帧格式和帧ID相同的情况下,数据帧优先于远程帧(RTR)。
  • 对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高(RTR、SRR)。
  • 任何 CAN 控制器都可在检测到空闲总线时开始传送数据。这可能会导致两个或多个控制器(几乎)同时开始传送报文。冲突的解决方式如下。传送节点在发送报文时监视总线,如果节点在自身发送隐性位时检测到显性位,它将立即退出仲裁过程并转变成接收方。仲裁在整个仲裁域进行,当该字段已经被发送时,总线上恰好只剩下一个传送节点。这个节点就像什么都没发生那样继续传送。其它潜在的传送节点将在总线下次空闲时尝试重传它们的报文,仲裁过程不会有时间损耗。
  • CAN报文被称为“内容寻址”。常规的报文地址类似于“这是发给节点 X 的报文”。而内容寻址的报文类似于“这是包含标签为 X 的数据的报文”。这两个概念之间的区别很小但是非常重要。
  • 标识符不能将 7 个最高有效位设置为全部,所以 11 位标识符的标识符只有 0 到 2031,而 29 位标识符可以使用 532676608 个不同的值。

遥控帧

​ **用途:**远程帧在实践中很少使用,可用于各单元的定期连接确认/应答。例如,如果节点 A 发送仲裁字段设置为 234 的远程帧,那么节点 B,如果已经正确初始化,则可以使用仲裁字段也设置为 234 的数据帧进行响应。

​ 遥控帧与数据帧十分相似,但是有两个重要的区别

​ - 它被显式标记为远程帧(仲裁字段中的 RTR 位为隐性)

​ - 没有数据字段,数据长度码(DLC)以所请求数据帧的数据长度码表示

错误帧

​ 它在一个节点检测到故障时被传送,并将导致所有其它节点也检测到故障,所以它们也将发送错误帧。然后传送节点将自动尝试重传报文。有一种精准的错误计数器方案,可以确保节点无法通过重复传输错误帧来破坏总线通信。错误帧包含错误标志,它是 6 位长的相同值(因此违反位填充规则)和错误定界符(8 个隐性位)。错误定界符提供一些空间,以便总线上其它节点在检测到第一个错误标志时可以发送它们的错误标志。

​ 主要包含5种类型:

  • CRC错误:发送节点计算的CRC与接受节点计算的CRC不同
  • 应答错误:发送节点在ACK阶段未收到应答信号
  • 位发送错误:发送节点发现正发送电平与总线电平不一致
  • 格式错误:传输的帧格式与任何一种合法帧格式不同
  • 位填充错误:传输信号违反位填充规则

在这里插入图片描述

过载帧

​ 过载帧是用于接收单元通知发送单元它尚未完成接收准备的帧。过载帧与主动错误帧非常相似,甚至可以把过载帧直接理解成也是一种错误帧,只是它的错误触发条件不同。

​ 在两种情况下,节点会发送过载帧:

​ - 接收单元要求发送节点延缓下一个数据帧或远程帧的传输;

​ - 帧间隔(Intermission)的 3 bit 内检测到显性位

帧间隔

​ 帧间隔是用于分隔数据帧、遥控帧这些有效数据的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、 遥控帧、错误帧、过载帧)分开。

Tips

​ 过载帧和错误帧由于要按照发送条件立即执行,前不能插入帧间隔

应用

常用CAN控制器、收发器:

在这里插入图片描述

PC端调试助手:

​ CANTEST下载地址:https://www.zlg.cn/can/down/down/id/22.html

参考链接

  1. https://zhuanlan.zhihu.com/p/538834760

  2. https://blog.csdn.net/weixin_53762042/article/details/117289970

  3. https://blog.csdn.net/qq_36823004/article/details/124788497


http://chatgpt.dhexx.cn/article/c90NqAnH.shtml

相关文章

CAN 通信原理学习

文章目录 CAN通信一&#xff1a;基本概述1.1 can总线是什么1.2 can总线协议的特点1.3 can的网络通信结构1.3.11.3.2 can协议网络层次 二&#xff1a;socket can在通信网络中的应用三 一个程序 CAN通信 一&#xff1a;基本概述 1.1 can总线是什么 CAN 是 Controller Area Net…

CAN通信协议

在 CAN 协议中&#xff0c;所有的消息都以固定的格式发送。总线空闲时&#xff0c;所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时&#xff0c;根据标识符&#xff08;Identifier 以下称为 ID&#xff09;决定优先级。ID 并不是表示发送的目的地…

CAN通信讲解(1)——基本知识

本文注意参考了《CAN入门书》&#xff0c;源于此书图片不再特殊标注 目录 1.1 CAN总线背景1.2 CAN总线定义1.3 CAN总线信号特性1.4 CAN总线传输1.5 OSI基本参照模型和CAN总线协议 1.1 CAN总线背景 为减少汽车线束数量&#xff0c;1986年&#xff0c;博世开发出面向汽车的CAN通…

CAN通信

通讯方式 UART&#xff1a;(Universal Asynchronous Receiver Transmitter&#xff1a;通用异步收发器/异步串行通信口)&#xff0c;是一种通用的串行数据总线&#xff0c;用于异步通信&#xff0c;支持全双工。它包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线…

CAN通信----基本原理

STM32标准库开发 文章链接&#xff1a; STM32F103标准库开发----目录 STM32F103标准库开发----CAN总线通信实验----初始化/波特率 STM32F103标准库开发----CAN总线通信实验----发送和接收 资源链接&#xff1a; 本例程已经调试成功&#xff0c;下载即可使用。 STM32F103标准库…

CAN通信详解(全)

本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯&#xff0c;并将结果显示在TFTLCD模块上。本章分为如下几个部分&#xff1a; 30.1 CAN简介 30.2 硬件设计 30.3 软件设计 30.4 下载验证 30.1 CAN简介 CAN 是Controller Area Network 的缩…

Tomcat优化禁用AJP协议

登录tomcat 在服务状态页面中可以看到&#xff0c;默认状态下会启用AJP服务&#xff0c;并且占用8009端口。 什么是AJP呢&#xff1f; AJP&#xff08;Apache JServer Protocol&#xff09; AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互&#xff1b;为了…

tomcat启动出现错误:Failed to destroy end point associated with ProtocolHandler[“ajp-nio-8009“](解决非常简单)

tomcat启跑不起来而且报了很多莫名其妙的错误不知道从哪里找起 启动服务器出现这个错误 console提示&#xff1a;Failed to destroy end point associated with ProtocolHandler[“ajp-nio-8009”] 直接看web.xml的url-pattern这个属性是不是哪一个少了‘/’ 或者 如果没有…

Java安全-Tomcat AJP 文件包含漏洞(CVE-2020-1938)幽灵猫漏洞复现

Tomcat AJP 文件包含漏洞&#xff08;CVE-2020-1938&#xff09; CVE-2020-1938 又名GhostCat ApacheTomcat服务器中被发现存在文件包含漏洞&#xff0c;攻击者可利用该漏洞读取或包含Tomcat 上所有 webapp 目录下的任意文件 该漏洞是一个单独的文件包含漏洞&#xff0c;依赖…

Aapache Tomcat AJP 文件包含漏洞-(CVE-2020-1938/CNVD-2020-10487)

漏洞编号 CVE-2020-1938 CNVD-2020-10487 靶机环境 Vulhub虚拟靶场 vulhub-master/tomcat/CVE-2020-1938 启动docker&#xff1a; 启动成功&#xff1a; 0x00 漏洞简介 2月20日&#xff0c;国家信息安全漏洞共享平台&#xff08;CNVD&#xff09;发布了Apache Tomcat文件包含漏…

Apache-Tomcat-Ajp漏洞测试与修复

说明 Apache Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互。由于Tomcat本身也内含了HTTP服务器&#xff0c;因此也可以视作单独的Web服务器。此漏洞为文件包含漏洞&#xff0c;攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件&#xf…

解决AJP漏洞操作记录

前言 最近Tomcat爆出AJP漏洞&#xff0c;升级对应版本的Tomcat是比较好的规避方法。本文将记录笔者在升级Tomcat 9.0.31时踩过的一些坑&#xff0c;以便大家能快速升级Tomcat。 本文只针对Tomcat 9.0.31版本的操作记录。 Tomcat受影响版本&#xff1a; Apache Tomcat 9.x &l…

tomcat中ajp及8009端口用处

tomcat常用于提供servlet/jsp容器服务&#xff0c;简单方便、使用高效。但是tomcat处理静态文件资源的性能不足&#xff08;应该是serviece部分&#xff09;&#xff0c;同时&#xff0c;如果用户直接与tomcat进行http的连接获取静态资源&#xff08;连接器connector部分&#…

CVE-2020-1938 :Apache Tomcat AJP 漏洞复现和分析

一、漏洞描述 Apache Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器.默认情况下,Apache Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互.但Apache Tomcat在AJP协议的实现上存在漏洞,导致攻击者可以通过发送恶意的AJP请求,可以读取或者包含Web应…

网络抓包方式复现Tomcat- AJP协议文件读取/命令执行漏洞(CVE-2020-1938 / CNVD-2020-10487)

目录 测试是否安装成功​编辑 基础简介 Tomcat Connector(连接器) ​编辑Servlet(服务程序) Tomcat内部处理请求流程 文件读取漏洞 抓包复现 需要将下图中抓取到的数据包修改一下 ​编辑 替换成二进制数据的形式&#xff1a; 运行结果 ​编辑 创建脚本文件&#xf…

AJP协议

由于tomcat的html和图片解析功能相对其他服务器如apche等较弱&#xff0c;所以&#xff0c;一般都是集成起来使用&#xff0c;只有jsp和servlet服务交由tomcat处理&#xff0c;而tomcat和其他服务器的集成&#xff0c;就是通过ajp协议来完成的。AJP协议AJP13是定向包协议。因为…

Apache Tomcat AJP协议文件读取与包含

永远也不要忘记能够笑的坚强&#xff0c;就算受伤&#xff0c;我也从不彷徨。 0x01.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目&#xff0c;作为目前比较流行的Web应用服务器&#xff0c;深受Java爱好者的喜爱&#xff0c;并得到了部分软件开发商的…

Tomcat AJP 文件包含漏洞(CVE-2020-1938)

目录 1&#xff0e;漏洞简介 2、AJP13 协议介绍 Tomcat 主要有两大功能&#xff1a; 3&#xff0e;Tomcat 远程文件包含漏洞分析 4&#xff0e;漏洞复现 5、漏洞分析 6&#xff0e;RCE 实现的原理 1&#xff0e;漏洞简介 2020 年 2 月 20 日&#xff0c;公开CNVD 的漏洞公…

Tomcat HTTP协议与AJP协议

https://blog.csdn.net/jeikerxiao/article/details/82745516 Tomcat HTTP协议与AJP协议 HTTP Connector AJP Connector 配置 Tomcat在server.xml中配置了两种连接器。 HTTP Connector 拥有这个连接器&#xff0c;Tomcat才能成为一个web服务器&#xff0c;但还额外可处理Serv…

Tomcat架构解析之AJP

一、前言 除了HTTP&#xff0c;Tomcat还支持AJP协议&#xff0c;以便于Apache HTTP Server等Web服务器集成&#xff0c;这篇博客主要讲解AJP协议的基础知识以及其配置使用方式。 二、基础知识 为了满足负载均衡、静态资源优化、遗留系统集成&#xff08;如集成PHP Web应用&…