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

  • 相关阅读:
    zypper命令使用示例
    《大数据之路:阿里巴巴大数据实践》——1-5章
    《织云 Metis 时间序列异常检测全方位解析
    《Replicator Neural Networks》
    《软件应用 | 用 R 语言做因果推断?你少不了这些包》
    《【统计】Causal Inference》
    《Google 开源AI项目15个》
    《TF-Replicator:研究人员的分布式机器学习》
    《TF-Replicator, GPipe, Mesh-Tensorflow 三个库对比》
    虚拟对抗训练:一种新颖的半监督学习正则化方法
  • 原文地址:https://www.cnblogs.com/gmpy/p/12463105.html
Copyright © 2020-2023  润新知