高頻下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 頻率下采樣延時一個周期呢!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM