上一篇: CAN物理层介绍
位同步
CAN属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口通讯那样,使用约定好的波特率进行通讯,除此之外,CAN控制器还会使用“位同步”的方式来抗干扰、吸收误差,以实现对总线电平正确的采样,确保通讯正常
为了实现位同步,CAN协议把每一个数据位的时序分解成SS段、PTS段、PBS1段、PBS2段,这四段的长度加起来即为一个CAN数据位的长度,分解后最小的时间单位是Tq(Time Quantum),而一个完整的位由8~25个Tq组成
该图中表示CAN通讯的每一个数据位的长度为19Tq,其中SS段占1Tq,PTS段占6Tq,PBS1段占5Tq,PBS2段占7Tq,信号的采样点位于PBS1段与PBS2段之间,通过控制各段的长度,可以对采样点的位置进行偏移,以便准确地采样
-
SS段(SynchronizationSegment)
同步段,若通讯节点检测到总线上信号的跳变沿被包含在SS段的范围之内,则表示节点与总线的时序是同步的,当节点与总线同步时,采样点采集到的总线电平即可被确定为该位的电平,SS段的大小固定为1Tq
-
PTS段(Propagate Time Segment)
传播时间段,用于吸收网络上的物理延迟的段,是总线上输入比较器延时、输出驱动器延时、总线信号传播延迟总和的两倍,PTS段的大小可以为1~8Tq
-
PBS1段(Phase Buffer Segment1)
相位缓冲段1,主要用来补偿边沿阶段误差,它的时间长度在重新同步时可以加长,初始大小为1~8Tq
-
PBS2段(Phase Buffer Segment2)
相位缓冲段2,主要用来补偿边沿阶段误差,它的时间长度在重新同步时可以缩短,初始大小为2~8Tq
波特率
总线上的各个通讯节点只要约定好1个Tq的时间长度以及每一个数据位占据多少个Tq,就可以确定CAN通讯的波特率
例如,假设上图中的1Tq=1us,而每个数据位由19个Tq组成,则传输一位数据需要时间T1bit=19us,从而每秒可以传输的数据位个数为:
1
∗
1
0
6
/
19
=
52631
(
b
p
s
)
1*10^6/19 = 52631(bps)
1∗106/19=52631(bps)
这个每秒可传输的数据位的个数即为通讯中的波特率
同步过程
CAN的数据同步分为硬同步和重新同步,硬同步只是当存在“帧起始信号”时起作用,无法确保后续的位时序都是同步的,而重新同步方式可解决后续同步问题
硬同步
CAN节点通过总线发送数据时,首先它会发送一个表示通讯起始的信号(帧起始信号),该信号是一个高变低的下降沿,CAN总线上的通讯节点在不发送数据时,会时刻检测总线上的信号
当总线出现帧起始信号时,通讯节点检测到总线的帧起始信号不在节点内部时序的SS段范围,则认为内部时序与总线不同步,采样点采集的数据是不正确的,所以节点以硬同步的方式调整,把自己的位时序中的SS段平移至总线出现下降沿的部分,获得同步,同步后采样点就可以采集到正确的数据了
重新同步
硬同步只是当存在帧起始信号时才起作用,如果在一帧很长的数据内,节点信号与总线信号相位有偏移时,这种同步方式就无能为力了
重新同步方式,利用普通数据位的高至低电平的跳变沿来同步(帧起始信号是特殊的跳变沿),重新同步与硬同步方式相似的是它们都使用SS段来进行检测,同步的目的都是使节点内的SS段把跳变沿包含起来
重新同步的方式分为超前和滞后两种情况,以总线跳变沿与SS段的相对位置进行区分
第一种相位超前的情况,节点从总线的边沿跳变中,检测到它内部的时序比总线的时序相对超前2Tq,这时控制器在下一个位时序中的PBS1段增加2Tq的时间长度,使得节点与总线时序重新同步。
第二种相位滞后的情况,节点从总线的边沿跳变中,检测到它的时序比总线的时序相对滞后2Tq,这时控制器在前一个位时序中的段减少2Tq的时间长度,获得同步。
在重新同步的时候,PBS1和PBS2中增加或减少的这段时间长度被定义为“重新同步补偿宽度SJW(ReSynchronization Jump Width)”
一般来说CAN控制器会限定SJW的最大值,如限定了最大SJW=3Tq时,单次同步调整的时候不能增加或减少超过3Tq的时间长度,若有需要,控制器会通过多次小幅度调整来实现同步,当控制器设置的SJW极限值较大时,可以吸收的误差加大,但通讯的速度会下降