CAN总线作为异步通信方式,收发双方节点需约定相同的波特率进行通讯,但由于各种因素影响,接收方的数据总会有误差,当误差过大时,整个通讯网络将不能正常通讯。那么,该如何保障CAN节点之间通信同步呢?
CAN同步机制
1、CAN时钟
首先了解一下CAN总线系统中的两个时钟:晶振时钟周期和CAN时钟周期。
晶振时钟周期:是由单片机振荡器的晶振频率决定的,指的是振荡器每振荡一次所消耗的时间长度,也是整个系统中最小的时间单位。
CAN时钟周期:CAN时钟是由系统时钟分频而来的时间长度值,实际上就是一个时间份额Tq。
图1 CAN时钟与位时间的关系
其中,CAN位时间表示CAN的一位二进制数据所保持的时间,具体关系如图2所示。
图2 CAN总线二进制报文与位时间关系
2、位时序
CAN总线作为串行通信,发送单元采用不归零编码,将数据以位流形式发送到总线上,并且每一位数据位宽都由CAN控制器的N个时钟周期组成,该时钟周期则为最小的时间单位Time Quantum(以下称为Tq),这N个Tq被分为四段:同步段(SS)、传播时间段(PTS)、相位缓冲段1(PBS1)、相位缓冲段2(PBS2),而采样点位置处于PBS1和PBS2的交界处。
1位分为4个段,每个段又由若干个Tq构成,这称为位时序,如图3所示。
图3 同TQ数量情况下不同采样点的配置时序
其中,各段的作用为:
同步段(SS:Synchronization Segment):CAN网络中的所有节点,在接收一位数据时,以此段作为位起始的参考点,进行下降沿的检测,统计下降沿基于SS段的偏移,然后进行位时序的调整,使接收趋于同步(下降沿在理想情况下应出现在SS段)。需注意,进行位时序调整的条件是检测到下降沿,若无下降沿则不进行调整,因此为了避免多个相同连续位出现导致位时序得不到调整,产生不同步的情况,CAN控制器增加了填充位的概念,当出现连续5个相同位后,添加一位相反电平的填充位。SS段长度固定为1个Tq。
传播时间段(PTS:Propagation Time Segment):CAN总线上数据的传输会受到物理延迟,比如发送单元的发送延迟、总线上信号的传播延迟、接收单元的输入延迟等,PTS段就是用来补偿这些因素产生的时间延迟。而PTS段长度至少应为这些因素产生的时间延时的2倍,PTS段长度至少为1个Tq。
相位缓冲段1(PBS1:Phase Buffer Segment 1):若下降沿延后N个Tq,且延迟不大于同步跳转宽度,使得原本位时序中采样点位置提前N个Tq,则需要对PBS1段增加N个Tq数(使采样点位置延后N个Tq),吸收这段误差。PBS1段长度至少为1个Tq。
相位缓冲段2(PBS2:Phase Buffer Segment 2):若跳变边沿提前N个Tq, 且不大于同步跳转宽度,使得原本位时序中采样点位置延后N个Tq,则需要对上一个位时序的PBS2段减少N个Tq数(使采样点位置提前N个Tq),吸收这段误差。PBS2段长度至少为2个Tq。
重同步补偿宽度(SJW: reSynchronization Jump Width):SJW为PBS1增加或PBS2减少的最大Tq数。
3、CAN同步的策略
CAN同步是以位为单位,每接收一个下降沿,则进行一次同步。发送单元以约定好的位时序进行数据发送。接收单元根据总线上接收到的下降沿进行位时序同步。
但是,发送节点和接收节点作为互相独立的硬件个体,时钟频率误差、传输路径上的(电缆、驱动器等)相位延迟等都会引起时序偏差。因此接收单元需通过硬同步或者重同步的方法进行位时序调整。如图4帧结构所示,硬同步只在空闲状态检测出第一个下降沿(帧起始下降沿)时进行,而重同步则在其余各段进行。
图4 CAN标准数据帧结构