CAN通讯协议学习

news2024/11/27 15:40:15

介绍

它是一种异步通讯,can_high和can_low两条线利用的是电位差传输信号,抗干扰能力强,但是必须要有can控制器如TJA1050(我的开发板)
当 CAN 节点需要发送数据时,控制器把要发送的二进制编码通过 CAN_Tx 线发送到收发器,然后由收发器把这个普通的逻辑电平信号转化成差分信号,通过差分线 CAN_High 和 CAN_Low 线输出到 CAN 总线网络。而通过收发器接收总线上的数据到控制器时,则是相反的过程,收发器把总线上收到的 CAN_High 及 CAN_Low 信号转化成普通的逻辑电平信号,通过 CAN_Rx 输出到控制器中。
在这里插入图片描述

位时序

他是异步通信,想uart,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,特别地,CAN 还会使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

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

  • SS段(SYNC SEG):同步段,固定1Tq
  • PTS 段 (PROP SEG):传播时间段,用于补偿网络的物理延时时间。是总线上输入比较器延时和输出驱动器延时总和的两倍。PTS 段的大小可以为 1~8Tq
  • PBS1 段 (PHASE SEG1):相位缓冲段,用来补偿边沿阶段的误差,它的时间长度在重新同步的时候可以加长。PBS1 段的初始大小可以为 1~8Tq。
  • PBS2 段 (PHASE SEG2):是另一个相位缓冲段,也是用来补偿边沿阶段误差的,它的时间长度在重新同步时可以缩短。PBS2 段的初始大小可以为 2~8Tq。

波特率

总线上的各个通讯节点只要约定好 1 个 Tq 的时间长度以及每一个数据位占据多少个 Tq,就可以确定 CAN 通讯的波特率。
假设上图中的 1Tq=1us,而每个数据位由 19 个 Tq 组成,则传输一位数据需要时间 T1bit=19us,从而每秒可以传输的数据位个数为:

![[Pasted image 20240214012629.png]]

这个每秒可传输的数据位的个数即为通讯中的波特率。

同步过程分析

硬同步

可以看到当总线出现帧起始信号时,某节点检测到总线的帧起始信号不在节点内部时序的 SS 段范围,所以判断它自己的内部时序与总线不同步,因而这个状态的采样点采集得的数据是不正确的。所以节点以硬同步的方式调整,把自己的位时序中的 SS 段平移至总线出现下降沿的部分,获得同步,同步后采样点就可以采集得正确数据了。

在这里插入图片描述

重新同步

重新同步的方式分为超前和滞后两种情况,以总线跳变沿与 SS 段的相对位置进行区分。第一种相位超前的情况如图相位超前时的重新同步 ,节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前 2Tq,这时控制器在下一个位时序中的 PBS1 段增加 2Tq 的时间长度,使得节点与总线时序重新同步。
![[Pasted image 20240214013520.png]]

第二种相位滞后的情况如图相位滞后时的重新同步 ,节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后 2Tq,这时控制器在前一个位时序中的 PBS2 段减少 2Tq 的时间长度,获得同步。
![[Pasted image 20240214013542.png]]

在重新同步的时候,PBS1 和 PBS2 中增加或减少的这段时间长度被定义为“重新同步补偿宽度SJW (reSynchronization Jump Width)”

重新同步补偿宽度(SJW)

一般来说 CAN 控制器会限定 SJW 的最大值,如限定了最大 SJW=3Tq 时,单次同步调整的时候不能增加或减少超过 3Tq 的时间长度,若有需要,控制器会通过多次小幅度调整来实现同步。当控制器设置的 SJW 极限值较大时,可以吸收的误差加大,但通讯的速度会下降。

简单说:就是SJW会帮他重新对齐时序,SWJ值就是对齐一次的幅度值

报文

在原始数据段的前面加上传输起始标签、片选 (识别) 标签和控制标签,在数据的尾段加上 CRC校验标签、应答标签和传输结束标签,把这些内容按特定的格式打包好,就可以用一个通道表达各种信号了,只要这些设备按格式去解读,就能还原出原始数据,这样的报文就被称为 CAN 的“数据帧”。

为了更有效地控制通讯,CAN 一共规定了 5 种类型的帧

帧用途
数据帧用于节点向外传送数据
遥控帧用于向远端节点请求数据
错误帧用于向远端节点通知校验错误
过载帧用于通知远端节点:本节点尚未做好接收准备
帧间隔用于将数据帧及遥控帧与前面的帧分离开来

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

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

相关文章

数学建模:BP神经网络(含python实现)

