h1_key

當(dāng)前位置:首頁 >新聞資訊 > 品牌資訊>亞德諾>優(yōu)化MCU SPI驅(qū)動程序提高ADC吞吐速率
優(yōu)化MCU SPI驅(qū)動程序提高ADC吞吐速率
2023-03-30 548次


  隨著技術(shù)的進(jìn)步,低功耗物聯(lián)網(wǎng)(IoT)和邊緣/云計(jì)算需要更精確的數(shù)據(jù)傳輸。圖1展示的無線監(jiān)測系統(tǒng)是一個帶有24位模數(shù)轉(zhuǎn)換器(ADC)的高精度數(shù)據(jù)采集系統(tǒng)。在此通常會遇到這樣一個問題,即微控制單元(MCU)能否為數(shù)據(jù)轉(zhuǎn)換器提供高速的串行接口。

  設(shè)計(jì)MCU和ADC之間的高速串行外設(shè)接口(SPI)關(guān)于數(shù)據(jù)事務(wù)處理驅(qū)動程序的流程,并簡要介紹了優(yōu)化SPI驅(qū)動程序的不同方法及其ADC與MCU配置。詳細(xì)介紹了SPI和直接存儲器訪問(DMA)關(guān)于數(shù)據(jù)事務(wù)處理的示例代碼。最后,演示了在不同MCU(ADuCM4050、MAX32660)中使用相同驅(qū)動程序時(shí)ADC的吞吐率。

  

 

1. 狀態(tài)監(jiān)控

 

  通用SPI驅(qū)動程序簡介

  通常,MCU廠商會在例程代碼中提供通用的SPI驅(qū)動程序/API。通用SPI驅(qū)動程序/API通常可以涵蓋大多數(shù)用戶的應(yīng)用,這些代碼可能包含許多配置或判斷語句。但在某些特定情況下,比如ADC數(shù)據(jù)采集,通用的SPI驅(qū)動程序可能無法滿足ADC數(shù)據(jù)的全速的吞吐速率需求,因?yàn)橥ㄓ玫尿?qū)動程序中有過多的配置,而未使用的配置會產(chǎn)生額外的開銷并導(dǎo)致時(shí)間延遲。

  

 

2. 通用API的配置

 

  設(shè)計(jì)思路與實(shí)踐框架

  通常會選擇低功耗高性能的MCU作為主機(jī)通過SPI提取ADC的輸出數(shù)據(jù)。但是,由于ADI的SPI驅(qū)動程序的數(shù)據(jù)事務(wù)處理命令存在冗余,因此數(shù)據(jù)輸出速率可能被顯著降低。為了充分釋放ADC的潛在速率,使用ADuCM4050和AD7768-1進(jìn)行實(shí)驗(yàn)并嘗試可能的解決方案。盡管在使用默認(rèn)濾波器的情況下,ADuCM4050的最大數(shù)據(jù)輸出速率可達(dá)256 kHz,但在當(dāng)前情況下,其速率被限制在8 kHz。提高輸出速率的潛在解決方案包括刪除不必要的命令以及激活DMA控制器。將在以下小節(jié)中介紹這些思路。

  

 

3. 不同ODR以及DRDY與SCLK之間的關(guān)系

 

  以MCU作為主機(jī)

ADuCM4050 MCU是一款主時(shí)鐘速率為26 MHz的超低功耗微控制器,內(nèi)核為ARM® Cortex®-M4F處理器。ADuCM4050配有三個SPI,每個SPI都有兩個DMA通道(接收和發(fā)射通道)可與DMA控制器連接。DMA控制器和DMA通道可實(shí)現(xiàn)存儲器與外設(shè)之間的數(shù)據(jù)傳輸。這是一種高效的數(shù)據(jù)分配方法,可將內(nèi)核釋放以處理其他任務(wù)。

 

 以ADC作為從機(jī)

  AD7768-1是一款24位低功耗、高性能的Σ-Δ ADC。其數(shù)據(jù)輸出速率 (ODR)和功耗模式均可根據(jù)用戶的要求進(jìn)行配置。ODR由抽取系數(shù)和功耗模式共同決定,如表1中所示。

  表1. 數(shù)據(jù)輸出速率的功耗模式配置

  

 


  AD7768-1的連續(xù)讀取模式也是該產(chǎn)品的一個重要特性。ADC的輸出數(shù)據(jù)存儲在寄存器0x6C中。一般而言,每次讀/寫操作之前,ADC寄存器中的數(shù)據(jù)都需要地址才可以訪問,但是連續(xù)讀取模式則支持在收到每個數(shù)據(jù)就緒信號后直接從0x6C寄存器提取數(shù)據(jù)。ADC的輸出數(shù)據(jù)為24位的數(shù)字信號,對應(yīng)的電壓如表2 所示。

  表2. 數(shù)字輸出碼和模擬輸入電壓

  

 

