CANbus -----bit timing & synchronize mechanism

来源:互联网 发布:80c51单片机引脚图 编辑:程序博客网 时间:2024/06/03 15:24

Abstract

Recently,Some work about CANbus test has been done ,during this time,I learned some details about the synchronize mechanism, so make a note.

bit timing

The nominal bit time (NBT) consists of 4 segment durations, all of these is an integer multiple of a unit of time tQ(Time Quantum).

tNBT=tSYNC_SEG+tPROG_SEG+tPHASE_SEG1+tPHASE_SEG2

这里写图片描述
the clock which generated tQ is derived from MCU system clock or prescaler of some programmable oscillator (baud rate prescaler)

SYNC_SEG 同步段

占1tQ时间,对于每个CAN节点,SYNC_SEG是每bit的开始。对于发送节点,新bit数据的发送是以SYNC_SEG开始的。对于接收节点,接收1bit的开始被期望在这个段内发生(发生跳变沿)由于收发和总线的传输延时,接收节点接收到SYNC_SEG的时间也会与本地时钟存在偏差。

PROG_SEG 传播段

该段的存在是因为CAN协议允许非破坏性仲裁机制下节点对总线访问的竞争,在非破坏性仲裁的情况下,仲裁区存在不只一个节点执行发送,每个发送节点采样总线电平判定其是否获取对总线的访问仲裁,如果仲裁失败则也接收仲裁区的值。当每个节点采样每1bit的值时,被采样的值必须保证是所有请求总线访问的仲裁节点传输的逻辑电平的叠加,该段存在就是为了延时最先采样到1bit电平的节点直到这1bit值被所有的节点所接收。

PHASE_SEG 相位段

PHASE_SEG1结束的时候进行数据采样。PHASE_SEG2=MAX(IPT,PAHSE_SEG1),
对于TOUCAN module IPT = 3 (BPR = 1的情况下),MCAN module IPT = 3(配置为1bit采样3次)

synchronize

为了消除CAN总线传输的相位误差,CAN控制器上有两种同步机制分,硬同步(hard synchronization)和重同步(re-synchronization)

硬同步

硬同步只发生在传输一帧的开始,当接收到一帧数据的sof位时,所有的CAN节点认为sof位中隐式电平到显式电平的跳变沿就是1bit的SYNC_SEG,并以此为基准采样接下来电平。

重同步

重同步发生在一帧数据中除了sof位接下来发生隐式电平到显式电平的跳变沿的时候。没有延时的情况下所有的电平转换被期望只能在接收节点的SYNC_SEG段内被接收节点所捕捉。但当隐式电平到显式电平的跳变沿不在SYNC_SEG时则进行重同步。如果隐式电平到显式电平的跳变沿在SYNC_SEG段之后但在采样点之前,说明这是一个滞后边沿,接收节点将会增加当前位时序中的PHASE_SEG1段的长度;如果隐式电平到显式电平的跳变沿在采样点之后且在下一个bit的SYNC_SEG段之前,说明这是一个超前电平,则会减少当前位时序中PHASE_SEG2段的长度;且这两种调整操作的最大调整量不超过寄存器中设置的RJW值的大小。最小的RJW为1tQ。为了最小化两个隐式电平到显式电平的跳变沿之间的时间间隔,CAN协议采用位填充机制,即五个相同的电平则插入一个相反的填充位,用,这也最大化了重同步发生的机会。

容错计算

定义晶振容错:δf=|ffN|fN
数据帧中相位差最大的情况为10bit的相位累积,往往出现在5位显式电平后又有5位隐式电平(或反之),这段时间内累积的相位差必须要小于RJW的调整时间,才能正确的同步,因此有容错条件(1):

2×δf×10×tNBT<tRJW

实际系统是运行在可能导致CAN总线错误的噪声环境中,当某一节点遇到到错误时,将会向CANbus上发送错误帧(error flag),当出现局部错误时,只有错误节点发送错误帧,其他节点则会在接收到错误帧发送自己的错误标志作为回应。如果出现全局错误,所有节点会同时发送错误帧,因此几点需要正确的接收到错误帧后的回应才能判断错误是局部错误还是全局错误,这需要节点必须正确的采样到error flag后的的第一个bit的电平。
来自于错误节点的error flag 由6个显式电平电平,在error flag 之前也可能存在6个显式电平,例如填充错误,所以节点必须正确采样到第13个bit的电平。这里存在容错条件(2):
(2×δf)×(13×tNBTtPHASE_SEG2)<MIN(tPHASE_SEG1,tPHASE_SEG2)

0 0
原创粉丝点击