CAN 位同步
前言
CAN总线是串行、异步、半双工的通信方式。
CAN没有同步时钟,如果各个节点只用事先约定好的波特率进行通信,加上硬件部分的干扰(传输线上的延迟和节点上收发的延迟)或其他影响,会造成数据错误。
CAN使用位同步的方式来保证信号收发同步,CAN控制器通过硬同步、重同步或位填充的方法来调整时序,实现对总线电平信号进行正确的采样。
CAN的位时序
CAN协议把每一个数据位(1bit)的时序分解成4个段:
-
SS:同步段(Synchronization Segment)
-
PTS:传播时间段(propagation time segment)
-
PBS1:相位缓冲段1(phase buffer segments1)
-
PBS2:相位缓冲段2(phase buffer segments2)
每个段由不同个数的Tq构成,这4个段的长度加起来为一个CAN数据位的长度,一个完整的数据位由8-25个Tq组成
同步段
不管发送节点发送一位还是接收节点接收一位,都是同步段开始,若总线跳变沿在位时序SS段内,表示各个节点和总线的时序同步。固定为1Tq
传播时间段
用于补偿信号在网络和节点传播的物理延时时间。1-8Tq,长度可编程
相位缓冲段1
主要用于补偿总线跳变沿在位时序中的误差,其时间长度在重新同步是可以增长,总线边沿在SS段之后。1-8Tq,长度可编程
相位缓冲段2
主要用于补偿总线跳变沿在位时序中的误差,其时间长度在重新同步是可以缩短,总线边沿在SS段之前。2-8Tq,长度可编程
名词
Tq(Time Quantum):CAN控制器工作的最小时间单位,通过时钟分频得到
总线跳变沿:隐性-->显性的跳变
采样点:总线电平采样在PBS1段的末端
SJW:重同步跳转宽度(synchronisation jump width),是有上限的
CAN的位同步
发送节点在发送的同时,监听总线电平,接收节点处于只监听状态,所以总线的电平由隐性跳变到显性,各个节点都可以知道的
不管节点是在发送还是接收,只要总线的跳变沿不在该节点位时序SS段内,位时间就需要重新同步
硬同步
总线电平在第一次下降沿(帧起始),所有节点都要调整各自的同步段,位时间重新开始
重同步
隐性-->显性跳变,判断跳变沿是否落在SS段,如果跳变沿不在SS段内,会引起重同步,各个节点的位时间进行重新同步
- 跳变沿在SS段之后,PBS1增长
- 跳变沿在SS段之前,PBS2缩短
接收单元在PBS1的末端采样电平信号,获得的logic值就是总线电平
在当前位周期内通过变化PBS段的值实现位重同步,如果下个位周期 CAN数据位同步(跳变沿在SS段),各个段恢复预设值
位填充
相位差大于SJW