CAN通讯协议学习

介绍

它是一种异步通讯,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 种类型的帧

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

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

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

相关文章

牛客JZ 36二叉搜索树与双向链表

描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围:输入二叉树的节点数 0≤n≤10000≤n≤1000,二叉树中每个节点的值 0≤val≤10000≤val≤1000 要求:空间复杂度O(1)(即在原树上…

计算机毕业设计分享-SSM实验室耗材管理系统 13205(赠送源码数据库)JAVA、PHP,node.js,C++、python,大屏数据可视化等

SSM实验室耗材管理系统 摘 要 本课题研究的实验室耗材管理系统,主要功能模块包括用户管理、耗材管理、入库记录、出库记录、报废登记、供应商管理、耗材类别、实验室管理等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实…

CSS设置盒子阴影

语法 box-shadow: *h-shadow v-shadow blur spread color* inset; 注释: box-shadow向框添加一个或多个阴影. 该属性是由逗号分隔的阴影列表,每个阴影由2-4个长度值、可选的颜色值及可选的inset关键词来规定。省略长度的值是0。 外阴影 a、给元素右边框和下边框加外阴影——把…

Git基础使用

Git 要想了解Git,首先需要我们了解一下VCS——版本控制系统(version control system) VCS 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件&a…

【机器学习案例3】从科学论文图片中提取标题、作者和摘要【含源码】

在这个项目中,我的目标是从科学论文图片中提取某些部分(标题、作者和摘要)。预期提取部分是科学论文中常见的部分,例如标题、摘要和作者。输入与最终结果。我的输入是将第一页纸转换成图像。最终结果是一个 txt 文件,其中包含标题、作者和摘要部分,如下图1和图2所示。我将…

《区块链公链数据分析简易速速上手小册》第9章:区块链数据工具和资源(2024 最新版)

文章目录 9.1 数据获取工具9.1.1 基础知识9.1.2 重点案例:使用web3.py获取以太坊交易数据准备工作实现步骤步骤1: 连接到以太坊网络步骤2: 获取特定地址的交易数据 扩展应用结语 9.1.3 拓展案例 1:使用 Etherscan API 获取交易数据准备工作实现步骤步骤1…

【AI视野·今日CV 计算机视觉论文速览 第295期】Tue, 23 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Tue, 23 Jan 2024 Totally 134 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Exploring Simple Open-Vocabulary Semantic Segmentation Authors Zihang Lai开放词汇语义分割模型旨在从一组任意开放词…

专业140+总分420+东北大学841通信专业基础考研经验东大电子信息与通信工程,真题,大纲,参考书。

今年考研顺利上岸,被东北大学通信工程录取,其中专业课841通信专业基础140,数二140,总分420,整体每门课都还是比较均衡,刚开始考研前也和大家一样,焦虑,紧张,面对考研怕失…

本地存储云存储使用量对比

目录 块存储 文件存储 对象存储 使用传统式存储,需要购买新的存储系统、存储容量,还需要为未来的发展预留一部分容量,同时未来如果业务量规模扩大,还可能需要在数据中心托管并维护总容量,这都将大大增加成本。 使用…

【Linux笔记】进程间通信之管道

一、匿名管道 我们在之前学习进程的时候就知道了一个概念,就是进程间是互相独立的,所以就算是两个进程是父子关系,其中一个进程退出了也不会影响另一个进程。 也因为进程间是互相独立的,所以两个进程间就不能直接的传递信息或者…

算法沉淀——栈(leetcode真题剖析)

算法沉淀——栈 01.删除字符串中的所有相邻重复项02.比较含退格的字符串03.基本计算器 II04.字符串解码05.验证栈序列 栈(Stack)是一种基于先进后出(Last In, First Out,LIFO)原则的数据结构。栈具有两个主要的操作&am…

PgSQL内核特性 - push-based pipeline 执行引擎

PgSQL内核特性 - push-based pipeline 执行引擎 数据库的SQL执行引擎负责处理和执行SQL请求。通常情况下,查询优化器会输出物理执行计划,一般由一系列的算子组成。当前,有两种算子流水线构建方式:1)需求驱动的流水线&a…

安卓价值2-Macrodroid在其它app下执行两步就停

Macrodroid 是一款适用于 Android 平台的自动化应用程序。它允许用户创建个性化的自动化工作流程,以简化日常任务并增强手机的功能。 但使用下来会发现一些奇怪的问题,比如在其它app处于前台状态下它执行了两步任务就停止了,但切换回macrodroid就又继续执行了,这就像是程序…

【网络攻防实验】【北京航空航天大学】【实验四、防火墙配置(Firewall Configuration)实验】

实验四、防火墙配置(Firewall Configuration)实验 一、 实验环境搭建 1. Kali Linux网络配置 将Kali Linux虚拟机网卡1设置为NAT网络模式,ip地址为10.0.2.5,如下图所示: 配置NAT网络端口转发: 将Kali Linux网卡2设置为内部网络模式: 配置Kali Linux网卡1: 类似地,配…

软件实例分享,门诊处方软件存储模板处方笺教程,个体诊所电子处方开单系统软件教程

软件实例分享,门诊处方软件存储模板处方笺教程,个体诊所电子处方开单系统软件教程、 一、前言 以下软件教程以 佳易王诊所电子处方管理软件V17.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 电子处方软件支持病历汇总…

红队笔记Day3-->隧道上线不出网机器

昨天讲了通过代理的形式(端口转发)实现了上线不出网的机器,那么今天就来讲一下如何通过隧道上线不出网机器 目录 1.网络拓扑 2.开始做隧道?No!!! 3.icmp隧道 4.HTTP隧道 5.SSH隧道 1.什么…

库函数strlen的实现

目录 一、原理二、思路三、实现 一、原理 库函数strlen的功能是求字符串长度,统计的是字符串中 \0 之前的字符的个数。 函数原型如下: size_t strlen ( const char * str );二、思路 参数str接收⼀个字符串的起始地址,然后开始统计字符串中…

tee漏洞学习-翻译-3:TrustZone exploit for MSM8974

原文:http://bits-please.blogspot.com/2015/08/full-trustzone-exploit-for-msm8974.html 在这篇博文中,我们将介绍利用上一篇文章中描述的 TrustZone 漏洞的完整过程。 在开发此漏洞时,我只使用了我值得信赖的(个人&#xff0…

你的电脑关机吗

目录 程序员为什么不喜欢关电脑? 电脑长时间不关机会怎样? 电脑卡顿 中度风险 硬件损耗 能源浪费 散热问题 软件问题 网络安全问题 程序员为什么不喜欢关电脑? 大部分人都会选择将电脑进行关机操作。其实这不难理解,毕竟人类都需要…

Uipath 调用Python 脚本程序详解

Python 活动概述 UiPath.Python.Activities 是一个新的活动包,创建它是为了支持直接从工作流运行 Python 脚本和方法。 其包含以下活动: Python 作用域(Python Scope) - 为 Python 活动提供作用域的容器。 加载 Python 脚本(Load Python Script) - 将 P…