CAN协议

文章目录

  • CAN介绍
  • CAN的优势
    • 多主控制
    • 通信速度较快,通信距离远
    • 具有错误检测、错误通知和错误恢复功能
    • 故障封闭功能
    • 连接节点多
  • ISO11519-2物理层特性
  • ISO11898物理层特性
    • CAN 收发芯片 JTA1050
  • CAN 协议5 种帧
    • 5种帧介绍
    • 数据帧的构成
      • 帧起始
      • 仲裁段
      • 控制段
      • 数据段
      • CRC段
      • ACK段
      • 帧结束

CAN介绍

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。

  • Controller意味着 ECU electronic control unit电子控制单元。

在这里插入图片描述ECU集成了供电系统 单片机 驱动系统,是汽车里面最小的控制模块。
在这里插入图片描述CAN就是为了让ECU进行通讯而设计。组成局域网进行通讯。

  • 现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。CAN在欧洲是汽车网络的标准协议。

CAN 有两种标准

  • ISO11898是针对通信速率为125Kbps~1Mbps 的高速通信标准。
  • ISO11519-2是针对通信速率为 125Kbps以下的低速通信标准。

异步通讯

  • I2C、 SPI 等具有时钟信号的同步通讯方式不同, CAN 通讯是一种异步通讯
  • CAN只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。

半双工

  • 由于CAN 总线协议的物理层只有 1 对差分线,在一个时刻只能表示一个信号,所以对通讯节点来说, CAN 通讯是半双工的,收发数据需要分时进行。

CAN的优势

多主控制

  • 在总线空闲时,所有单元都可以发送消息(多主控制)
  • 两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。

通信速度较快,通信距离远

  • 最高 1Mbps(距离小于 40M)
  • 最远可达 10KM(速率低于 5Kbps)。
    在这里插入图片描述

具有错误检测、错误通知和错误恢复功能

  • 所有单元都可以检测错误(错误检测功能)
  • 检测出错误的单元会立即同时通知其他所有单元(错误通知功能)
  • 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

故障封闭功能

  • CAN 可以判断出错误的类型
    • 总线上暂时的数据错误(如外部噪声等)
    • 持续的数据错误(如单元内部故障、驱动器故障、断线等)。
  • 当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

连接节点多

  • CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。
    • CAN 通讯协议不对节点进行地址编码,而是对数据内容进行编码,所以网络中的节点个数理论上不受限制。
    • 实际上可连接的单元数受总线上的时间延迟及电气负载的限制
      • 降低通信速度,可连接的单元数增加。
      • 提高通信速度,则可连接的单元数减少。

ISO11519-2物理层特性

  • 标准的低速、远距离“开环网络”,要求每根总线上各串联有一个“2.2 千欧”的电阻。
  • 最大传输距离为 1km,最高通讯速率为 125kbps
  • 电气特性
    • 1:
    • 0:
      在这里插入图片描述

ISO11898物理层特性

在这里插入图片描述
在这里插入图片描述
高速网络

  • 标准的高速、近距离“闭环网络”。

传输速率与传输距离

  • 线最大长度为 40m,通信速度最高为 1Mbps。

通讯节点

  • CAN 通讯节点由一个 CAN 控制器及 CAN 收发器组成
    • 控制器与收发器之间通过CAN_Tx 及 CAN_Rx 信号线相连
      § CAN_Tx 及 CAN_Rx 使用普通的类似 TTL 逻辑信号
    • 收发器与 CAN 总线之间使用 CAN_High 及 CAN_Low信号线相连
      § CAN_High 及CAN_Low 是一对差分信号线

电气特性
差分线使用两根线表示一个信号。

在这里插入图片描述

  • 逻辑 1 时(隐性电平):CAN_High 和 CAN_Low线上的电压均为 2.5v,即它们的电压差 VH-VL=0V
  • 表示逻辑 0 时(显性电平),CAN_High 的电平为 3.5V, CAN_Low 线的电平为 1.5V,即它们的压差为2V。

线与特性

  • 在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。
  • 假如有两个 CAN 通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的, 即可以认为显性具有优先的意味

终端电阻

  • 在 CAN 总线的起止端都有一个 120Ω的终端电阻,来做阻抗匹配,以减少回波反射。
    在这里插入图片描述

CAN 收发芯片 JTA1050

  • 经过TJA1050前是逻辑TTL电平
  • 经过TJA1050之后会转换成CAN的高低电平
    在这里插入图片描述
    连接
  • STM32 的 CAN 通过 P9 的设置,连接到 TJA1050 收发芯片
  • 然后通过接线端子(CAN)同外部的 CAN 总线连接。
  • 实际中通过跳线帽将 PA11 和 PA12 分别连接到 CAN_RX 和 CAN_TX 上面。
    在这里插入图片描述

需要注意

  • CAN 和 USB 共用了 PA11 和 PA12,所以他们不能同时使用。
  • 在战舰 STM32 开发板上面是带有120Ω的终端电阻的,如果我们的开发板不是作为 CAN 的终端的话,需要把这个电阻去掉,以免影响通信。

