CAN资料整理(三):CAN的位时间、同步、位定时
同步 时间 整理 定时 资料 can
2023-09-11 14:21:43 时间
目录
由于CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间会使用约定好的波特率进行通讯。并且CAN还会使用“位同步”的方式来对抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。
一、位时间
一个电平位时间主要有以下4个段:
- SS段(SYNC SEG;同步段):若通讯节点检测到总线上信号的跳变沿被包含在SS段的范围内,则表示节点与总线的时序是同步的;(固定1个Tq)
- PTS段(PROP SEG;传播段):这个时间段是用于补偿网络的物理延时时间,是总线上输入比较器延时和输出驱动器延时综合的两倍;(长度可编程:1~8个Tq)
- PBS1段(PHASE SEG1;相位缓冲段1):用于补偿节点间的晶振误差,允许通过重同步对该段加长,在这个时间段末端进行总线状态的采样;(长度可编程:1~8Tq)
- PBS2段(PHASE SEG2;相位缓冲段2):用于补偿节点间的晶振误差,允许通过重同步方式对该段缩短;(长度可编程:1~8Tq)
通讯波特率的计算:
- 波特率= 1 / 位时间
二、同步
波特率只是约定了每个数据位的长度,数据同步还涉及相位的细节,这个时候就需要用到数据位内的SS、PTS、PBS1、PBS2等段了。
同步规则:
- 一个位时间内只允许一种同步方式
- 任何一个“隐性”到“显性”的跳变都可以用于同步
- 硬同步发生在SOF,让所有接收节点调整各自当前位的同步段,使其位于发送的SOF位内。且只是当存在“帧起始信号”时起作用,无法确保后续一连串的位时序都是同步的。
- 重新同步发生在一个帧的其他位场内,当跳变沿跳变沿落在了同步段之外。
- 在SOF到仲裁场有多个节点同时发送的情况下,发送节点对跳变沿不进行重新同步
1、硬同步
发生在SOF位让所有接收节点调整各自当前位的同步段,调整宽度不限。且只是当存在帧起始信号采起作用,如果在一帧很长的数据内,节点信号与总线信号相位有偏移时,这种同步方式就无能为力了。
当某节点检测到总线的帧起始信号不在节点内部时序的SS段范围,会判断它自己的内部时序与总线不同步,因而这个状态的采样点采集到的数据是不正确的,所以节点通过硬同步的方式重新调整,把自己的位时序中的SS段平移至总线出现下降沿的部分,从而获得同步,同步后采样点既可以采集到正确的数据了。
2、重新同步
当跳变沿与同步段的误差小于SJW(reSynchronization Jump Width;重新同步补偿宽度),重新同步会通过延长PTS1段或者缩短PTS2段,来保证采样点位置的正确;如限定SJW=4 Tq时,单词同步调整的时候不能增加或者减少超过4Tq的时间长度,若有需要,控制器会通过多次小幅度调整来实现同步。
三、位定时
1、传播段延迟时间的确定
2、位定时参数确定
相关文章
- Linux离线同步时间
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
- Logstash使用jdbc_input同步Mysql数据时遇到的空时间SQLException问题
- 【WSN同步捕获】无线传感器网络的同步捕获和跟踪误差的MATLAB仿真
- C03-Java同步实践加强班第12周上机任务
- 如何基于日志,同步实现数据的一致性和实时抽取?
- CentOS 7.x中正确设置时间与时钟服务器同步
- Linux手动更新时间Linux同步集群其他节点时间
- Linux进程间通信与线程间同步详解(全面详细)
- centos 8.x系统配置chrony时间同步服务
- Linux集群配置ntp时间同步服务
- 时间同步
- Linux集群时间同步方法
- TA(App总启动时间) = T1(main()之前的加载时间 进程构建时间) + T2(main()之后的加载时间 运行环境准备时间) +T3(首页数据加载+闪屏页数据同步) 应用时间
- 2.Emwin的数字键盘输入到Edit窗口更新以及到另一个页面Text控件的值并且同步改变。
- Java 理论与实践: 正确使用 volatile 变量 线程同步
- axios 通过async和await实现同步
- 【转】线程及同步的性能 - 线程池 / ThreadPoolExecutors / ForkJoinPool
- 曹工杂谈:花了两天时间,写了一个netty实现的http客户端,支持同步转异步和连接池(1)--核心逻辑讲解
- Java线程同步
- kettle根据时间戳增量的将数据从MySQL同步SQLServer(linux部署脚本启动作业、config.properties 配置数据库)
- 多台linux服务器时间同步
- VHDL——含异步清零和同步使能的加法计数器源程序