引腳連接示意圖


  ADuCM4050和AD7768-1組成的數(shù)據(jù)事務(wù)處理示例模型的引腳連接如圖4所示。

  

 

4. AD7768-1和ADuCM4050的接口引腳連接

 

ADC的復(fù)位信號引腳RST_1連接至MCU的GPIO28,而數(shù)據(jù)就緒信號引腳DRDY_1則連接至MCU的GPIO27。其余引腳則根據(jù)通用的SPI配置標(biāo)準(zhǔn)進(jìn)行連接,其中MCU為主機(jī),而ADC為從機(jī)。SDI_1接收MCU發(fā)送的ADC寄存器讀/寫命令,而DOUT_1則將ADC的輸出數(shù)據(jù)發(fā)送至MCU。

 

  數(shù)據(jù)事務(wù)處理的實(shí)現(xiàn)

  中斷數(shù)據(jù)事務(wù)處理

  為實(shí)現(xiàn)連續(xù)數(shù)據(jù)事務(wù)處理,將MCU的GPIO27引腳(連接至ADC 的DRDY_1引腳)用作中斷觸發(fā)引腳。ADC將數(shù)據(jù)就緒信號發(fā)送至 GPIO27時(shí)會觸發(fā)MCU包含數(shù)據(jù)事務(wù)處理命令的中斷回調(diào)函數(shù)。如圖5所示,數(shù)據(jù)采集必須在中斷A和中斷B之間的時(shí)間間隔內(nèi)進(jìn)行。

  

 

5. 兩次中斷的時(shí)間間隔

 

利用ADI的SPI驅(qū)動程序可以在ADC和MCU之間輕松實(shí)現(xiàn)數(shù)據(jù)事務(wù)處理。但是,由于驅(qū)動程序內(nèi)存在冗余命令,ADC的ODR會被限制在8 kHz。盡可能地精簡了代碼以加快ODR,將介紹實(shí)現(xiàn)DMA 數(shù)據(jù)事務(wù)處理的兩種方法:基本模式的DMA事務(wù)處理和乒乓模式 的DMA事務(wù)處理。

 

 基本模式的DMA事務(wù)處理

  在實(shí)現(xiàn)每個DMA事務(wù)處理之前需要對SPI和DMA進(jìn)行配置(參見圖6 中的示例代碼)。SPI_CTL為SPI配置,其值為0x280f,源于ADI的SPI 驅(qū)動程序的設(shè)定值。SPI_CNT為傳輸字節(jié)數(shù)。由于每個DMA事務(wù)處理只能發(fā)送固定的16位數(shù)據(jù),因此SPI_CNT必須是2的倍數(shù)。本例設(shè)置SPI_CNT為4,以滿足ADC的24位的輸出數(shù)據(jù)要求。SPI_DMA寄存器為SPI的DMA使能寄存器,設(shè)定其值為0x5以使能DMA接收請求。命令pADI_DMA0->EN_SET=(1<<5)使能第五個通道的DMA,即SPI0 RX。

  

 