CAN 协议5 种帧

在这里插入图片描述

5种帧介绍

CAN 协议是通过以下 5 种类型的帧进行的:
在这里插入图片描述

数据帧和遥控帧有标准格式和扩展格式两种格式。

  • 标准格式有 11 个位的标识符(ID),扩展格式有 29 个位的 ID。

数据帧的构成

数据帧一般由 7 个段构成,即:
(1) 帧起始。表示数据帧开始的段。
(2) 仲裁段。表示该帧优先级的段。ID
(3) 控制段。表示数据的字节数及保留位的段。
(4) 数据段。数据的内容,一帧可发送 0~8 个字节的数据。
(5) CRC 段。检查帧的传输错误的段。
(6) ACK 段。表示确认正常接收的段。
(7) 帧结束。表示数据帧结束的段。

帧起始

在这里插入图片描述

  • D 表示显性电平2.5,R 表示隐形电平0(下同)。

帧起始(Start Of Frame),这个比较简单,标准帧和扩展帧都是由 1 个位的显性电平表示帧起始。

仲裁段

在这里插入图片描述

  • RTR((Remote Transmission Request Bit)远程传输请求) ,用于标识是否是远程帧(0,数据帧;1,远程帧)
  • IDE(Identifier Extension Bit),译作标识符扩展位) 位为标识符选择位(0,使用标准标识符;1,使用扩展标识符)
  • SRR(Substitute Remote Request Bit) 位为代替远程请求位,为隐性位,它代替了标准帧中的 RTR 位。

仲裁段,表示数据优先级的段,当同时有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输,标准帧和扩展帧格式在本段有所区别

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

根据识别码ID就可以识别到底是发给哪个设备。
在这里插入图片描述

控制段

在这里插入图片描述

  • r0 和 r1 为保留位,必须全部以显性电平发送,但是接收端可以接收显性、隐性及任意组合的电平。
  • DLC(Data Length Code),译为数据长度码) 为数据长度表示段,由 4 个数据位组成,高位在前,DLC 段有效值为 0~8,但是接收方接收到 9~15 的时候并不认为是错误。表示本报文中的数据段含有多少个字节.

控制段,由 6 个位构成,表示数据段的字节数。标准帧和扩展帧的控制段稍有不同

数据段

数据段,该段可包含 0~8 个字节的数据。从最高位(MSB)开始输出,标准帧和扩展帧在这个段的定义都是一样的。
在这里插入图片描述

CRC段

CRC 段,该段用于检查帧传输错误。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)组成,标准帧和扩展帧在这个段的格式也是相同的。

  • CRC 的值计算范围包括:帧起始、仲裁段、控制段、数据段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
  • CRC 校验码之后,有一个 CRC 界定符,它为隐性位,主要作用是把 CRC 校验码与后面的 ACK 段间隔起来。

ACK段

ACK 段,此段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位组成。标准帧和扩展帧在这个段的格式也是相同的。
在这里插入图片描述

  • 发送单元的 ACK,发送 2 个位的隐性位
    • 发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送 ACK)。所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。
  • 接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送 ACK/返回 ACK。

在 ACK 槽和帧结束之间由 ACK 界定符间隔开。

帧结束

帧结束(End Of Frame),这个段也比较简单,标准帧和扩展帧在这个段格式一样,由 7 个位的隐性位组成,7 个隐性位表示结束。1111111
在这里插入图片描述

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

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

相关文章

一文讲透使用Python绘制双纵轴线图

双纵轴线图主要用来展示两个因变量和一个自变量的关系,并且两个因变量的数值单位不同。具体来说,双纵轴线图是指在一幅图上有一个横轴和两个纵轴,适用于三个变量。两个纵轴分别表示一个变量,横轴变量同时适用于两个纵轴上的变量&a…

报错curl: (6) Could not resolve host: raw.githubusercontent...的解决办法

我起初想要在macOS系统安装pip包,首先在终端安装homebrew,敲了命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent...)" 之后触发的报错,报错内容:curl: (6) Could not resolve host: raw.…

【大数据】Flink CDC 的概览和使用

