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

相关推荐
hazy1k44 分钟前
ESP32基础-PWM_直流电机
stm32·单片机·嵌入式硬件·51单片机·proteus·esp32
XINVRY-FPGA7 小时前
XC95288XL-10TQG144I Xilinx AMD CPLD
arm开发·单片机·嵌入式硬件·mcu·fpga开发·硬件工程·fpga
lingzhilab9 小时前
零知IDE——基于STM32F103RBT6和SHT40温湿度传感器的环境监测系统
stm32·单片机·嵌入式硬件
0南城逆流09 小时前
【STM32】知识点介绍四:时钟体系
stm32·单片机·嵌入式硬件
清风与日月10 小时前
c# 上位机作为控制端与下位机通信方式
单片机·嵌入式硬件·c#
奋斗的牛马11 小时前
OFDM理解
网络·数据库·单片机·嵌入式硬件·fpga开发·信息与通信
蓁蓁啊12 小时前
Ubuntu 虚拟机文件传输到 Windows的一种好玩的办法
linux·运维·windows·单片机·ubuntu
EVERSPIN12 小时前
32位MCU芯片国产品牌(32系列单片机常用型号有哪些)
单片机·嵌入式硬件·mcu单片机·32系列单片机
爱吃汽的小橘12 小时前
使用DSI TX IP驱动LCD显示屏
单片机·嵌入式硬件