CAN总线之通俗易懂----位时序

CAN位时序

位布局

出于时序目的,CAN总线上的每个位都划分成至少4个时间份额。时间份额逻辑上划分成四个组或段-

  • 同步段
  • 传播段
  • 相位段1
  • 相位段2

以下是CAN数据位的图片:

CAN总线之通俗易懂----位时序_第1张图片
辅助工具

位时序计算器

指定输入频率和总线速度计算所有可能的CAN总线参数集

点击计算

同步段始终是一个时间份额长,用于时钟同步。总线上的数据改变时,预计会出现一个位边沿。

传播段用来补偿总线线路中的延迟。

如有必要,相位段可以缩短(相位段1)或延长(相位段2),以保持时钟同步。

在相位段1和相位段2之间的边沿上对总线电平进行采样。

大部分CAN控制器还提供选项可以在一个位期间进行三次采样。这种情况中,在采样点之前的两个时间份额的边沿上进行采样,择多译码(至少82527是这样)。

时钟同步

为了调整片上总线时钟,CAN控制器可以将位的长度缩短或延长整数倍个时间份额。这些位时间调整的最大值称为同步跳变宽度(SJW)。

硬同步在起始位从隐性到显性转换时产生。位时间从该边沿重新开始。

重新同步是在报文的同步段中不发生位边沿时产生。一个相位段被缩短或延长,其缩短值或延长值取决于信号中的相位误差。可以使用的最大值由同步跳变宽度参数决定。

位时序寄存器计算

大部分CAN控制器允许程序员使用下列参数设置位时序:

  • 时钟预分频器值
  • 采样点前的时间份额数
  • 采样点后的时间份额数
  • 同步跳变宽度(SJW)中的时间份额数

通常为此提供两个寄存器:btr0和btr1。但是,不同控制器之间略有差异,因此请仔细阅读数据表。

恩智浦(恩飞公司)82c200和SJA1000的寄存器布局如下:

7 6 5 4 3 2 1 0
btr0 SJW1 SJW0 BRP5 BRP4 BRP3 BRP2 BRP1 BRP0
btr1 SAM TSEG22 TSEG21 TSEG20 TSEG13 TSEG12 TSEG11 TSEG10

 

  • BRP0..BRP5设置时钟预分频器值
  • SJW0..SJW1设置SJW的长度
  • TSEG10..TSEG13设置采样点前的时间份额数(不包含起始位)
  • TSEG20..TSEG22设置采样点后的时间份额数
  • 如果要获取三个样本,则SAM设置为1,如果一个样本就已足够,则设置为0。

注意:这些参数的实际值比写入寄存器的值大1。

示例:如果提供给SJA1000的振荡器信号是16MHz,我们想要250kbps的比特率,采样点接近整个位的62%,以及SJW为2个时间份额,那么我们可以设置 –

BRP = 4,指定时间份额长度为2 * 4 / 16000000 s = 500纳秒,以及
TSEG1 = 5,指定采样点之前有5个时间份额,以及
TSEG2 = 3,指定采样点之后有3个时间份额。

这样,每个位都将包含5 + 3 = 8个时间份额,最终的比特率为1 / (8 * 500 ns) = 250 kbps。寄存器值应该为

btr0 = (SJW – 1) * 64 + (BRP -1) =
(2-1)*64 + (4-1) =
67 =
0×43
btr1 = SAM * 128 + (TSEG2 – 1)* 16 + (TSEG1 – 1) =
0*128 + (3-1)*16 + (4-1) = (“4″ 因为不包含起始位)
35 =
0×23

 

采样点为位的5/8=62.5%。

你可能感兴趣的:(CAN总线)