目录
1.接收方数据采样
CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长
发送方以约定的位时长每隔固定时间输出一个数据位
接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位
理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近
2.接收方数据采样遇到的问题
接收方以约定的位时长进行采样,但是采样点没有对齐数据位中心附近
硬同步解决
接收方刚开始采样正确,但是时钟有误差,随着误差积累,采样点逐渐偏离再同步解决
3.位时序
为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线对每一个数据位的时长进行了更细的划分,分为同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2),每个段又由若干个最小时间单位(Tq)构成
SS = 1TqPTS = 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