Flink CDC 的概览和使用 1.什么是 CDC2.什么是 Flink CDC3.Flink CDC 前生今世3.1 Flink CDC 1.x3.2 Flink CDC 2.x3.3 Flink CDC 3.x 4.Flink CDC 使用5.Debezium 标准 CDC Event 格式详解 1.什么是 CDC CDC(Change Data Capture,数据变更抓取&#xf…

专业级的渗透测试服务,助力航空业数字化安全启航

​某知名航空公司是中国首批民营航空公司之一,运营国内外航线200多条,也是国内民航最高客座率的航空公司之一。在数字化发展中,该航空公司以数据驱动决策,通过精细化管理、数字创新和模式优化等方式,实现了精准营销和个…

k8s之flink的几种创建方式

在此之前需要部署一下私人docker仓库,教程搭建 Docker 镜像仓库 注意:每台节点的daemon.json都需要配置"insecure-registries": ["http://主机IP:8080"] 并重启 一、session 模式 Session 模式是指在 Kubernetes 上启动一个共享的…

智慧旅游景区解决方案:PPT全文49页,附下载

关键词:智慧景区建设,智慧旅游平台,智慧旅游运营检测系统项目,智慧文旅,智慧景区开发与管理,智慧景区建设核心,智慧景区开发与管理 一、智慧景区建设现状 1、基础设施建设:智慧景区…

推荐收藏!万字长文带入快速使用 keras

这些年,有很多感悟:一个人精力是有限的,一个人视野也有有限的,你总会不经意间发现优秀人的就在身边。 看我文章的小伙伴应该经常听我说过的一句话:技术要学会交流、分享,不建议闭门造车。一个人可以走的很…

Keil5,ARM编译器 软件优化注意事项

优化C代码中的环路终止 循环是大多数程序中的常见结构。由于大量的执行时间通常花费在循环中,因此值得关注时间关键循环。 如果不谨慎地编写,环路终止条件可能会导致大量开销。在可能的情况下: 使用简单的终止条件。 写入倒计时到零循环。…

MySQL三种常见存储引擎【理论】【需动手操作】

先放一个大佬的博客 等以后有时间按大佬写的 动手操作一下 链接 MySOL 的存储引擎是指 MySOL 数据库管理系统中用于处理数据存诸和检索的组件。 MySOL 常用的存储引擎有以下几个: InnoDB: InnoDB 是 MySQL(5.5)的默认存储引擎,支持事务处理、行级锁定和物理外键约…

2024年超详细的Python3学习路径规划

前言 基于Python3.5 1.第一阶段基础(必须) Python3 环境搭建Python3 基础语法Python3 基本数据类型Python3 数据类型转换Python3 解释器Python3 注释Python3 运算符Python3 数字(Number)Python3 字符串Python3 列表Python3 元组Python3 字典Python3 集…

dnSpy调试工具二次开发1-新增菜单

测试环境: window 10 visual studio 2019 版本号:16.11.15 .net framework 4.8 开发者工具包 下载 .NET Framework 4.8 | 免费官方下载 .net 5开发者工具包 下载 .NET 5.0 (Linux、macOS 和 Windows) 利用git拉取代码(源码地址:Gi…

启动IDEA报错,web servcer failed to start.port 8080 was already in use.

启动IDEA报错,web servcer failed to start.port 8080 was already in use. 问题现状 启动IDEA失败,端口被占用。 解决办法: 使用netstat -ano指令,查看端口占用情况 因为我是win11的系统,使用指令时出现如下提示。…

【IC设计】移位寄存器

目录 理论讲解背景介绍什么是移位寄存器按工作模式分类verilog语法注意事项 设计实例循环移位寄存器算术双向移位寄存器5位线性反馈移位寄存器伪随机码发生器3位线性反馈移位寄存器32位线性反馈移位寄存器串行移位寄存器(打4拍)双向移位寄存器&#xff1…

c语言题目之统计二级制数中1的个数

文章目录 题目一、方法1二、方法2三,方法3总结 题目 统计二进制数中1的个数 输入一行,输出一行 输入: 输入一个整数 输出: 输出存储在内存中二进制的1的个数 一、方法1 之前的文章中,小编写了有关于内存在二进制中的存…

Fiddler工具 — 8.会话列表(Session List)

1、会话列表说明 Fiddler抓取到的每条HTTP请求(每一条称为一个session)。 主要包含了请求的ID编号、状态码、协议、主机名、URL、内容类型、body大小、进程信息、自定义备注等信息。如下图: 说明: 名称含义#抓取HTTP Request的顺…

Ribbon相关问题及答案(2024)

1、Ribbon是什么,它在微服务架构中扮演什么角色? Ribbon是一个客户端负载均衡器,它在微服务架构中扮演着关键性的角色。Ribbon的设计理念是在客户端进行服务发现和负载均衡,这种方式不同于传统的通过中心化的负载均衡器&#xff…

YHZ018 Python 运算符优先级

资源编号:YHZ018 配套视频:https://www.bilibili.com/video/BV1zy4y1Z7nk?p19 YHZ018:运算符优先级 🪿 运算符优先级 Python支持多种运算符,下表按照优先级从高到低的顺序列出了所有运算符。运算符的优先级决定了在表…

面试算法90:环形房屋偷盗

题目 一条环形街道上有若干房屋。输入一个数组表示该条街道上的房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取的财产的数量。例如,街道上5家的财产用数组[2,3,4,5…

js实现全选按钮,反选

点击全选按钮&#xff0c;下面的按钮全部选中&#xff1b;再次点击&#xff0c;全部取消选择。 点击下面的按钮时&#xff0c;检查下面的按钮是不是全部都选中&#xff0c;如果全部选中了&#xff0c;需要修改全选按钮的选中状态为ture。 全选反选 <!DOCTYPE html> <…

Linux系统IO—探索输入输出操作的奥秘

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …