CAN总线同步跳转宽度SJW(Synchronization Jump Width)



背景

CAN总线的时钟同步需求

CAN总线采用异步通信机制,各节点基于本地晶振生成位时间(Bit Time)。由于晶振的制造公差、温度漂移等因素,不同节点的实际时钟频率可能存在±100ppm(百万分之一)甚至更大的偏差。例如,标称1 MHz的时钟在±100ppm误差下,实际频率范围为0.9999 MHz至1.0001 MHz。这种频率差异会导致节点间的位时间逐渐偏离,若不及时补偿,将引发位采样错误,最终导致通信失败。

同步机制的分类

CAN协议定义了两种同步机制以应对时钟偏差:

硬同步(Hard Synchronization)
仅在帧起始(SOF,Start of Frame)的下降沿触发,强制所有节点将当前位时间重置为同步段(Sync_Seg)的起点。此过程确保所有节点在帧开始时对齐。

重同步(Resynchronization)
在帧传输的后续位边沿(如数据位或ACK位)检测到相位偏差时触发,通过调整相位缓冲段的长度,逐步校准时钟差异。

SJW的核心功能

SJW限定了单次重同步过程中允许的最大相位调整量,其作用包括:

限制调整幅度:防止因单次过大的相位跳变导致采样点偏移超出安全范围。

避免累积误差:通过逐步调整,降低高频次小幅调整对总线稳定性的影响。

增强兼容性:允许不同时钟精度的节点共存于同一网络中。

定义

SJW 定义了

### 关于CAN通信中同步跳转宽度 #### 解释与定义 在CAN总线协议中,同步跳转宽度Synchronization Jump Width, SJW)是一个重要的参数,其持续时间为tSJW。该段并非标称位时间的一部分,而是规定了在重新同步情况下能够延长或缩短比特周期的时间量子(TQ)的最大数量[^1]。 #### 作用 相位SEG1可能会因为再同步而被延长,或者相位SEG2会被相应地缩短;这种变化受到由SJW所设定的一个上限约束。具体来说,为了适应不同节点间存在的微小频率差异以及由此引起的时钟漂移现象,CAN控制器允许对单个比特的时间间隔做出适当调整——即增加或减少一定数目(通常是整数倍)的时间单位TQ来实现这一目的。这些针对位时间所做的最大幅度修正被称为同步跳变宽度(SJW)。 通过设置合理的SJW值,可以在一定程度上补偿因各节点内部振荡器精度不够理想而导致的偏差问题,从而确保整个网络内所有设备之间保持良好的通讯协调性和稳定性。当发生重同步事件时,利用SJW可灵活调节相位缓冲区段(Phase_Seg1和Phase_Seg2),使得即使存在轻微的不同步情况也能得到及时纠正而不影响正常的数据交换过程。 ```python # Python伪代码展示如何基于给定的SJW和其他参数计算可能的新采样点位置 def calculate_new_sample_point(sjw, phase_seg1, phase_seg2): max_adjustment = sjw * time_quantum # 计算最大调整量 new_phase_seg1_max = phase_seg1 + max_adjustment new_phase_seg2_min = phase_seg2 - max_adjustment return (new_phase_seg1_max, new_phase_seg2_min) sjw = 4 # 假设SJW为4个时间单元 phase_seg1 = 8 # 初始相位段1长度 phase_seg2 = 7 # 初始相位段2长度 time_quantum = 1 # 时间量化单位 result = calculate_new_sample_point(sjw, phase_seg1, phase_seg2) print(f"新的相位段1最大值:{result[0]}, 新的相位段2最小值:{result[1]}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天赐好车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值