高频下SPI总线的采样延时

概述

本文以 SPI Nor 为例,讲解在高频下SPI控制器的采样延时机制。

在MXIC的某款 SPI Nor 的规格书,在所有的读命令都有这么一句介绍:

The address is latched on rising edge of SCLK, and data of each bit shifts out on the falling edge of SCLK at a maximum frequency XXX

字面意思,就是说SPI Nor 在时钟的上升沿获取命令和地址,而 SPI Master 应该在时钟的下降沿采样 SPI Nor 返回的数据

查阅大量的 SPI Nor 的规格书,普遍使用 SPI mode0 和 mode3 的模式下。不管是 SPI Mode 0 还是 Mode 3,都是从上升沿开始采样。不清楚 SPI 的4种工作模式的同学看这:《SPI总线传输的4种模式》。

SPI总线交互中,不管是哪个 SPI 模式,SPI Master 往往会在第一个跳变沿采样点发送数据 ,在紧接着的下一个跳变沿用于接收数据

我们看下一 Normal Read(0x3B) 命令的时序图:

高频下SPI总线的采样延时_第1张图片

在低频下,例如24MHz以下的频率,上面的采样点是非常稳定的,但是一旦跑到高频,例如 100MHz 的频率下,SPI Master 获取数据的时候必须额外加一个延时,否则会采样出错。

不同频率下采样延时不同,有时候是延时半个周期,有时候是延时一个周期。某款 SPI 控制器的规格书规定如下:

频率 延时周期
<= 24MHz 0
<= 60MHz 0.5
> 60MHz 1

为什么上升沿发送数据,下降沿接受数据呢?为什么不能做到上升沿发送和接受数据呢?为什么要有这个延时呢? 带着疑问,我们分析下实际输出过程。

实际传输过程

实际的 SPI 传输,我们必须考虑到 电路传输耗时 以及 设备准备数据耗时

SPI Master 发起一个上升沿,SPI Slave并不是马上就能获取到上升沿,这期间会有延时,这就是数据传输的延时。同样的,SPI Nor 的数据并不是时刻准备着的,在 SPI Master 要读某笔数据时,SPI Nor需要时间准备数据。总的来说,实际的 SPI 传输过程,总会有延时。

用一张图来描述实际传输过程:

高频下SPI总线的采样延时_第2张图片

  1. 在某一时刻,SPI Master CLK 发出一个上升沿跳变
  2. 经过电路上的数据传输,过了 T1 时刻 SPI Slave 才收到上升沿跳变。因此,T1 就是电线上传输造成的延时。
  3. SPI Slave 准备数据用了 T2 时间
  4. SPI Slave 把数据传输回 SPI Master,同样要经过电路传输,因此会有 T1 的延时。

因此,从 SPI Master 发出第一个上升沿开始到能正确采样到数据,总的延时为: 2 * T1 + T2,也就是说,
SPI Master 在发送完地址后,必须过 2 * T1 + T2 时间才开始采样数据,才能获取到正确的数据。

这其实能说明为什么对 SPI Nor 设备,SPI Master 必须在上升沿发送命令和地址,在下降沿而不是上升沿获取数据,因为数据传输和数据准备需要一些时间

在高频下,我们只是这样还不够。

高频下传输过程

假设 SPI Nor 运行在 100MHz 下,那么一个时钟周期就是 10ns,半个时钟周期就是 5 ns。

我们不妨计算下,在 100MHz 的频率下,SPI Master 采样数据的有效时间范围:

高频下SPI总线的采样延时_第3张图片

从 SPI Master 时钟的上升沿开始计算,计算上各种延时,那么 SPI Master 采样数据的有效时间范围应该是:

[ 2 * T1 + T2 , 2 * T1 + T2 + T0 ]

因为是 100MHz ,所以一个周期为10ns,即 T0 = 10ns。

以 XTX 的某一款 Nor 为例,查询规格书,在 AC Characteristics 的表格中,找到这么一行:

Symbol Parameter Max Unit
t CLQV Clock Low To Output Valid 6.5 ns

意思是说,从 时钟为低电平到有效数据输出的时间 为 6.5ns,换句话说,从接收到地址后,SPI Nor准备数据需要 6.5ns,即 T2 = 6.5ns。

根据有效采样时间 [ 2 * T1 + T2 , 2 * T1 + T2 + T0 ],可以计算出:

当电线传输损耗为1ns时,有效采样时间为(ns):[8.5, 18.5]
当电线传输损耗为2ns时,有效采样时间为(ns):[10.5, 20.5]

如果不加延时,SPI Master 依然是上升沿发送数据,下降沿采样数据,此时 SPI Master 采样数据的时刻是 5ns,完全不在上面计算的有效采样时间范围,自然无法采样到正确数据。

如果延时半个周期呢?采样时刻为:5ns + 5ns(半个周期) = 10ns,当电线损耗为 1ns 时勉强可用,当电线损耗为 2ns 时,就有无法正确采样的风险。

如果延时一个周期呢?采样时刻为:5ns + 10ns(一个周期) = 15ns,不管是电路损耗为 1ns 还是 2ns,都能使用,兼容性更强。

怪不得 SPI 控制器 建议 100MHz 频率下采样延时一个周期呢!

你可能感兴趣的:(高频下SPI总线的采样延时)