6. 基本DMA事務(wù)處理模式的代碼

 

  每個DMA通道都有一個DMA結(jié)構(gòu)寄存器,如表3中所示。需要指出的是,這里的數(shù)據(jù)來源地址的結(jié)尾(即SPI0 Rx,亦即來源端指針SRC_END_PTR)在整個操作期間無需增加,因?yàn)镽x FIFO會自動 將寄存器中的數(shù)據(jù)推送出去。另一方面,數(shù)據(jù)目標(biāo)地址的結(jié)尾(即目標(biāo)端指針DST_END_PTR)根據(jù)ADI的SPI驅(qū)動程序的使用函數(shù)計(jì)算得出,即目標(biāo)地址+ SPI_CNT -2。

  表3. DMA結(jié)構(gòu)寄存器

  


 

  當(dāng)前地址為內(nèi)部數(shù)組緩沖區(qū)的地址。DMA控制數(shù)據(jù)配置CHNL_CFG 包括來源數(shù)據(jù)大小、來源地址增量、目標(biāo)地址增量、剩余傳輸次數(shù)和DMA控制模式等設(shè)置,其值0x4D000011按照表4中所述的設(shè)置配置。

  表4. 控制數(shù)據(jù)配置0x4D00011的DMA配置

  


  SCLK時(shí)鐘通過偽讀取命令SPI_SPI0 -> RX啟動,輸出數(shù)據(jù)通過MISO 從ADC傳至MCU。MOSI上其它的數(shù)據(jù)傳輸可以忽略不計(jì)。一旦完成 Rx的FIFO填充,DMA請求就會生成從而激活DMA控制器,以將數(shù)據(jù)從 DMA來源地址(即SPI0 Rx FIFO)傳輸至DMA目標(biāo)地址(即內(nèi)部數(shù)組的緩沖區(qū))。值得注意的是,SPI_DMA=0x3時(shí)會生成Tc請求。

  最后,通過將當(dāng)前目標(biāo)地址加4的方式將目標(biāo)地址用于下一個4 字節(jié)的傳輸。

  請注意,SPI0 DMA通道的pADI_DMA0->DSTADDR_CLR和pADI_ DMA0->RMSK_CLR必須在首次中斷觸發(fā)之前在主函數(shù)中設(shè)置。前一個為DMA通道目標(biāo)地址減量使能清零寄存器,用于在增量模式下設(shè)置每次DMA傳輸后的目標(biāo)地址移位(目標(biāo)地址計(jì)算函數(shù)僅在增量模式下有效)。后一個為DMA通道請求屏蔽清零寄存器,用于將通道的DMA請求狀態(tài)清零。

  基本模式的DMA事務(wù)處理時(shí)間圖如圖7a所示。圖中三個時(shí)隙分別代表DRDY信號、SPI/DMA設(shè)置和DMA數(shù)據(jù)事務(wù)處理。在該模式中,CPU的空閑時(shí)間較多,因此希望DMA控制器在處理數(shù)據(jù)傳輸時(shí)能將任務(wù)分配給CPU。

  

 

7. (a)基本模式DMA和(b)乒乓模式的時(shí)間圖

 

  乒乓模式的DMA事務(wù)處理

在執(zhí)行偽讀取命令后,DMA控制器會開始數(shù)據(jù)事務(wù)處理,從而使得MCU的CPU處于空閑狀態(tài)而不處理任何任務(wù)。如果能夠讓CPU和 DMA控制器同時(shí)工作,那么任務(wù)處理就從串行模式轉(zhuǎn)變?yōu)椴⑿心J健_@樣,就可以同時(shí)進(jìn)行DMA配置(通過CPU)以及DMA數(shù)據(jù)事務(wù)處理(通過DMA控制器)。為實(shí)現(xiàn)這一思路,需要設(shè)置DMA控制器處于乒乓模式。乒乓模式將兩組DMA結(jié)構(gòu)進(jìn)行了整合:主結(jié)構(gòu)和備用結(jié)構(gòu)。每次DMA請求時(shí),DMA控制器會在兩組結(jié)構(gòu)之間自動切換。變量p的初始設(shè)置為0,其值表示是主DMA結(jié)構(gòu)(p = 0) 還是備用DMA結(jié)構(gòu)(p = 1)負(fù)責(zé)數(shù)據(jù)事務(wù)處理。如果p = 0,則在收到偽讀取命令時(shí)啟動主DMA結(jié)構(gòu)進(jìn)行數(shù)據(jù)事務(wù)處理,同時(shí)會為備用DMA結(jié)構(gòu)分配值,使其在下一個中斷周期內(nèi)負(fù)責(zé)數(shù)據(jù)事務(wù)處理。如果p = 1,則主結(jié)構(gòu)和備用結(jié)構(gòu)的作用互換。當(dāng)僅有主結(jié)構(gòu)處于基本DMA模式時(shí),在DMA事務(wù)處理期間對DMA結(jié)構(gòu)的修改會失敗。乒乓模式使得CPU能夠訪問和寫入備用DMA結(jié)構(gòu),而DMA控制器可以讀取主結(jié)構(gòu),反之亦然。如圖7b所示,由于DMA的結(jié)構(gòu)配置是在最后一個周期內(nèi)完成的,因此在DRDY信號從ADC傳送至 MCU后DMA數(shù)據(jù)事務(wù)處理可以被立即執(zhí)行,使得CPU和DMA同時(shí)工作而無需等待?,F(xiàn)在,ADC的ODR得到了提升空間,因?yàn)榭偟墓ぷ鲿r(shí)間已大大縮短。

 

  中斷處理程序的優(yōu)化

  兩次DRDY信號之間的時(shí)間間隔不僅包括了中斷回調(diào)函數(shù)的命令執(zhí)行時(shí)間,還包括了ADI的GPIO中斷處理函數(shù)的命令執(zhí)行時(shí)間。

  當(dāng)MCU啟動時(shí),CPU會運(yùn)行啟動文件(即startup.s)。所有事件的處理函數(shù)均在該文件中定義,包括GPIO中斷處理函數(shù)。一旦觸發(fā)GPIO中斷,CPU就會執(zhí)行中斷處理函數(shù)(即ADI的GPIO驅(qū)動程序中的GPIO_A_INT_HANDLER和GPIO_B_INT_HANDLER)。通用的中斷處理函數(shù)會在所有的GPIO引腳中搜索觸發(fā)中斷的引腳并清零其中斷狀態(tài)、運(yùn)行回調(diào)函數(shù)。由于DRDY是應(yīng)用的唯一中斷信號,因此可以對函數(shù)進(jìn)行簡化以加快進(jìn)程??蛇x的解決方案包括 (1)在啟動文件中重新定位目標(biāo),以及(2)修改原始的中斷處理函數(shù)。重新定位目標(biāo)意味著自定義中斷處理函數(shù),并替換啟動文件中的原始的中斷處理函數(shù)。

  而修改原始的中斷處理函數(shù)只需要添加一個自定義的GPIO驅(qū)動程序。采用第二種方案修改原始的中斷處理函數(shù),如圖8所示。該方案只將連接至DRDY的GPIO的引腳中斷狀態(tài)清零,并直接轉(zhuǎn)到回調(diào)函數(shù)。請注意,這里需要通過取消選擇build target中關(guān)于原始GPIO驅(qū)動函數(shù)的勾選框內(nèi)容來隔離原始的GPIO驅(qū)動程序。

  

 

