【CAN通讯系列8】如何准确接收数据?
在 【CAN通讯系列7】波特率是什么?已经介绍了CAN位时间和采样点等概念,每1位由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)四个段组成,这个也成为位时序,采样点位置处于PBS1和PBS2的交界处,如下所示:

这样定义的目的是为了保证当发送节点发送一帧数据到总线时,接收节点能准确接收到这帧数据,收发双方数据同步,下面具体了解其机制。
1 数据传输同步
CAN协议的通信方法为NRZ(不归零)编码方式,即1和0都分别由不同的电子显著状态来表现,除此之外,没有中性状态、也没有其他种状态,而且各个位的开头或者结尾都没有附加同步信号。发送节点以与位时序同步的方式开始发送数据,相应地,接收节点根据总线上电平的变化进行同步和接收。发送节点和接收节点存在时钟频率误差,传输路径上电缆和驱动器等的相位延迟,这些情况会引起同步偏差,因此接收节点需要采取一些方法来调整时序,针对帧结构,在空闲状态检测出第一个下降沿(帧起始SOF下降沿)时,进行硬同步,则在其余各段进行再同步。

1.1 硬同步
在总线空闲状态,接收节点检测出帧起始(SOF位)时,会调整当前位的同步(SS)段,调整宽度不限,这就是硬同步,即接收节点直接将此下降沿的位置认为是SS段,强行将自己的SS段与发送节点的SS段直接拉齐,然后按照位时序对信号进行采样,达到同步的效果。

发送节点在发送SOF位时,SOF位的下降沿在SS段,此时接收节点发现自己当前位的SS段和发送节点SOF位的SS段不同步,于是接收节点强行将自己的SS段拉到与SOF位的SS段同步。
1.2 再同步
再同步是指接收节点检测出除SOF位以外的其他位时,通过加长PSB1段或缩短PBS2段进行的同步调整,以保证采样点的准确。
比较发送节点和接收节点的时序,存在两种情况需要进行再同步,一种发送节点慢于接收节点产生SS段,另一种是发送节点快于接收节点产生SS段。
情况1:发送节点慢于接收节点
发送节点比接收节点的时间慢了,也就是说发送节点当前位的ss段产生的时候,接收节点当前位的ss段已经在2个Tq之前产生了;此时,接收节点就将PBS1延长2个Tq的时间。以使得两者的采样点同步,如下所示。

source:一篇易懂的CAN通讯协议指南1
情况2:发送节点快于接收节点
发送节点当前位的SS段诞生2Tq时长之后,接收节点当前位才产生SS段;于是接收节点当前位的PBS2段缩短,使得接收节点的下一位能够提前2个Tq,从而接收节点的下一位采样点和发送节点下一位的采样点能够同步。

