高频下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) 命令的时序图:

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

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

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

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

实际传输过程

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

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

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

  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 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 频率下采样延时一个周期呢!

posted @ 2020-03-11 16:29  广漠飘羽  阅读(5784)  评论(1编辑  收藏  举报