8. 嵌套矢量中斷控制器(NVIC)


  速率性能

  假定現(xiàn)在需要讀取200個24位的ADC輸出數(shù)據(jù),并且SPI位速率設(shè)置為13 MHz。將DRDY信號和SCLK信號的引腳連接至示波器,可以通過觀察DRDY信號與SPI數(shù)據(jù)事務(wù)處理(亦即DMA事務(wù)處理)啟動之間的時(shí)間間隔的方法可以量化所述的每種方法對速率的改善程度。這里將DRDY信號至SCLK信號開始的時(shí)間間隔記為?t,那么對于13 MHz的SPI速率,測量得出的?t為:

  (a)基本模式DMA Δt = 3.754 μs

  (b)乒乓模式DMA Δt = 2.8433 μs

  (c)乒乓模式DMA(使用優(yōu)化的中斷處理函數(shù))Δt = 1.694 μs


  方法(a)和(b)可支持64 kHz的ODR,而方法(c)可支持128 kHz的ODR。這是因?yàn)榉椒?c)的?t最短,從而使得SCLK信號能夠更早結(jié)束。如果 SCLK信號(即數(shù)據(jù)事務(wù)處理)能在T/2之前完成(T為當(dāng)前ADC的數(shù)據(jù)輸出周期),則ODR可實(shí)現(xiàn)翻倍。這較之于原始的ADISPI驅(qū)動程序可以達(dá)到的8 kHz的ODR性能是一次巨大的進(jìn)步。

  

 

9. (a)基本模式DMA、(b)乒乓模式以及(c)乒乓模式(使用優(yōu)化的中斷處理函數(shù))的Δt

 

  使用MAX32660控制AD7768-1

  使用主時(shí)鐘速率為96 MHz的MCU MAX32660控制AD7768-1)時(shí)的結(jié)果如何?在該情況下,使用優(yōu)化的中斷處理函數(shù)的中斷設(shè)置,可在不使用DMA函數(shù)的情況下實(shí)現(xiàn)256 kHz的數(shù)據(jù)輸出速率。參見圖10。

  

 

