1 位速率概念

位速率(也叫做比特率)表示的是单位时间内,总线上传输的信息量,即每秒能够传输的二进制位的数量,R=1/T ,单位是bit per second。比如比特率为8bit/s,意思为一秒传输了8bit,包含了8个二进制事件的信息量。注意位速率与波特率不是同一概念。

摘自:https://zhuanlan.zhihu.com/p/103511011 实际传输中,传输速率以每秒发送的符号(baud)数量进行计算,即波特率。 当一个符号只包含两种可能,即一个事件两种可能,那么此时1baud=1bit。此时波特率等于比特率。 一个符号也有可能包含多个可能,例2中,一个符号中包含四个电平,那么接受端的一个事件,有了abcd四种可能,那么1baud=2bit。此时波特率为比特率的两倍。

2 位时序

第3篇讲到帧结构,我们知道每一帧数据(即一个完整的数据帧)有很多位组成,当发送方发送一帧数据到总线时,接收方怎么准确接收到这帧数据呢?实际采用逐位逐位地接收数据。

具体来说,将一个位分为4段,如上图所示。这些段又由可称为Time Quantum(以下称为Tq)的最小时间单位构成。1位分为4个段,每个段又由若干个Tq构成,这称为位时序。1位由多少个Tq构成,每个段又由多少个Tq构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和Tq数如下表:

所谓采样点是读取总线电平,并将读到的电平作为位值的点,位置在PBS1结束处。

CAN协议的通信方法为NRZ方式,各个位的开头或者结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆/驱动器等)相位延迟会引起同步偏差,因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。

3 硬同步

在总线空闲状态,接收节点检测出帧起始(SOF位)时,会调整当前位的同步段,调整宽度不限。如下图假设这时检测的时SOF位.

那么硬同步简单说就是接收节点直接与发送节点同步(真有硬的味道),如下:

1
2
3
4
具体解释:
1)发送节点Node_A在发送SOF位时,SOF位的下降沿在SS段;
2)这个时候接收节点Node_B发现自己当前位的SS段和发送节点SOF位的SS段不同步。也就是说当Node_A产生SOF位SS段时,Node_B的当前位的SS段已经在5个Tq之前产生了;
3)于是接收节点Node_B强行将自己当前位的SS段拉到与SOF位的SS段同步。

4 再同步

接收节点检测出除SOF位以外的其他位时,进行的同步调整。重同步会通过加长PSB1段,或缩短PBS2段来调整同步,以保证采样点的准确。

对于再同步,需一个概念SJW(同步跳转宽度),是指PSB1和PSB2再同步时允许跳转的最大宽度,其必须满足以下2个条件:

  • SJW必须小于PBS1和PBS2的最小值;
  • SJW最大值不能超过4。

下面看一下再同步的两种情况:

情况1: PSB1段加长(发的晚,收的早)

1
2
3
4
具体解释:
1)发送节点Node_A比接收节点Node_B的时间慢了,也就是说Node_A当前位的ss段产生的时候,Node_B当前位的ss段已经在2个Tq之前产生了;
2)所以这个时候接收节点Node_B就将PBS1延长2个Tq的时间;
3)于是这个时候Node_A当前位的采样点就和Node_B的采样点同步了。

情况2:PSB2段缩短(发的早,收的晚)

1
2
3
4
具体解释:
1)发送节点Node_A当前位的SS段诞生2Tq时长之后,接收节点Node_B的当前位才产生SS段;
2)于是,接收节点Node_B当前位的PBS2段缩短;
3)这样就会导致接收节点Node_B的下一位能够提前2个Tq,从而Node_B的下一位采样点和Node_A下一位的采样点能够同步。

5 调整同步的规则

1
2
3
4
5
6
7
8
硬件同步和再同步遵从如下规则。
1) 1个位中只进行一次同步调整。
2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。
但还要满足下面条件。
5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。
6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。