CAN通信----基本原理

article/2025/8/30 3:51:59

STM32标准库开发

文章链接:
STM32F103标准库开发----目录
STM32F103标准库开发----CAN总线通信实验----初始化/波特率
STM32F103标准库开发----CAN总线通信实验----发送和接收

资源链接:
本例程已经调试成功,下载即可使用。
STM32F103标准库开发----CAN通信收发实验----程序源码


一、CAN总线简介

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。
在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。
由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。
此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

CAN总线特点:

  1. 多主控制
  2. 系统柔软性
  3. 速度快,距离远
  4. 具有错误检测、错误通知和错误恢复功能
  5. 故障封闭功能
  6. 连接节点多

CAN总线标准

CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。
ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同,但物理层不同。
在这里插入图片描述
总线拓扑图
在这里插入图片描述

闭环总线网络----ISO11898

闭环总线网络高速、短距离,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个120 欧的电阻。
在这里插入图片描述

开环总线网络----ISO11519

开环总线网络低速、远距离,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个2.2千欧的电阻。
在这里插入图片描述

差分信号

CAN总线采用差分信号传输,通常情况下只需要两根信号线就可以进行正常的通信。
在差分信号中,逻辑0和逻辑1是用两根差分信号线的电压差来表示。

当处于逻辑1,CAN_High和CAN_Low的电压差小于0.5V时(0V),称为隐性电平(Recessive);
当处于逻辑0,CAN_High和CAN_Low的电压差大于0.9V时(2V),称为显性电平(Dominant)。

在这里插入图片描述
在这里插入图片描述
差分信号的传输的优点:

  • 抗干扰能力强
  • 能有效抑制它对外部的电磁干扰
  • 时序定位精确

二、CAN 协议

CAN 帧格式

为了更有效地控制通讯,CAN 一共规定了 5 种类型的帧。
它们的类型及用途说明如表所示:

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

1. 数据帧

数据帧由 7 个段构成,具体数据帧构成图如下:
在这里插入图片描述

(1)帧起始(标准、扩展格式相同)

表示帧开始的段,1个位的显性位
在这里插入图片描述

(2)仲裁段(标准、扩展格式不同)

仲裁段结构图如下图所示:
在这里插入图片描述

表示该帧优先级的段,标准格式扩展格式在仲裁段的构成有所不同。

标准格式 ---- 共12位11位基本ID1位RTR位

  • 帧ID
    标准格式的 ID 有 11 个位,从 ID28 到 ID18 被依次发送。
    禁止高7位都为隐性(禁止设定:ID=1111111XXXX)。

  • RTR位 ---- 远程传输请求位
    用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧

扩展格式 ---- 共32位11位基本ID1位SRR位1位IDE位18位扩展ID1位RTR位

  • 帧ID
    扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX)。

  • SRR 位
    只存在于扩展格式,它用于替代标准格式中的 RTR位。
    由于扩展帧中的 SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高

  • IDE 位 ---- 标识符扩展位
    用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式

  • RTR位 ---- 远程传输请求位
    用于区分数据帧和遥控帧的:显性电平 ---- 数据帧,隐性电平 ---- 遥控帧

(3)控制段(标准、扩展格式不同)

控制段结构图如下图所示:
在这里插入图片描述

表示数据的字节数及保留位的段,标准格式和扩展格式的构成有所不同。
6 个位构成:

标准格式1位IDE位1位r0保留位4位DLC数据长度码

  • IDE 位 ---- 标识符扩展位
    用于区分标准格式与扩展格式:显性电平 ---- 标准格式,隐性电平 ----- 扩展格式

  • 保留位 ---- r0
    保留位必须全部以显性电平发送。
    但接收方可以接收显性、隐性及其任意组合的电平。

  • 数据长度码 ---- DLC
    表示发送/接收的数据长度(字节)。
    数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。

扩展格式2位 r0 和 r1 保留位4位DLC数据长度码

  • 保留位 ---- r0、r1
    保留位必须全部以显性电平发送。
    但接收方可以接收显性、隐性及其任意组合的电平。

  • 数据长度码 ---- DLC
    表示发送/接收的数据长度(字节)。
    数据的字节数必须为 0~8 字节,但接收方对 DLC = 9~15 的情况并不视为错误。

数据长度码与数据的字节数的对应关系如下表所示:

数据长度码数据字节数
DLC3DLC2DLC1DLC0
D-显-0D-显-0D-显-0D-显-00
D-显-0D-显-0D-显-0R-隐-11
D-显-0D-显-0R-隐-1D-显-02
D-显-0D-显-0R-隐-1R-隐-13
D-显-0R-隐-1D-显-0D-显-04
D-显-0R-隐-1D-显-0R-隐-15
D-显-0R-隐-1R-隐-1D-显-06
D-显-0R-隐-1R-隐-1R-隐-17
R-隐-1D-显-0D-显-0D-显-08

(4)数据段(标准、扩展格式相同)

数据段可包含 0~8 个字节的数据。
从 MSB(最高位)开始输出。
在这里插入图片描述

(5)CRC段(标准、扩展格式相同)

CRC 段是检查帧传输错误的帧。
由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)构成。
在这里插入图片描述
CRC 顺序—15位
CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

CRC 界定符
用于分隔的位

(6)ACK段(标准、扩展格式相同)

ACK 段用来确认是否正常接收。
由 1位 ACK 槽(ACK Slot) 和1位 ACK 界定符 构成。
在这里插入图片描述
ACK 槽(ACK Slot)
发送单元在 ACK 段发送 2 个位的隐性位。
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,
通知发送单元正常接收结束。这称作“发 送 ACK”或者“返回 ACK”。

ACK 界定符
用于分隔的位

(7)帧结束(标准、扩展格式相同)

帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
在这里插入图片描述

2. 遥控帧(远程帧)

接收单元向发送单元请求发送数据所用的帧。
遥控帧由 6 个段组成,遥控帧没有数据帧的数据段

具体遥控帧构成图如下:
在这里插入图片描述
遥控帧的 RTR 位为隐性位,没有数据段。

3. 错误帧

用于在接收和发送消息时检测出错误通知错误的帧。
错误帧由错误标志和错误界定符构成。
在这里插入图片描述

(1)错误标志

错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6个位的显性位。
被动错误标志:6个位的隐性位。

(2)错误界定符

错误界定符由 8 个位的隐性位构成。

4. 过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧。
过载帧由过载标志和过载界定符构成。
在这里插入图片描述

(1)过载标志

6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。

(2)过载界定符

8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。

5. 帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。
数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
在这里插入图片描述

(1)间隔

3 个位的隐性位。

(2)总线空闲

隐性电平,无长度限制(0 亦可)。
本状态下,可视为总线空闲,要发送的单元可开始访问总线。

(3)延迟传送(发送暂时停止)

8个位的隐性位。
只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

优先级

在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。
连续输出显性电平最多的单元可继续发送。
在这里插入图片描述

(1)数据帧和遥控帧的优先级

具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,可继续发送。

数据帧 > 遥控帧

在这里插入图片描述

(2)标准格式和扩展格式的优先级

标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。

标准格式 > 扩展格式

在这里插入图片描述

位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。
在这里插入图片描述

(1)发送单元的工作

在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则要插入 1 位与前 5 位反型的电平。

(2)接收单元的工作

在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个位)再接收。
如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

位时序

为了实现位同步,CAN 协议把每一个数据位的时序分解成如下图所示的 SS 段、PTS 段、PBS1 段、PBS2 段,这四段的长度加起来即为一个 CAN 数据位的长度。
分解后最小的时间单位是 Tq,而一个完整的位由 8~25 个 Tq 组成。

在这里插入图片描述
采样点:
所谓采样点是读取总线电平,并将读到的电平作为位值的点。
位置在 PBS1 结束处。

各段的作用如下表所示:

在这里插入图片描述

硬件同步

接收单元在总线空闲状态检测出帧起始时进行的同步调整。
在检测出边沿的地方不考虑 SJW 的值而认为是 SS 段。
在这里插入图片描述

重新同步

在接收过程中检测出总线上的电平变化时进行的同步调整。
每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步。
但如果发生了超出 SJW值的误差时,最大调整量不能超过 SJW 值。
相位超前时
在这里插入图片描述
相位滞后时
在这里插入图片描述



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

相关文章

CAN通信详解(全)

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

Tomcat优化禁用AJP协议

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

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

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

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

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

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

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

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

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

解决AJP漏洞操作记录

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

tomcat中ajp及8009端口用处

tomcat常用于提供servlet/jsp容器服务,简单方便、使用高效。但是tomcat处理静态文件资源的性能不足(应该是serviece部分),同时,如果用户直接与tomcat进行http的连接获取静态资源(连接器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内部处理请求流程 文件读取漏洞 抓包复现 需要将下图中抓取到的数据包修改一下 ​编辑 替换成二进制数据的形式: 运行结果 ​编辑 创建脚本文件&#xf…

AJP协议

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

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

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

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

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

Tomcat HTTP协议与AJP协议

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

Tomcat架构解析之AJP

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

HTTP协议与AJP协议

AJP 全称 Apache JServ Protocol, 是定向包协议,因为性能的原因,使用二进制格式来传输可读性文本,WEB服务器通过TCP连接和SERVLET容器连接。 一旦WEB服务器打开了一个到SERVLET容器的连接,连接处于下面的状态&#xff…

解决Destroying ProtocolHandler [“ajp-apr-8009“]

今天刚开始调JSP网站还好好的,后来中间注销了电脑一次, 再打开调试它,就遇到了这个 无法启动服务器的问题: Destroying ProtocolHandler ["ajp-apr-8009"] 上网百度了下,说是端口号被占用了。 解决办法&…

你知道HTTP协议,但你了解AJP协议吗?

什么是AJP协议? AJP 协议用于web服务器和应用服务器之间的通信?为什么不用HTTP呢? Web服务器和应用服务器有什么区别? AJP协议和HTTP 协议有什么区别? 为什么客户端与服务器之间的通信使用HTTP协议而不是用AJP协议&…

WEB安全:Tomcat-Ajp协议漏洞分析

一、漏洞描述 Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。 Apache Tomcat服务器存在文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat 上所有 webapp 目录下的任意文件,如:webapp 配置文件或源代码…

ajp 定向包协议 二进制代替文本提高性能 简介

AJP协议是定向包(面向包)协议,采用二进制形式代替文本形式,以提高性能。Web Server一般维持和Web Container的多个TCP Connecions,即TCP连接池,多个request/respons循环重用同一个Connection。但是当Connec…