10. 不使用DMA時(shí)MAX32660的ODR


  利用選定的ADC(AD7768-1)和MCU(ADuCM4050或MAX32660)通過 SPI實(shí)現(xiàn)了高速的數(shù)據(jù)事務(wù)處理。為實(shí)現(xiàn)速率優(yōu)化的目標(biāo),簡化了ADI的SPI驅(qū)動程序執(zhí)行數(shù)據(jù)事務(wù)處理。此外提出,激活DMA控制器釋放內(nèi)核也可以加快連續(xù)數(shù)據(jù)事務(wù)處理的流程。在 DMA的乒乓模式下,DMA的配置時(shí)間可通過適當(dāng)?shù)恼{(diào)度來節(jié)省。在此基礎(chǔ)上,還可以通過直接指定中斷引腳的方式優(yōu)化中斷處理函數(shù)。在13 MHz的SPI位速率下,提出的方案的最佳性能可達(dá)到128 kSPS的ADC ODR。

  表5. 使用ADuCM405和MAX32660實(shí)現(xiàn)的高速SPI連接

  

 

 

  • ADI亞德諾精密數(shù)模轉(zhuǎn)換器系列入門
  • 精密數(shù)模轉(zhuǎn)換器(DAC)是高性能信號處理系統(tǒng)的關(guān)鍵數(shù)據(jù)轉(zhuǎn)換組件,這些DAC被用于多個細(xì)分市場和應(yīng)用。例如,通信行業(yè)的無線與有線應(yīng)用,工業(yè)市場從80系統(tǒng)到大型工業(yè)控制器,醫(yī)療系統(tǒng)中的患者監(jiān)測或成像系統(tǒng)等。
    2023-10-31 538次
  • 無需更換/拆除設(shè)備,智能帶入邊緣IO-Link技術(shù)?
  • 傳感器信號傳輸存在數(shù)據(jù)隔離的瓶頸?手動改傳感器配置就可能導(dǎo)致產(chǎn)線停產(chǎn)?....這些傳統(tǒng)工業(yè)自動化的痛點(diǎn)在產(chǎn)業(yè)轉(zhuǎn)型不斷深化的今天來看異常顯著。為了克服此類挑戰(zhàn),IO-Link技術(shù)應(yīng)運(yùn)而生,它的出現(xiàn)為傳感器和執(zhí)行器提供高速、雙向的數(shù)字?jǐn)?shù)據(jù)通信,給工廠車間帶來優(yōu)秀的靈活性和可配置性,也將智能帶入了邊緣。
    2023-08-02 611次
  • 基于簡單降壓控制器精密雙極性電源
  • 用于生成電源的最常用拓?fù)浣Y(jié)構(gòu)是降壓轉(zhuǎn)換器。但是,這種拓?fù)浣Y(jié)構(gòu)僅限于從高于輸出的輸入電壓產(chǎn)生正輸出。當(dāng)輸入電壓低于輸出電壓時(shí),不能直接利用它來產(chǎn)生負(fù)電壓或提供穩(wěn)定的輸出。產(chǎn)生輸出的這兩個方面在汽車電子中均很重要,因?yàn)樾枰?fù)電壓來為放大器供電,或者當(dāng)輸入電壓軌顯著降低時(shí),在冷起動的情況下整個系統(tǒng)必須連續(xù)正常工作。今天我們詳細(xì)介紹在SEPIC、Cuk和升壓轉(zhuǎn)換器中使用簡單降壓控制器的方法。
    2023-07-18 511次
  • 如何選擇基準(zhǔn)電壓源
  • 基準(zhǔn)電壓源只是一個電路或電路元件,只要電路需要,它就能提供已知電位。這可能是幾分鐘、幾小時(shí)或幾年。如果產(chǎn)品需要采集真實(shí)世界的相關(guān)信息,例如電池電壓或電流、功耗、信號大小或特性、故障識別等,那么必須將相關(guān)信號與一個標(biāo)準(zhǔn)進(jìn)行比較。每個比較器、ADC、DAC或檢測電路必須有一個基準(zhǔn)電壓源才能完成上述工作(圖1)。將目標(biāo)信號與已知值進(jìn)行比較,可以準(zhǔn)確量化任何信號。
    2023-07-17 526次
  • 小尺寸高性能電源管理IC延長續(xù)航
  • 小尺寸高性能電源管理IC,長續(xù)航關(guān)鍵所在。以TWS耳機(jī)、可穿戴設(shè)備手表為例,消費(fèi)類產(chǎn)品在保持輕巧造型設(shè)計(jì)的前提下,迫使電子電路需要在極小的尺寸以內(nèi),這也推動了包括電源管理IC在內(nèi)的半導(dǎo)體解決方案的集成化趨勢,功率器件的占板面積和封裝應(yīng)做到盡可能小,高轉(zhuǎn)換效率也是一個關(guān)鍵的設(shè)計(jì)要素。
    2023-07-04 491次

    萬聯(lián)芯微信公眾號

    元器件現(xiàn)貨+BOM配單+PCBA制造平臺
    關(guān)注公眾號,優(yōu)惠活動早知道!
    10s
    溫馨提示:
    訂單商品問題請移至我的售后服務(wù)提交售后申請,其他需投訴問題可移至我的投訴提交,我們將在第一時(shí)間給您答復(fù)
    返回頂部