操縱MCU SPI介面以存取非標準SPI ADC

作者: ADI 產品應用工程師Steven Xie,


問題:

能否透過MCU來存取非標準SPI介面?

RAQ Issue: 172

答案:

可以,但可能需要作一些額外的努力。

簡介

目前,有許多精密的類比數位轉換器(ADC)具有串列周邊介面(SPI)或某種序列介面,用以與包括微控制器單元(MCU)、DSP和FPGA在內的控制器進行通訊。控制器寫入或讀取ADC內部暫存器並讀取轉換碼。SPI的印刷電路板(PCB)佈線簡單,並且有比平行介面更快的時脈速率,因而越來越受到歡迎。同時,使用標準SPI也很容易地能將ADC連接到控制器。

一些新型的ADC具有SPI,但有些ADC具有非標準的3線或4線SPI作為從機,因為它們希望實現更快的吞吐速率。例如, AD7616, AD7606AD7606B 系列便擁有兩條或四條SDO線,在串列模式下可提供更快的吞吐速率。 AD7768, AD7779 和AD7134系列具備多條SDO線以用作SPI主機。使用者在設計微控制器SPI以配置ADC和讀取代碼時往往會遇到困難。

圖1.AD7768用作串列主機,具有兩個資料輸出針腳(14001-193)。

與ADC的標準MCU SPI連接

SPI是一種同步、全雙工、主從式介面。來自主機或從機的資料在時脈升緣或降緣同步。主機和從機可以同時傳輸資料。圖2顯示了典型的4線MCU SPI介面連接。

圖2.與ADC從機的標準MCU SPI連接

要開始SPI通訊,控制器必須發送時脈訊號,並透過致能CS訊號(通常是低電平有效訊號)來選擇ADC。SPI是全雙工介面,因此控制器和ADC可以分別透過MOSI/DIN和MISO/DOUT線同時輸出資料。控制器SPI介面允許使用者靈活選擇時脈的升緣或降緣來採樣和/或移位資料。為了在主機和從機之間進行可靠的通訊,用戶必須遵守微控制器和ADC晶片的數位介面時序規範。

圖3.SPI資料時脈時序圖示例

如果微控制器SPI和ADC序列介面具有標準SPI時序模式,那麼使用者設計PCB佈線和開發驅動器韌體不成問題。但是,有些新型ADC的序列介面埠不是典型的SPI時序模式。MCU或DSP似乎不可能透過AD7768序列埠(一種非標準時序SPI埠)讀取資料,如圖4所示。

圖4.AD7768 FORMATx = 1×時序圖,僅透過DOUT0輸出。

本文將介紹透過操縱標準微控制器SPI以便與具有非標準SPI埠的ADC介面的方法。

本文將提供四種透過序列介面讀取ADC碼的解決方案:

  • 解決方案1:MCU作為SPI從機,透過一條DOUT線與作為SPI主機的ADC介面。
  • 解決方案2:MCU作為SPI從機,透過兩條DOUT線與作為SPI主機的ADC介面。
  • 解決方案3:MCU作為SPI從機,透過DMA與作為SPI主機的ADC介面。
  • 解決方案4:MCU作為SPI主機和SPI從機,透過兩條DOUT線讀取資料。

STM32F429微控制器SPI透過一條DOUT線讀取AD7768代碼

如圖4所示,當FORMATx = 11或10時,通道0至通道7僅透過DOUT0輸出資料。 在標準工作模式下,AD7768/AD7768-4 作為主機工作,資料流程入MCU、DSP或FPGA。AD7768/AD7768-4向從機提供資料、資料時脈(DCLK)和降緣幀致能訊號(DRDY)。

STM32Fxxx系列微控制器廣泛用於很多不同的應用中。該MCU有多個SPI埠,可以使用典型的SPI時序模式將其配置為SPI主機或從機。下文中介紹的方法也可應用於其他具有8位元、16位元或32位元幀的微控制器。

AD7768/AD7768-4分別為8通道和4通道同步採樣Σ-Δ型ADC,每通道均有Σ-Δ型調製器和數位濾波器,支援交流和直流訊號的同步採樣。這些器件在110.8 kHz的最大輸入頻寬下實現了108 dB動態範圍,具備±2 ppm INL、±50 µV偏置誤差和±30 ppm增益誤差的典型性能。AD7768/AD7768-4用戶可在輸入頻寬、輸出資料速率和功耗之間進行權衡,並選擇三種功耗模式之一以優化雜訊目標和功耗。

AD7768/AD7768-4的靈活性使其成為適合低功耗直流和高性能交流測量模組的可重複使用平台。遺憾的是,AD7768的序列介面不是典型SPI時序模式,而且AD7768充當序列介面主機。一般而言,用戶必須使用FPGA/CPLD作為其控制器,例如,使用32F429IDISCOVERY和AD7768評估板。變通SPI線的連接如圖5所示。在這種設置下,AD7768的所有八通道資料僅透過DOUT0輸出。

圖5.AD7768透過DOUT0將資料輸出到STM32F429 MCU SPI連接

需要解決的問題:

  • AD7768用作SPI主機,故必須將STM32F429I SPI配置為SPI從機。
  • DRDY 高電平脈衝只持續一個DCLK週期,這不是典型的CS
  • 完成所有通道資料位元的輸出之後,DCLK繼續輸出,DRDY為低電平。
圖6.時序解決方案中的AD7768資料位元讀取

解決方案1:MCU SPI作為從機,透過一條DOUT線與SPI主機ADC介面

  • 將STM32F429的一個SPI埠(如SPI4)配置為從機,以DCLK速率接收MOSI上的資料位元。
  • 將AD7768 DRDY連接到STM32F429外部中斷輸入針腳EXTI0和NSS (SPI CS)針腳。 DRDY的升緣將觸發EXTI0處理常式,以使SPI從機能夠在DRDY變為低電平之後的第一個DCLK降緣開始接收資料位元。時序設計在這裡至關重要。
  • 接收到通道0至通道7的所有資料後,應禁用SPI以防止讀取額外的無效資料,因為DRDY會使SPI從機CS變為低電平,並且DCLK保持切換。

MCU韌體開發注意事項

圖7.配置SPI4周邊

當軟體處於中斷模式時,DCLK運行速率可以高達4 MHz,實現8 kSPS的ODR。軟體應進入中斷處理常式,在一個半DCLK週期(375 ns)內啟動SPI。為使軟體更輕鬆地進入中斷常式,MCU可以在DCLK升緣讀取資料,從而提供額外的半個DCLK週期時間。但是,t5 DCLK上升到DOUTx無效最小值為–3 ns(IOVDD = 1.8 V時為–4 ns),因此DOUTx上的傳播延遲(>|t5| + MCU保持時間)應透過PCB佈線或緩衝增加。

解決方案2:MCU SPI作為從機,透過兩條DOUT線與SPI主機ADC介面

在第一種解決方案中,僅使用DOUT0來輸出所有8通道資料。因此,資料讀取將ADC吞吐速率限制為8 kSPS。如圖1所示,在DOUT0上輸出通道0至通道3,在DOUT1上輸出通道4至通道7,可以減少資料傳輸時間。串列線的連接如圖7所示。透過此種改良,在DCLK為4 MHz時,ODR可以輕鬆達到16 kSPS。

Figure 8. AD7768 output data on DOUT0 and DOUT1 to STM32F429 MCU SPI connection.

韌體可以不使用中斷模式,而使用輪詢模式,以減少從DRDY升緣觸發到致能SPI接收資料的時間延遲。如此可以在DCLK為8 MHz時實現32 kSPS的ODR。

Figure 9. EXTI0 in polling mode and SPI4 and SPI5 to receive AD7768 data bits on DOUT0 and DOUT1.

解決方案3:MCU SPI作為從機,透過DMA與SPI主機ADC介面

直接記憶體存取(DMA)用於在周邊與記憶體之間以及記憶體與記憶體之間提供高速資料傳輸。DMA可以迅速移動資料而不需要任何MCU操作,這樣可以騰出MCU資源用於執行其他操作。下面是MCU SPI用作從機透過DMA接收資料的設計說明。

圖10.EXTI0處於輪詢模式,SPI4 DMA透過DOUT0接收AD7768資料位元。

解決方案4:MCU SPI作為主機和從機,透過兩條DOUT線讀取資料

高輸送量或多通道精密ADC為SPI埠提供兩條、四條甚至八條SDO線,以在串列模式下更快地讀取代碼。對於具有兩個或更多個SPI埠的微控制器,這些SPI埠可以同時運行以加快代碼的讀取。

在以下使用案例中,32F429IDISCOVERY使用SPI4作為SPI主機,SPI5作為SPI從機,透過DOUTA和DOUTB接收 EVAL-AD7606B-FMCZ 資料,如圖8所示。

AD7606B是一款16位同步採樣模數轉換資料擷取系統(DAS),具有八個通道,每個通道均包含類比輸入箝位保護、可編程增益放大器(PGA)、低通濾波器和16位元逐次逼近暫存器(SAR)型ADC。AD7606B並內建了靈活的數位濾波器、低漂移2.5 V精密基準電壓源和基準電壓緩衝器,可驅動ADC及靈活的並行和序列介面。

圖11.在主從模式下使用MCU SPI透過DOUTA和DOUTB接收資料
圖12.SPI4配置為主機,SPI5配置為從機。

圖13顯示了AD7606B以240 kSPS運行時BUSY、SCLK、DOUTA和DOUB的數位介面截圖。

圖13.AD7606B BUSY、SCLK以及DOUTA和DOUTB上的資料的示波器截圖

結論

本文討論了使用微控制器SPI存取具有非標準SPI介面的ADC的方法。這些方法可以直接使用,也可以稍加調整即可控制ADC SPI;其可作為SPI主機使用,也可以與多條DOUT線配合使用以提高吞吐速率。

致謝

特別感謝應用工程師Mika Jiang和Yao Zhao提供相關STM32F429IDISCOVERY套件快速啟動和韌體調試工作的建議。

參考文獻。"SPI介面簡介"。《類比對話》,第52卷。2018年9月。

RM0090參考手冊:STM32F405/415、STM32F407/417、STM32F427/437和STM32F429/439高級ARM® 32位元MCU. STMicroelectronics, 2019年2月。

STM32F427xx產品手冊. STMicroelectronics, 2018年1月。

UM1670 User Manual: Discovery Kit with STM32F429ZI MCU. STMicroelectronics, September 2017.

Usach, Miguel. AN-1248應用筆記:SPI介面。ADI公司,2015年9月。


Author

Steven Xie

Steven Xie

Steven Xie has worked as a product applications engineer with the China Design Center in ADI Beijing since March 2011. He provides technical support for SAR ADC products across China. Prior to that, he worked as a hardware designer in wireless communication base stations for four years. In 2007, Steven graduated from Beihang University with a master's degree in communications and information systems.