CAN-位时间与同步-1
参考链接:
目录
同步
同步:通常依靠电平信号的边沿达到同步目的。
CAN为什么需要同步?
因为CAN总线信号传输是异步串行方式,我们一般通过波特率的设置来使得各个节点发送的信号频率一致。
发送单元以与位时序同步的方式开始发送数据,接收单元根据总线上电平的变化进行同步并进行接收工作。
CAN报文在CAN总线上传输时,两个硬件部分存在相应延迟:
-
在CAN-BUS上传输造成的延迟——传输路径上的(电缆、驱动器等)相位延迟
-
在节点上传输造成延迟——发送单元和接收单元存在的时钟频率误差
另外,CAN采用NRZ编码,这种编码方式能充分利用带宽,减小电平跳变引起的干扰,但却不具备时钟功能。(关于NRZ的原理介绍在本文末尾)。上面两种延迟无法使用当前编码方式解决。
因此CAN需要采用额外的定时方法来达到收发信号的同步。
因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。
同步方式
CAN有3种同步方式:位填充,硬同步,重同步。
位填充:就是在检测到总线上有连续5个相同电平时,CAN控制器自动插入一个相反电平。除了用来做同步定时,也可用于错误校验。
硬同步:接收节点检测出帧起始位(SOF)时,调整自己的SS同步段位置,使其与发送节点的帧起始位SS一致,调整宽度不限。
重同步/再同步:接收节点检测出除SOF位以外的其他位时进行的同步调整,接收端调整PBS相位缓冲段(PBS1,PBS2)。
下面通过对位时间、采样点的介绍,描述硬同步、重同步的实现方法。
概念——位时间
一个bit是信号的最小单位,但1bit也是持续了一段时间的。又称位时间。
一个位分为4段,每个段又由若干个Tq(Time Quantum)构成,这称为位时序。

概念——采样点
在位时间内是总线上的电平值是连续值,而我们读取的值只是某个时刻的离散数值。
那么将哪个时刻的电平值,作为我们最终的读取值,就是采样点的选取问题。
目前的采样点,设置在PBS1结束处。

实现——硬同步
硬同步是指在总线空闲状态,接收节点检测出帧起始位(SOF)时,会调整当前位的同步段(SS)与发送节点的帧起始位SS段一样,调整宽度不限。
实现的具体步骤: 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段同步。

实现——再同步/重同步
再同步是指接收节点检测出除SOF位以外的其他位时进行的同步调整。
再同步会通过加长PBS1段,或缩短PBS2段来调整同步,以保证采样点的准确。
对于PBS1,PBS2的调整长度是有限制的,即SJW。
概念——SJW
同步跳转宽度(SJW)是指PBS1和PBS2再同步时允许跳转的最大宽度,其必须满足以下2个条件:
SJW必须小于PBS1和PBS2的最小值;
SJW最大值不能超过4。
下面是重同步的两种情况:
情况1:PBS1段加长(发的晚,收的早)
步骤: 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:PBS2段缩短(发的早,收的晚)
1)发送节点Node_A当前位的SS段诞生2Tq时长之后,接收节点Node_B的当前位才产生SS段; 2)这时接收节点Node_B当前位的PBS2段缩短, 3)这样就导致接收节点Node_B的下一位能够提前2个Tq,从而Node_B的下一位采样点和Node_A下一位 的采样点能够同步。

调整同步的规则
硬同步和再同步遵从如下规则。
1)1 个位中只进行一次同步调整。
2)只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
3)在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
4)在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要满足下面条件。
5)发送方观测到自身输出的显性电平有延迟时不进行再同步。
6)发送方在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。
编码
曼彻斯特编码
曼彻斯特编码:自带,靠上升沿,下降沿表示0,1
曼彻斯特编码虽然传输了时钟信号,但也损失了一部分的带宽,主要表现在相邻相同数据上。
但对于高速数据来说,这种编码方式无疑是这几种编码方式中最优的,相比NRZI编码,曼彻斯特编码不存在长时间信号状态不变导致的时钟信号丢失的情况,
所以在这种编码方式在以太网通信中是十分常用的。
NRZ编码
NRZ编码:NRZ编码也成为不归零编码,也是我们最常见的一种编码,即正电平表示1,低电平表示0。也就是说,一个周期可以全部用来传输数据,这样传输的带宽就可以完全利用。一般常见的带有时钟线的传输协议都是使用NRZ编码或者差分的NRZ编码。因此,使用NRZ编码若想传输高速同步数据,基本上都要带有时钟线,因为本身NRZ编码无法传递时钟信号。但在低速异步传输下可以不存在时钟线,但在通信前,双方设备要约定好通信波特率,例如UART。
时钟信号,数据信号,联合编码进行传输:
两台设备要想进行有线通信,最终都是将想要传达的信息转变成一串比特流,进而在传输线上进行传输。
常规数字通信为数据线+时钟线的形式。
但对于高速信号而言,时钟线和数据线长度的稍稍偏差,就会造成接收端无法满足数据采样的建立时间,故会导致数据出错。
而最好的方式就是将时钟信号和数据信号用同一根线来传递,所以出现了一些比较特殊的编码,使得时钟和数据能够融合在一起。