CAN总线协议:位同步

目录

1.接收方数据采样

2.接收方数据采样遇到的问题

3.位时序

4.硬同步

5.再同步

6.波特率计算


1.接收方数据采样

CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长

发送方以约定的位时长每隔固定时间输出一个数据位

接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位

理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近


2.接收方数据采样遇到的问题

接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近

硬同步解决
接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离

再同步解决


3.位时序

为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成


SS = 1Tq

PTS = 1~8Tq

PBS1 = 1~8Tq

PBS2 = 2~8Tq
如果,数据跳变边沿正好出现在SS段,那就说明当前设备与波形达成同步,如果数据跳变边沿不在SS段,那就要调整当前设备的位时序,使跳变边沿正好出现在同步段,使用硬同步和再同步调整
传播时间段,PTS用于吸收网络上的物理延迟,网络的物理延迟指发送单元的输出延迟,总线上信号的传播延迟、接收单元的输入延迟,PTS的时间为以上各延迟时间的和的两倍,简单来说,控制器想要发送信号,由于硬件设备的限制,这个信号输入到总线总会有一点点延迟,同理数据输入,和数据在总线上传输,都会有一点点延迟,所以需要等等,设置了一个传播时间段PTS
采样点会在PBS1和PBS2中间,通过调节PBS1和PBS2段的时长就能灵活调节采样点的位置


4.硬同步

每个设备都有一个位时序计时周期,当某个设备(发送方)率先发送报文,其他所有设备(接收方)收到SOF(第一个数据跳变边沿) 的**下降沿(逻辑电平的下降沿,差分电平的张开沿)**时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步
假设现在所有设备的秒表都是同步转动,有一个设备想作为发送方,开始一段波形,那么发送方,会在自己的秒表转到SS段时,开始一个新数据位,即发送方的每次数据跳变,都会等自己的秒表转到SS段时产生,这样接收方,内部也有一个秒表,并且它的秒表和发送方同步转动,所以接收方的秒表,每次转到SS段,接收方就知道一个新的数据位开始了,之后接收方直接在PBS1和PBS2之间数据采样

因此,只要所有设备内部都要一个秒表,并且秒表保持同步转动,发送方在自己秒表的SS段,跳变数据,开始新的一位,接收方在自己秒表转到PBS1和PBS2之间时,采样数据,这样就能保证,接收方每次都采样到数据位的中间附近

同步转动,通过"其他所有设备(接收方)收到SOF(第一个数据跳变边沿) 的**下降沿(逻辑电平的下降沿,差分电平的张开沿)**时,接收方会将自己的位时序计时周期拨到SS段的位置,与发送方的位时序计时周期保持同步"这句话实现
硬同步只在帧的第一个下降沿(SOF下降沿)有效

经过硬同步后,若发送方和接收方的时钟没有误差,则后续所有数据位的采样点必然都会对齐数据位中心附近

图一是接收方内部的位时序周期,红线画的是总线上的波形,当红线又逻辑高电平跳变到逻辑低电平时,这个下降沿,是发送方产生SOF的第一个下降沿,下降沿时刻,肯定是发送方的SS段,接收方一看,这个下降沿,并不在自己的SS段里,所以接收方就直接,把自己的SS段,与波形的下降沿对齐,变为图一的下方图;图二是秒表


5.再同步

若发送方或接收方的时钟有误差,随着误差积累,数据位边沿逐渐偏离SS段,则此时接收方根据**再同步补偿宽度值(SJW)(SJW是补偿的最大值)**通过加长PBS1段,或缩短PBS2段,以调整同步
再同步可以发生在第一个下降沿之后的每个数据位跳变边沿

误差值小于或等于SJW指定值,则误差几个Tq,就补偿几个Tq,比如:误差2Tq,SJW指定3Tq,那么实际补偿,就是误差2Tq,误差4Tq,SJW指定3Tq,那么实际补偿,就是误差3Tq

SJW=1~4Tq


6.波特率计算

波特率 = 1 / 一个数据位的时长 = 1 / (TSS + TPTS + TPBS1 + TPBS2)

例如:

SS = 1Tq,PTS = 3Tq,PBS1 = 3Tq,PBS2 = 3Tq

Tq = 0.5us

波特率 = 1 / (0.5us + 1.5us + 1.5us + 1.5us) = 200kbps

相关推荐
FreakStudio9 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘14 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
zd84510150014 天前
RS485 总线详解
单片机·嵌入式硬件
初晴融雪-快雪时晴14 天前
产业分析:AI产业 上下游 全景分析 202606版本
人工智能·基础知识
牛根生同志14 天前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
goldenrolan15 天前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
✎ ﹏梦醒͜ღ҉繁华落℘15 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展15 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司15 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑15 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习