source:一篇易懂的CAN通讯协议指南1
对于这两种情况,存在延长或缩短若干个Tq,这里对于Tq数量是有限制的,使用同步跳转宽度SJW来做限制。SJW是指PSB1或PSB2段进行再同步时允许跳转的最大宽度,其必须满足以下2个条件:1)SJW必须小于PBS1和PBS2的最小值;2)SJW最大值不能超过4个Tq。
通过上述内容的介绍,应该会对同步段、传播时间段、相位缓冲段1和相位缓冲段2有更深入的理解,可以再回顾下这四个段的定义:
1)同步段:CAN网络中的所有节点,在接收一位数据时,以此段作为位起始的参考点,进行下降沿的检测,统计下降沿基于SS段的偏移,然后进行位时序的调整,使接收趋于同步(下降沿在理想情况下应出现在SS段)。
2)传播时间段:CAN总线上数据的传输会受到物理延迟,比如发送节点的发送延迟、总线上信号的传播延迟、接收节点的输入延迟等,PTS段就是用来补偿这些因素产生的时间延迟。
3)相位缓冲段1:若下降沿延后n个Tq,且延迟不大于同步跳转宽度,使得原本位时序中采样点位置提前n个Tq,则需要对PBS1段增加n个Tq数(使采样点位置延后n个Tq),吸收这段误差。
4)相位缓冲段2:若跳变边沿提前n个Tq, 且不大于同步跳转宽度,使得原本位时序中采样点位置延后n个Tq,则需要对上一个位时序的PBS2段减少n个Tq数(使采样点位置提前n个Tq),吸收这段误差。
因此有了这样的机制后,接收节点才能采样准确,获取发送节点的真实数据。
2 小结
理解了同步段、传播时间段、相位缓冲段1和相位缓冲段2之后,那我们就可以结合一个实际的例子来看:在实际开发过程中,如何对芯片配置这四段的Tq数,以实现波特率,请关注下篇文章。
相关文章:
【CAN通讯系列8】如何准确接收数据?
在 【CAN通讯系列7】波特率是什么?已经介绍了CAN位时间和采样点等概念,每1位由同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)四个段组成,这个也成为位时序,采样点位置处于PBS1和PBS2的交界处,如…...
RabbitMQ知识总结(基本概念)
文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 基本概念 Producer: 消息的生产者,是一个向…...
Prel语言入门学习:一篇全面的指南
引言 在编程语言的海洋中,Prel是一个较少人知的新星。作为一种专为数据处理和分析设计的语言,Prel结合了现代编程语言的简洁性与功能性,提供了一种独特的解决方案,尤其适用于数据科学家和分析师。本文将详细介绍Prel语言的基础&am…...
在云服务器上自动化部署项目,jenkins和gitee
▮全文概述 在编写项目时,很头大的事情就是需要自己手动的上传jar包到服务器上启动。如果出现一点bug,就要重头上传和启动。这是一件很烦的事情,所以,可以使用jenkins和gitee实现项目的自动部署 ▮全流程 在本地提交代码到gitee …...
python 参数输入
在 Python 中,参数输入通常有多种方式,这取决于你要从何处获取参数。以下是几种常见的方法: 1. 命令行参数 使用 sys.argv 获取命令行参数,或者使用 argparse 模块进行更复杂的参数解析。 示例 1: 使用 sys.argv import sys# …...
Spring面试篇章——Spring基本概述
Spring 的基本概述 Spring学习的核心内容—一图胜千言 IOC:控制反转,可以管理 Java 对象AOP:切面编程JDBCTemplate:是Spring提供一套访问数据库的技术,应用性强,相对好理解声明式事务:基于IOC …...
股票预测模型中注意力多层Attention RNN LSTM 的应用
全文链接:https://tecdat.cn/?p37152 原文出处:拓端数据部落公众号 Attention 机制是一种在神经网络处理序列数据时极为关键的技术,它赋予了模型“聚焦”能力,能够自动评估输入序列中各部分的重要性。通过为序列中的每个元素分…...
C语言 | Leetcode C语言题解之第313题超级丑数
题目: 题解: int nthSuperUglyNumber(int n, int* primes, int primesSize) {long dp[n 1];int pointers[primesSize];for (int i 0; i < primesSize; i) {pointers[i] 0;}long nums[primesSize];for (int i 0; i < primesSize; i) {nums[i] …...
PHP健身微信小程序系统源码
🏋️♀️健身新潮流!解锁“健身微信小程序”的全方位塑形秘籍 📱开篇:掌中健身房,随时随地动起来 你还在为找不到合适的健身场地或教练而烦恼吗?是时候告别这些束缚,拥抱“健身微信小程序”…...
树组件 el-tree 数据回显
树组件 el-tree 数据回显 树型结构的数据回显问题: 这里我只放了核心代码,主要是如何获取选中的树节点的id集合和如何根据树节点的id集合回显数据 大家根据需要自行更改! <el-tree ref"authorityRef" node-key"id" …...
54、PHP 实现希尔排序
题目: PHP 实现希尔排序 描述: 思路分析:希尔排序是基于插入排序的,区别在于插入排序是相邻的一个个比较(类似于希尔中h1的情形),而希尔排序是距离h的比较和替换。 希尔排序中一个常数因子n&a…...
linux 虚拟机解压arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2并arm-linux-gcc
解压到当前目录:tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2解压到指定目录:tar -jxvf arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2 -C /xx/xxx/xxx-C大写,后面接要解压的路径解压后得到一个 opt文件夹 在/usr/local/bin 下创建新的…...
泛化的最近点迭代法(Generalized-ICP)
Generalized-ICP算法是由斯坦福大学的Aleksandr V. Segal、Dirk Haehnel和Sebastian Thrun提出的,于2009年在Robotics science and system会议上发表。 GICP是一种ICP算法的变体,其原理与ICP算法相同,之所以称为泛化的ICP算法是因为大多数ICP…...
Java | Leetcode Java题解之第313题超级丑数
题目: 题解: class Solution {public int nthSuperUglyNumber(int n, int[] primes) {int[] dp new int[n 1];int m primes.length;int[] pointers new int[m];int[] nums new int[m];Arrays.fill(nums, 1);for (int i 1; i < n; i) {int minN…...
单细胞数据整合-去除批次效应harmony和CCA (学习)
目录 单细胞批次效应学习 定义 理解 常用的去批次方法-基于Seurat 1) Seurat-integration(CCA) 2) Seurat-harmony 去批次代码 ①Seurat-integration(CCA) ②Seurat-harmony 单细胞批次效应学习 …...
MuRF代码阅读
对图像Size的处理, 以适应Transformer 在MVSPlat 当中使用 Center_Crop 裁剪图像,适用于 Transformer 的32 倍数, 其中 焦距 f 不变化,只改变 cx,cy.MuRF 直接对图像进行 插值,合成理想的 size. 根据 ori_size 和 inference_size…...
pycharm无法导入pyside2模块;“ModuleNotFoundError: No module named ‘PySide2“
参考博客: 1)pycharm中配置pyqt designer和pyside2【功能是在pycharm中可以打开designer,并且可以把.ui文件转换为.py文件】 https://blog.csdn.net/kuntliu/article/details/117219237 2).ui转化为.py后,点击运行,报错…...
c语言指针中“数组名的理解”以及“一维数组传参”的本质
数组名的理解 数组名就是数组首元素的地址。 例如:输入一个数组的所有元素,再打印出来。 另一种写法 以上可以看出:*arri) arr[i] 也即是:*(iarr)i[arr] 本质上无区别 1:数组就是数组,是一块…...
计算机毕业设计Python+Flask微博舆情分析 微博情感分析 微博爬虫 微博大数据 舆情监控系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
基于Python/flask的微博舆情数据分析可视化系统 python爬虫数据分析可视化项目 编程语言:python 涉及技术:flask mysql echarts SnowNlP情感分析 文本分析 系统设计的功能: ①用户注册登录 ②微博数据描述性统计、热词统计、舆情统计 ③微博数…...
KubeBlocks v0.9 解读|最高可管理 10K 实例的 InstanceSet 是什么?
实例(Instance)是 KubeBlocks 中的基本单元,它由一个 Pod 和若干其它辅助对象组成。为了容易理解,你可以先把它简化为一个 Pod,下文中将统一使用实例这个名字。 InstanceSet 是一个通用 Workload API,负责…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
