1. 程式人生 > >FPGA通過SPI對ADC配置簡介(二)-------4線SPI配置時序分析

FPGA通過SPI對ADC配置簡介(二)-------4線SPI配置時序分析

本篇將以德州儀器(TI)的高速ADC晶片——ads52j90為例,進行ADC的4線SPI配置時序介紹與分析。

              

從ads52j90的資料手冊我們不難發現,其SPI控制模組主要包含4根訊號線,即SEN、SCLK、SDIN以及SDOUT。TI公司對其產品SPI配置訊號的命名方式與通用的SPI訊號命名方式不一樣,但實際上SEN對應CSB、SDIN對應SDI、SDOUT對應SDO、SCLK不變。

l  SEN:控制ADC的SPI讀寫的使能訊號;

l  SDIN:FPGA寫入ADC的配置資料(暫存器地址和對應地址的資料);

l  SDOUT:ADC對應地址輸出的配置暫存器資料;

l  SCLK:FPGA提供給ADC的SPI介面時鐘。

首先介紹該ADC的SPI的寫功能,datasheet給出的時序圖如圖1所示:我們首先大致看一下寫時序圖,能夠了解到對於SDIN來說,需要先寫入A7~A0的8bit的地址,接下來寫入該地址下的16bit的暫存器數值D15~D0,也就是說每進行一次寫操作需要不間斷的寫入24bit 的資料。對於SEN來說,在進行寫操作時,其一直保持低電平,寫之前和寫完後都保持高電平。對於SCLK來說,其上升沿每次採集每1bit SDIN資料的中心位置,共需要採集24次,才能完成這24bit SDIN資料的寫入。

圖1:SPI寫時序圖

上面三點就是我們初步看這個時序圖所得到的結論。對於該ADC,按照這種方式進行寫操作就不會有問題。實際上所有ADC的SPI寫操作都有類似於上面介紹的共同準則,這裡歸納如下:

1, 無論SPI進行讀還是寫操作,SEN必須拉低,否則SPI不工作(既不讀也不寫),讀、寫完成之後SEN必須拉高;

2, SDIN的資料每次在SCLK的上升沿寫入SPI;

3, SDIN的資料組成一定是先寫入配置暫存器地址,再連續寫入配置暫存器數值;

圖2:SPI時序要求

另外,我們看到時序圖上有許多時間引數,我們在寫程式碼時不僅要遵守以上的共同準則,還要滿足這些引數的時序關係,並保留一定的時間裕量。datasheet都提供了這些引數的大小,如圖2所示。比如tSCLK的最小值是50ns,也就意味著SPI的時鐘最高只能到20MHz。tSEN_SU 的最小值為8ns,就表示SEN下降沿至少提前第一個SCLK的上升沿時間8ns。tDSU

則表示SDIN的資料必須至少提前SCLK的上升沿5ns準備好,等等。只要遵守了相關的SPI準則以及datasheet裡的SPI時序引數,SPI的寫操作就不會有問題了。

現在我們介紹該ADC的SPI讀操作,如圖3所示。讀操作的主要目的是監測ADC內部暫存器狀態,從而判斷ADC的配置狀態是否符合使用者的需求。從圖上我們可以看到,SPI的讀操作可以分解為兩個部分:第一個部分是先寫入A7~A0 8bit的暫存器地址到SDIN,然後SDOUT輸出對應地址的16bit的暫存器數值。

這裡重點強調一下:理論上來說,在上升沿鎖存寫入的地址最後1bit後,在接下來的每次SCLK下降沿,SDOUT輸出1bit暫存器值,直到16bit暫存器數值完全輸出。但實際上每次SCLK下降沿輸出的資料只有經過tOUT_DV(12ns ~28ns)後才穩定,後端FPGA才能正確接收。從圖上我們不難發現,FPGASCLK的上升沿附近獲取SDOUT的資料是非常合適的,在這個位置獲取的資料最穩定。

圖3:SPI讀時序圖

4線SPI的讀寫時序分析就到這裡了,再次強調幾個關鍵點:

關鍵點1SEN在讀寫操作時,必須拉低。讀寫完成之後,必須拉高。

關鍵點2SDIN的資料每次必須在SCLK的上升沿寫入SPI。對應的資料格式一定是暫存器地址+要寫入的暫存器數值。

關鍵點3SOUT的資料總是在SCLK的下降沿輸出,因此選擇FPGA在SCLK的上升沿獲取SDOUT資料最穩定。

關鍵點4一定要滿足datasheet給出的SPI的時序引數,並在程式碼實現時要留有適當的時序裕量。

本篇以德州儀器(TI)的高速ADC晶片——ads52j90為例,簡要介紹了ADC的4線SPI配置時序,希望我們能一起學習、一起進步!下篇將以Analog Device(ADI)的多通道高速ADC晶片AD9249為例,介紹三線SPI讀寫配置時序。

如有任何錯誤或疑問,請掃碼微信留言,本人將第一時間回覆~