原理 BP 神经网络,也称为多层感知机(Multilayer Perceptron,MLP),是一种常见的神经网络模型,用于解决各种机器学习问题,包括分类和回归。BP 代表“反向传播”(Backpropagation&#…

磁盘database数据恢复: ddrescue,dd和Android 设备的数据拷贝

ddrescue和dd 区别: GNU ddrescue 不是 dd 的衍生物,也与 dd 没有任何关系 除了两者都可用于将数据从一台设备复制到另一台设备。 关键的区别在于 ddrescue 使用复杂的算法来复制 来自故障驱动器的数据,尽可能少地造成额外的损坏。ddrescue…

可视化锻炼日记ExerciseDiary

什么是 ExerciseDiary ? ExerciseDiary 是带有 GitHub 风格的年度可视化的锻炼日记。 安装 在群晖上以 Docker 方式安装。 在注册表中搜索 exercisediary ,选择第一个 aceberg/exercisediary,版本选择 latest。 本文写作时, lat…

【面试】盘点10个高频的前端算法题,你全都会了吗?

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 现在前端的面试中,算法出现的频率越来越高了,大厂更是必考算…

北邮复试刷题103. 二叉树的锯齿形层序遍历

103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1:输入&#xff1a…

Acwing---846. 树的重心

树的重心 1.题目2.基本思想3.代码实现 1.题目 给定一颗树,树中包含 n n n 个结点(编号 1 ∼ n 1∼n 1∼n)和 n − 1 n−1 n−1 条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 …

Kafka King 推荐一款漂亮、现代、实用的kafka客户端

Kafka King 一个漂亮、现代、实用的kafka客户端,使用python flet、flutter构建。 Github主页:https://github.com/Bronya0/Kafka-King 下载:https://github.com/Bronya0/Kafka-King/releases 功能清单 查看集群节点列表创建主题&#xf…

【动态规划】【C++算法】1563 石子游戏 V

作者推荐 【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字 本文涉及知识点 动态规划汇总 LeetCoce:1563 石子游戏 V 几块石子 排成一行 ,每块石子都有一个关联值,关联值为整数,由数组 stoneValue 给出。 游戏中…

前端常见的设计模式

说到设计模式,大家想到的就是六大原则,23种模式。这么多模式,并非都要记住,但作为前端开发,对于前端出现率高的设计模式还是有必要了解并掌握的,浅浅掌握9种模式后,整理了这份文章。 六大原则&…

Leetcode-103. 二叉树的锯齿形层序遍历

这个年和树过不去啦啦啦! 题目: 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1&…

【C++】:位图、布隆过滤器、哈希分割

朋友们、伙计们,我们又见面了,本期来给大家解读一下位图、布隆过滤器、哈希分割,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精…

Kingfisher — 快速灵活的公共数据库下载工具

Kingfisher — 快速灵活的公共数据库下载工具 Kingfisher 是一个快速灵活的程序,用于从公共数据库下载序列文件 (及其元数据注释),包括 European Nucleotide Archive (ENA), NCBI SRA,亚马逊 AWS 和谷歌云。它的输入是一个或多个 …

Fluke ADPT 连接器新增对福禄克万用 Fluke 17B Max 的支持

所需设备: 1、Fluke ADPT连接器; 2、Fluke 17B Max; Fluke 17B Max拆机图: 显示界面如下图: 并且可以将波形导出到EXCEL: 福禄克万用表需要自己动手改造!!!

2024年【危险化学品经营单位安全管理人员】考试报名及危险化学品经营单位安全管理人员考试资料

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试报名是安全生产模拟考试一点通总题库中生成的一套危险化学品经营单位安全管理人员考试资料,安全生产模拟考试一点通上危险化学品经营单位安全管理人员作业手机同步练习…

C#(C Sharp)学习笔记_循环语句【七】

什么是循环语? 循环语句是由循环体及循环的终止条件两部分组成的。 在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环…

摸索设计模式的魅力:从策略模式看软件设计的智慧-灵活应对变化的艺术

设计模式专栏:http://t.csdnimg.cn/U54zu 目录 一、案例场景1.1 一坨坨代码实现1.2 存在的问题 二、使用策略模式解决问题2.1 使用策略模式重构代码2.2 克服了问题 三、模式讲解3.1 结构图及说明3.2 实现步骤和注意事项3.3 适用场景 四、优势和局限性4.1 优势4.2 局…

IP地址+子网掩码+CIDR学习笔记

目录 一、IP地址 1、表示方法: 2、特殊IP地址 二、子网掩码 1、判断网络位和主机位 2、子网划分 三、无分类编址CIDR 1、CIDR路由汇聚 汇聚规则: 汇聚ID: 2、最佳路由匹配原则 一、IP地址 1、表示方法: 机器中存放的…

【报告解析】OpenAI Sora视频模型官方报告全解析 | 效果,能力以及基本原理

省流版 1 核心数据处理将视频数据整合成一个一个的Patch,方便统一训练数据,利用扩散Transformer架构 2 功能效果除了可以实现基础的文生视频外,实际上还有非常惊艳的视频延展,视频编辑,视频连接等多种功能&#xff0…

防御保护--防病毒网关

网络安全之防病毒网关--恶意软件 按照传播方式分类 病毒 病毒 --- 一种基于硬件和操作系统的程序,具有感染和破坏能力,这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖息地,它是病毒传播的目的地,又是一个感染的出…

Python算法题集_二叉树的层序遍历

Python算法题集_二叉树的层序遍历 题102:二叉树的层序遍历1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【DFS递归】2) 改进版一【BFS迭代】3) 改进版二【BFS迭代循环】 4. 最优算法 本文为Python算法题集之一的代码示例 题102&am…