位定时与同步
1.位时间
1.1相关基本概念
-
1)系统时钟:记为 t c l k t_{clk} tclk;
-
2)CAN时钟周期:CAN时钟是由系统时钟分频而来的一个时间长度值,表示CAN控制器的工作时钟,实际上就是一个时间份额 t Q t_Q tQ。可以按照下面的公式计算:
- 时间份额 t Q t_Q tQ:1. CAN控制器的一个时钟周期
2. CAN控制器工作的最小时间单位
- 时间份额 t Q t_Q tQ:1. CAN控制器的一个时钟周期
-
3)BRP:叫做波特率预分频值(baud rate prescaler);
由前面的图可知,上述三者存在以下的公式关系:
t Q = t c l k × B R P t_Q=t_{clk}\times BRP tQ=tclk×BRP
注意:可以在网络上看到一些博客把上述公式记为: t Q = t c l k × ( B R P + 1 ) t_Q=t_{clk}\times (BRP+1) tQ=tclk×(BRP+1)。实际上分频值是存在一个寄存器里面的,且从0开始,这里是取得BRP的值为该寄存器里面的实际值,也是对的,至于这两种写法谁更标准,可能需要去翻阅相关官方文档。
- 4) 位时间:位时间表示一个二进制位在总线上传输时所需要的时间。如上图所示,在本文中,则指的是CAN通信的位时间。
- 一个位可以分为四个时间段;
- 每个段 又由若干个 t Q t_Q tQ构成,位时间大概包含8~25 t Q t_Q tQ;
- 波特率 = 1 位时间 波特率=\frac{1}{位时间} 波特率=位时间1
1.2 位时间分段
-
1)同步段(Synchronization Segment)
- 固定长度为一个 t Q t_Q tQ
- 一个位的传输时从同步开始的;
- 同步段用于同步总线上的各个节点,多个连接在总线上的单元通过此段实现时序调整,从而能同步进行接收和发送的工作,一个位的跳变沿在此时间段内;
-
2)传播段(Propagation Segment)(记为 t P r o p t_{Prop} tProp)
- 传播段时长可编程(1~8个时间份额 t Q t_Q tQ)。
- 传播段用于补偿报文在总线和节点上传输时所产生的时间延迟;
- 传播段时长 ≥ 2 × \ge 2 \times ≥2× 报文在总线和节点上传输时产生的时间延迟;
传播延时:
其中,发送单元的输出延迟接收单元的输入延迟分别表示CAN收发器到CAN控制器之间的延时。
在CAN网络上,两个节点之间进行通信,CAN报文首先从控制节点的控制器发出,经过CAN收发器发送到总线上,再通过一段距离的传输,到达接收节点的CAN收发器CAN控制器,最后接收节点发出ACK显性应答位,重复上述过程到达发送节点,可以看到一次单向传输的延迟包括发送单元的输出延迟,总线上信号传播延迟,接收单元的输入延迟。 -
3)相位缓冲段1(Phase Buffer Segment1)和 相位缓冲段2(Phase Buffer Segment2)
- 用于补偿总线上的边沿相位误差;
- 用于补偿节点间的晶振误差;
- 允许通过重同步延长PBS1或缩短PBS2从而补偿同步误差(因为时钟的偏差,传送延迟等,各单元会有同步误差);
- PBS<PBS2
- 在PBS1时间段的末端进行总线状态的采样;
- 长度可编程:PBS1为18$t_Q$、PBS2为28 t Q t_Q tQ
同步跳转宽度SJW(reSynchronization Jump Width)
a. SJW是相位缓冲段PBS1和PBS2调整的最大值。
b. SJW的值可以通过编程从1~4中取值。
c. SJW的值 ≤ min { P B S 1 , P B S 2 } \le\min\{PBS1,PBS2\} ≤min{PBS1,PBS2}
d. 由于PBS1>PBS2,加上前面b和c,进一步可以推导出:1 ≤ \le ≤SJW的值 ≤ min { P B S 1 , 4 } \le\min\{PBS1,4\} ≤min{PBS1,4}。
问题:对于SJW的值,为什么只能取1~4,还是很疑惑。 -
4)采样点(Sample Point)
- 采样点一般位于相位缓冲段1之后,采样点是读取总线电平,并解释各位的值的一个时间点,采样点对CAN总线来说也非常重要,尤其在组网的时候,多个节点尽量保持同一个采样点,且最好在但不超过7/8位时间点上。
1.3 总线分段
CAN从总线采用的是一部串行通信,为了保证报文的接收节点能在正确的采样点采集到准确的点评,因此采用了总线同步的机制,CAN的同步则包括了硬同步和重同步。
同步规则:
a. 一个位时间内只允许一种同步方式;
b. 任何一个“隐性”到“显性”的跳变都可用于同步。
-
1)硬同步
硬同步发生在SOF位,所有接收节点调整各自当前位的同步,调整宽度不限,使其位于发送的SOF内。例子:
当总线出现帧起始信号时,某节点检测到帧起始信号不在节点内部时序的SS段范围,所以判断它自己的内部时序与总线不同步,因而这个状态的采样点采集得得数据是不正确的。所以节点以硬同步的方式调整,把字节的为时序中的SS段平移至总线下出现下降沿的部分,获得同步,同步后采样点就可以采集得到正确的数据了。从这个例子也可以看出,硬同步只是在SOF时起作用,并不能确保后续的CAN帧的位时序都是同步的。那么后续CAN帧的位时序同步都是怎么保证的呢,此时就需要引入重同步了。
-
2)重同步
重同步是指,接收节点检测出出了SOF位意外的其他位,通过调整位时序进行的同步调整。重同步会通过加长PBS1或者PBS2来调整同步,从而保证采样点的准确。例子1:
当发送端跳变沿落比接收端跳变沿晚两个 t Q t_Q tQ,则接收端节点的PBS1应该延长两个 t Q t_Q tQ,则可使得发送端和接收端的采样点对齐。例子2:
当发送端跳变沿落比接收端跳变沿早两个 t Q t_Q tQ,则接收端节点的PBS2应缩短两个 t Q t_Q tQ,那么接收端的下一个位时间中,采样点可以提前两个 t Q t_Q tQ,从而使得发送和接收端的下一位采样点能够同步。