文章目录
0 前言
最近,在搭建HIL测试台架的过程中,遇到台架无法与域控制器进行
正常
CAN通讯的问题。
在确保CAN通讯介质连接正常的情况下,怀疑是波特率、采样点等通讯参数配置不正确导致的。
因此,通过查阅相关博客,对CAN通讯的位时序进行了学习,并在CANoe的CAN通道配置界面验证了自己当前的认知。
现整理出相关知识点,以便后续查看。
1 位时序的概念
CAN通讯,反映到总线介质上,是将1010这样的数据位(即高低电平序列)从发送节点传递给接收节点。由于CAN通讯属于异步通讯,没有时钟信号线,因此其可靠通讯需借助统一的位时序进行。
位时序,即CAN控制器在对总线介质上的每一个数据位进行接收时(时间为Tbit),其内部又细分为4个时序段,分别为:
-
同步段(SS)
-
传播时间段(PTS)
-
相位缓冲段1(PBS1)
-
相位缓冲段2(
PBS2
)
就STM32而言,传播时间段与相位缓冲段1合并为一个时间段,则原来的4个时序段,变为3个时序段,分别为:
-
同步段(SS)
-
时间段1(BS1)
-
时间段2(BS2)
其每个时序段对应的时间分别为:Tss、Tbs1 、Tbs2,则Tbit = Tss + Tbs1 + Tbs2 ,具体对应关系如下图所示。
SS |
PTS |
PBS1 |
PBS2 |
||||
SS |
BS1 |
BS2 |
|||||
|
|
|
|
|
|||
Tss |
Tbs1 |
Tbs2 |
每个时序段又由若干个最小时间元(Tq)组成。其中,同步段有且仅有1个最小时间元。
2 时钟同步
电平信号的传输存在时间延迟,各通讯节点的时钟频率也存在差异。为了确保在这样的条件下,各节点也能正常、可靠地通讯,时钟同步机制应运而生。
时钟同步机制分为硬同步、重同步两种,其目标均是使数据位的跳变沿位于一个位时序的同步段内。
2.1 硬同步
硬同步采用的同步方式是平移自身的位时序。
当接收节点的CAN控制器检测到总线上帧起始位的跳变沿时,发现这个跳变沿并不位于自身内部位时序的同步段内,则判定自身的位时序与总线不同步。
为了消除这种不同步,CAN控制器会将自身当前的位时序进行平移,使得帧起始位的跳变沿对应到自身位时序的同步段内,从而实现硬同步,如下图所示。
硬同步仅发生在一帧报文的帧起始位处,对于该报文后续数据位的同步,则无能为力。
2.2 重同步
重同步采用的同步方式是延长时间段1或者缩短时间段2。
1)位时序超前
在一帧报文后续数据位的传输过程中,若出现的跳变沿,且这个跳变沿位于接收节点CAN控制器当前位时序的时间段1内,则其判定这是一个慢速的CAN控制器发送的当前数据位的滞后跳变沿,自身的位时序出现了相对的超前现象。
为此,接收节点的CAN控制器会适当延长自身当前位时序时间段1的长度,使得后续数据位的跳变沿能够位于自身位时序的同步段内,从而使自身位时序重新获得同步,如下图所示。
2)位时序滞后
在一帧报文后续数据位的传输过程中,若出现的跳变沿,且这个跳变沿位于接收节点CAN控制器当前位时序的时间段2内,则其判定这是一个快速的CAN控制器发送的下一个数据位的超前跳变沿,自身的位时序出现了滞后。
为此,接收节点的CAN控制器会适当缩短自身当前位时序时间段2的长度,使得后续数据位的跳变沿能够位于自身位时序的同步段内,从而使自身位时序重新获得同步,如下图所示。
在重同步时,接收节点的CAN控制器延长时间段1或缩短时间段2的长度不是无限制的,其存在一个向上的阈值。这个阈值被称为重新同步补偿宽度或同步跳变宽度,即SJW(reSynchronization Jump Width),其也由若干个最小时间元组成。
3 采样点的概念
为了保证接收节点可靠地接收数据,其CAN控制器会在一个位时序的特定位置进行采样。
若CAN控制器被配置为1个采样点,则该采样位置在一个位时序的时间段1与时间段2个交界点处。
若CAN控制器被配置为3个采样点,则该3个采样位置分别为一个时序的时间段1与时间段2个交界点处、交界点往前1个Tq处、交界点往前2个Tq处。
采样点通常用百分比表示,其计算公式为:[(Tbit – Tbs2 )/ Tbit ] × 100% 。
4 波特率的计算方法
首先,明确如下概念:
本文中的波特率:CAN控制器1秒钟能够发送或接收的数据位的数量。
根据波特率的定义,推导其计算公式如下:
若CAN控制器的时钟频率为f(单位:Hz),预分频器值为BRP(可以理解为基频的分频系数),则最小时间元Tq = BRP / f 。
若CAN控制器一个位时序由N个最小时间元组成,则其发送或接收一个数据位的时间为N×Tq,波特率的计算公式为:1 /(N × Tq)= f /(N × BRP)。
5 波特率、采样点的计算实例
在实际CAN控制器的应用中,通过配置其相关参数即可,包括SJW、BRP、SAM、BS1、BS2。
对于配置参数,说明3点:
①SAM可理解为采样模式,其值可确定采样点的个数,0:1个采样点;1:3个采样点。
②BS1、BS2分别为位时序中时间段1、时间段2对应的最小时间元的个数。
③上述5个参数,部分CAN控制器用2个移位寄存器存放(如恩智浦公司的82c200、SJA1000),分别为BTR0、BTR1,其布局如下图所示。
④上述5个参数,除SAM外,其配置值需比实际值小1。
bit7 |
bit6 |
bit5 |
bit4 |
bit3 |
bit2 |
bit1 |
bit0 |
|
BTR0 |
SJW[1] |
SJW[0] |
BRP[5] |
BRP[4] |
BRP[3] |
BRP[2] |
BRP[1] |
BRP[0] |
BTR1 |
SAM |
BS2[2] |
BS2[1] |
BS2[1] |
BS1[3] |
BS1[2] |
BS1[1] |
BS1[0] |
为了验证波特率的计算方法,可通过CANoe的CAN通道配置界面的数据进行验证。
其配置界面如下图所示,以图中红框标注的配置值进行计算。
由图可得,板载时钟的频率f = 16×10^6 Hz
BTR0 = 0x43,对应的二进制值为:0100 0011
BTR1 = 0x14,对应的二进制值为:0001 0010
根据其布局可知:BRP = 2 ×(3+1)= 8;SAM = 0 ;BS1 = 4+1 = 5;BS2 = 1+1 = 2
位时序的长度Tbit = (SS + BS1 + BS2)= (1 + 5 +2)Tq = 8Tq
采样点的计算为:[(Tbit – Tbs2 )/ Tbit ] × 100% = [(8Tq – 2Tq )/ 8Tq ] × 100% = 75%
波特率的计算为:f /(N × BRP)= 16×10^6 /(8 × 8)= 250000 Baud = 250 kBaud
计算出的采样点数据、波特率均与界面上自动给出的数据吻合,其计算方式得到验证。
感兴趣的朋友,可根据其它的配置值进行计算验证。
注:预分频器值需额外乘以2,具体原因还未知。
总结
若博客内容有错误之处,欢迎大家斧正。
感觉写博客跟写论文差不多,好累。
感谢写博客,分享知识的大佬们。
本博客参考了如下博客的内容,感谢其作者: