問題:能否用MCU訪問非標(biāo)準(zhǔn)SPI接口,?
答案:可以,,但可能需要做一些額外的努力。
簡介
當(dāng)前許多精密模數(shù)轉(zhuǎn)換器(ADC)具有串行外設(shè)接口(SPI)或某種串行接口,,用以與包括微控制器單元(MCU),、DSP和FPGA在內(nèi)的控制器進(jìn)行通信??刂破鲗懭牖蜃x取ADC內(nèi)部寄存器并讀取轉(zhuǎn)換碼,。SPI的印刷電路板(PCB)布線簡單,并且有比并行接口更快的時鐘速率,,因而越來越受歡迎,。而且,使用標(biāo)準(zhǔn)SPI很容易將ADC連接到控制器,。
一些新型ADC具有SPI,,但有些ADC具有非標(biāo)準(zhǔn)的3線或4線SPI作為從機(jī),因為它們希望實現(xiàn)更快的吞吐速率,。例如,,AD7616、AD7606和AD7606B系列有兩條或四條SDO線,,在串行模式下可提供更快的吞吐速率,。AD7768、AD7779和AD7134系列有多條SDO線,,用作SPI主機(jī)。用戶在設(shè)計微控制器SPI以配置ADC和讀取代碼時往往會遇到困難,。
圖1.AD7768用作串行主機(jī),,具有兩個數(shù)據(jù)輸出引腳(14001-193)。
與ADC的標(biāo)準(zhǔn)MCU SPI連接
SPI是一種同步,、全雙工,、主從式接口。來自主機(jī)或從機(jī)的數(shù)據(jù)在時鐘上升沿或下降沿同步,。主機(jī)和從機(jī)可以同時傳輸數(shù)據(jù),。圖2顯示了典型的4線MCU SPI接口連接,。
圖2.與ADC從機(jī)的標(biāo)準(zhǔn)MCU SPI連接
要開始SPI通信,控制器必須發(fā)送時鐘信號,,并通過使能信號(通常是低電平有效信號)來選擇ADC,。SPI是全雙工接口,因此控制器和ADC可以分別通過MOSI/DIN和MISO/DOUT線同時輸出數(shù)據(jù),??刂破鱏PI接口允許用戶靈活選擇時鐘的上升沿或下降沿來采樣和/或移位數(shù)據(jù)。為了在主機(jī)和從機(jī)之間進(jìn)行可靠的通信,,用戶必須遵守微控制器和ADC芯片的數(shù)字接口時序規(guī)范,。
如果微控制器SPI和ADC串行接口具有標(biāo)準(zhǔn)SPI時序模式,那么用戶設(shè)計PCB布線和開發(fā)驅(qū)動器固件不成問題,。但是,,有些新型ADC的串行接口端口不是典型的SPI時序模式。MCU或DSP似乎不可能通過AD7768串行端口(一種非標(biāo)準(zhǔn)時序SPI端口)讀取數(shù)據(jù),,如圖4所示,。
本文將介紹操縱標(biāo)準(zhǔn)微控制器SPI以便與具有非標(biāo)準(zhǔn)SPI端口的ADC接口的方法。
本文會給出四種通過串行接口讀取ADC碼的解決方案:
u解決方案1:MCU作為SPI從機(jī),,通過一條DOUT線與作為SPI主機(jī)的ADC接口,。
u解決方案2:MCU作為SPI從機(jī),通過兩條DOUT線與作為SPI主機(jī)的ADC接口,。
u解決方案3:MCU作為SPI從機(jī),,通過DMA與作為SPI主機(jī)的ADC接口。
u解決方案4:MCU作為SPI主機(jī)和SPI從機(jī),,通過兩條DOUT線讀取數(shù)據(jù),。
圖3.SPI數(shù)據(jù)時鐘時序圖示例
圖4.AD7768 FORMATx = 1×?xí)r序圖,僅通過DOUT0輸出,。
STM32F429微控制器SPI通過一條DOUT線讀取AD7768代碼
如圖4所示,,當(dāng)FORMATx = 11或10時,通道0至通道7僅通過DOUT0輸出數(shù)據(jù),。在標(biāo)準(zhǔn)工作模式下,,AD7768/AD7768-4作為主機(jī)工作,數(shù)據(jù)流入MCU,、DSP或FPGA,。AD7768/AD7768-4向從機(jī)提供數(shù)據(jù)、數(shù)據(jù)時鐘(DCLK)和下降沿幀使能信號(DRDY),。
STM32Fxxx系列微控制器廣泛用于很多不同的應(yīng)用中,。該MCU有多個SPI端口,可以使用典型的SPI時序模式將其配置為SPI主機(jī)或從機(jī)。下文中介紹的方法也可應(yīng)用于其他具有8位,、16位或32位幀的微控制器,。
AD7768/AD7768-4分別為8通道和4通道同步采樣Σ-Δ型ADC,每通道均有Σ-Δ型調(diào)制器和數(shù)字濾波器,,支持交流和直流信號的同步采樣,。這些器件在110.8 kHz的最大輸入帶寬下實現(xiàn)了108 dB動態(tài)范圍,具備±2 ppm INL,、±50 ?V偏置誤差和±30 ppm增益誤差的典型性能,。AD7768/AD7768-4用戶可在輸入帶寬、輸出數(shù)據(jù)速率和功耗之間進(jìn)行權(quán)衡,,并選擇三種功耗模式之一以優(yōu)化噪聲目標(biāo)和功耗,。AD7768/AD7768-4的靈活性使其成為適合低功耗直流和高性能交流測量模塊的可重復(fù)使用平臺。遺憾的是,,AD7768的串行接口不是典型SPI時序模式,,而且AD7768充當(dāng)串行接口主機(jī)。一般而言,,用戶必須使用FPGA/CPLD作為其控制器,,
例如,使用32F429IDISCOVERY和AD7768評估板,。變通SPI線的連接如圖5所示,。在這種設(shè)置下,AD7768的所有八通道數(shù)據(jù)僅通過DOUT0輸出,。
圖5.AD7768通過DOUT0將數(shù)據(jù)輸出到STM32F429 MCU SPI連接
需要解決的問題:
AD7768用作SPI主機(jī),,故必須將STM32F429I SPI配置為SPI從機(jī)。
高電平脈沖只持續(xù)一個DCLK周期,,這不是典型的,。
完成所有通道數(shù)據(jù)位的輸出之后,DCLK繼續(xù)輸出,,為低電平,。
解決方案1:MCU SPI作為從機(jī),通過一條DOUT線與SPI主機(jī)ADC接口
將STM32F429的一個SPI端口(如SPI4)配置為從機(jī),,以DCLK速率接收MOSI上的數(shù)據(jù)位,。
將AD7768 連接到STM32F429外部中斷輸入引腳EXTI0和NSS (SPI )引腳。 的上升沿將觸發(fā)EXTI0處理例程,,以使SPI從機(jī)能夠在變?yōu)榈碗娖街蟮牡谝粋€DCLK下降沿開始接收數(shù)據(jù)位,。時序設(shè)計在這里至關(guān)重要。
接收到通道0至通道7的所有數(shù)據(jù)后,,應(yīng)禁用SPI以防止讀取額外的無效數(shù)據(jù),,因為會使SPI從機(jī)變?yōu)榈碗娖剑⑶褼CLK保持切換,。
圖6.時序解決方案中的AD7768數(shù)據(jù)位讀取
MCU固件開發(fā)注意事項
當(dāng)軟件處于中斷模式時,,DCLK運行速率可以高達(dá)4 MHz,實現(xiàn)8 kSPS的ODR,。軟件應(yīng)進(jìn)入中斷處理程序,,在一個半DCLK周期(375 ns)內(nèi)啟動SPI。為使軟件更輕松地進(jìn)入中斷例程,,MCU可以在DCLK上升沿讀取數(shù)據(jù),,從而提供額外的半個DCLK周期時間。但是,,t5 DCLK上升到DOUTx無效最小值為–3 ns(IOVDD = 1.8 V時為–4 ns),,因此DOUTx上的傳播延遲(>|t5| + MCU保持時間)應(yīng)通過PCB布線或緩沖增加。
圖7.配置SPI4外設(shè)
解決方案2:MCU SPI作為從機(jī),,通過兩條DOUT線與SPI主機(jī)ADC接口
在第一種解決方案中,,僅使用DOUT0來輸出所有8通道數(shù)據(jù)。因此,,數(shù)據(jù)讀取將ADC吞吐速率限制為8 kSPS,。如圖1所示,在DOUT0上輸出通道0至通道3,,在DOUT1上輸出通道4至通道7,,可以減少數(shù)據(jù)傳輸時間。串行線的連接如圖7所示,。通過這種改進(jìn),,在DCLK為4 MHz時,ODR可以輕松達(dá)到16 kSPS,。
圖8.AD7768通過DOUT0和DOUT1將數(shù)據(jù)輸出到STM32F429 MCU SPI連接
固件可以不使用中斷模式,,而使用輪詢模式,以減少從上升沿觸發(fā)到使能SPI接收數(shù)據(jù)的時間延遲,。這樣可以在DCLK為8 MHz時實現(xiàn)32 kSPS的ODR,。
解決方案3:MCU SPI作為從機(jī),通過DMA與SPI主機(jī)ADC接口
直接存儲器訪問(DMA)用于在外設(shè)與存儲器之間以及存儲器與存儲器之間提供高速數(shù)據(jù)傳輸,。DMA可以迅速移動數(shù)據(jù)而不需要任何MCU操作,,這樣可以騰出MCU資源用于執(zhí)行其他操作。下面是MCU SPI用作從機(jī)通過DMA接收數(shù)據(jù)的設(shè)計說明,。
解決方案4:MCU SPI作為主機(jī)和從機(jī),,通過兩條DOUT線讀取數(shù)據(jù)
高吞吐量或多通道精密ADC為SPI端口提供兩條、四條甚至八條SDO線,,以在串行模式下更快地讀取代碼,。對于具有兩個或更多個SPI端口的微控制器,,這些SPI端口可以同時運行以加快代碼的讀取。
圖9.EXTI0處于輪詢模式,,SPI4和SPI5通過DOUT0和DOUT1接收AD7768數(shù)據(jù)位,。
圖10.EXTI0處于輪詢模式,SPI4 DMA通過DOUT0接收AD7768數(shù)據(jù)位,。
在以下使用案例中,,32F429IDISCOVERY使用SPI4作為SPI主機(jī),SPI5作為SPI從機(jī),,通過DOUTA和DOUTB接收EVAL-AD7606B-FMCZ數(shù)據(jù),,如圖8所示。
AD7606B是一款16位同步采樣模數(shù)轉(zhuǎn)換數(shù)據(jù)采集系統(tǒng)(DAS),,具有八個通道,,每個通道均包含模擬輸入箝位保護(hù)、可編程增益放大器(PGA),、低通濾波器和16位逐次逼近寄存器(SAR)型ADC,。AD7606B還內(nèi)置靈活的數(shù)字濾波器、低漂移2.5 V精密基準(zhǔn)電壓源和基準(zhǔn)電壓緩沖器,,可驅(qū)動ADC及靈活的并行和串行接口,。AD7606B采用5 V單電源供電,支持±10 V,、±5 V和±2.5 V真雙極性輸入范圍,,所有通道均能以800 kSPS的吞吐速率采樣。
圖11.在主從模式下使用MCU SPI通過DOUTA和DOUTB接收數(shù)據(jù)
圖12.SPI4配置為主機(jī),,SPI5配置為從機(jī),。
圖13顯示了AD7606B以240 kSPS運行時BUSY、SCLK,、DOUTA和DOUB的數(shù)字接口截圖,。
圖13.AD7606B BUSY、SCLK以及DOUTA和DOUTB上的數(shù)據(jù)的示波器截圖
結(jié)論
本文討論了使用微控制器SPI訪問具有非標(biāo)準(zhǔn)SPI接口的ADC的方法,。這些方法可以直接使用,,也可以稍加調(diào)整即可控制ADC SPI;其可作為SPI主機(jī)使用,,也可以與多條DOUT線配合使用以提高吞吐速率,。
致謝
非常感謝應(yīng)用工程師Mika Jiang和Yao Zhao,他們提供了有關(guān)STM32F429IDISCOVERY套件快速啟動和固件調(diào)試工作的建議,。