i.MX RT600之DMIC外設介紹及應用

恩智浦的i.MX RT600是跨界處理器產品,一樣也是i.MX RTxxx系列的開山之做。不一樣於i.MX RT1xxx系列單片機,i.MX RT600 採用了雙核架構,將新一代Cortex-M33內核與高性能Cadence Tensilica HiFi 4 音頻DSP內核相結合,適用於32位沉浸式音頻播放和視頻用戶界面應用。i.MX RT600旨在經過安全、功率優化的嵌入式處理器充分挖掘語音輔助終端節點的潛力,所以針對音頻數據的採集、傳輸和處理,i.MX RT600都有豐富的硬件資源進行支持。其中,針對RT600的DMIC外設,本文詳細地進行了介紹,並基於i.MX RT600 EVK開發板,在RT600的DSP端(HiFi4)實現了一個8通道音頻數據採集的demo。html

1、DMIC介紹

1.1 DMIC 接口

DMIC接口也稱雙/立體聲數字麥克風接口。i.MX RT600提供了最多8通道的PDM(脈衝密度調製)數字接口,共8根引腳,其中4根時鐘引腳爲PDM接口的數字麥克風提供時鐘參考,4根數字引腳可以從PDM接口的數字麥克風上採集數據。每一個PDM接口都支持兩個單通道麥克風或單個立體聲麥克風的鏈接選項,下圖給出了本次應用中採用的8通道DMIC多路複用鏈接方式做爲參考。安全

avatar

1.2 RT600 DMIC硬件架構

i.MX RT600總共包含8個DMIC通道,能夠從多路的數字麥克風設備採集PDM數據,通過內部一系列處理後,就能夠獲得16bits或24bits的PCM數據,並支持CPU或DMA直接訪問。每一個DMIC通道的內部框圖以下所示。架構

avatar

從DMIC內部通道的框圖能夠看出,PDM數據到PCM轉換的濾波過程包括四個階段。post

第一階段,從CIC濾波器開始,它是結合了抽取器的FIR濾波器。 CIC濾波器以給定的過採樣率未來自數字麥克風的PDM數據轉換爲PCM數據,該採樣率能夠被OSR寄存器配置。性能

第二階段,PCM數據由半帶抽取濾波器處理後頻率降爲原來的一半,同時通過這一階段後,補償了音頻帶上限的滾降。flex

第三階段,同第二階段同樣,PCM數據通過一個半帶抽取濾波器處理,頻率降爲原來的一半。優化

第四階段,DC濾波器用於消除了音頻信號中任何不須要的直流份量。3d

另外,爲了實現更低的功耗,將Use 2FS register寄存器中的USE2FS位置1能夠繞過第二個半帶抽取濾波器,併爲DC濾波器提供2FS而不是1FS信號。當經過CPU或DMA從FIFO中讀取PCM數據時,其位寬能夠是16bit和24bit,這能夠經過配置DCCTRL寄存器的SATURATEAT16BITSIGNEXTEND位來控制。code

1.3 DMIC時鐘和採樣頻率計算

DMIC採樣頻率取決於三個方面:
1)DMIC接口基礎時鐘。
DMIC接口的基礎時鐘爲整個DMIC外設提供一個參考時鐘,能夠經過寄存器CLKCTL1 DMIC0CLKSEL和寄存器DMIC0CLKDIV進行配置。 DMIC外設的可選時鐘源以下圖所示,包括SFRO,FFRO,audio_pll_clk, mclk_in,1m_lposc和32k_wake_clk。視頻

avatar

2)提供給數字麥克風設備的DMIC採樣時鐘。
這裏的DMIC採樣時鐘用於提供給鏈接在DMIC外設上的數字麥克風設備一個PDM基準採樣頻率。固然這個頻率的範圍是有限制的,最高不超過6.144MHz,這就致使DMIC的基礎時鐘的頻率不該超過24.576MHz。
3)PCM採樣頻率。
由上面的DMIC通道內部框圖可知,從DMIC採集獲得PDM數據,再通過一些列濾波器處理後,最終獲得的PCM數據的頻率是下降的。它們之間的關係以下:
PCM採樣頻率= DMIC採樣時鐘頻率 /(N * OSR),其中2 FS模式時,N = 2; 1 FS模式,N = 1)

以本文介紹的demo配置爲例,DMIC採樣時鐘頻率配置爲3.072MHz,DMIC通道配置爲2 FS模式(N=2),OSR設置爲32,那麼能夠獲得:

PCM採樣頻率 = DMIC採樣時鐘頻率 / (N * OSR) = 3.072MHz / (2 * 32) = 48KHz

該頻率正是本次應用中DMIC外設獲得的PCM數據的採樣頻率。

1.4 FIFO和DMA支持

DMIC FIFO中PCM數據的有效寬度能夠是16位或24位,DMIC提供了兩種訪問FIFO數據的方式:CPU或DMA直接訪問。經過配置FIFO的觸發級別,選擇中斷或DMA的方式,就能夠將PCM數據從FIFO複製到SRAM。下圖顯示了經過DMA複製DMIC FIFO數據的過程。

avatar

2、應用

2.1 系統架構

在此應用中,8通道DMIC音頻數據採集的整個架構如圖所示。HiFi4控制8通道DMIC接口從DMIC音頻板接收PDM數據,CS42888編解碼器經過I2S接口接收HIFI4處理事後的PCM數據,並將其傳輸到揚聲器進行實時播放。

2.2 CS42888 Codec介紹

CS42888是高度集成的24位音頻編解碼器,包含具有delta-sigma技術的4個模數轉換器(ADC)和8個數模轉換器(DAC),8個DAC通道均提供數字音量控制,並可使用差分或單端輸出進行操做。 CS42888的DAC串行端口支持I2S TDM音頻數字接口格式,位深度從16到24不等,並容許時分複用(TDM)接口格式的DAC通道多達8個。CS42888支持的TDM時序圖如圖7所示。

avatar

在DAC_LRCK上升沿以後的第二個DAC_SCLK上升沿,首先接收TDM數據的最高有效位(MSB)。 全部數據在DAC_SCLK的上升沿有效,在DAC_SCLK的降低沿發送。從圖中能夠注意到, CS42888在TDM模式下要求每一通道的PCM數據佔32個時鐘週期,也就是32bit的位寬,而且DAC_SCLK必須是PCM數據採樣頻率的8倍。所以在配置I2S的時候須要聽從這幾個注意事項。

2.3 DMIC配置

DMIC的採樣頻率與1.3小節中的舉例一致,併爲了獲得48kHz的PCM採樣頻率,須要進行以下配置:

  • DMIC時鐘源:audio_pll_clk
  • DMIC外圍輸入時鐘:24.576MHz
  • DMIC時鐘分頻器:8
  • DMIC時鐘頻率:3.072MHz
  • OSR寄存器:32
  • FS模式:2FS
  • DMIC採樣位寬:16bit

所以,DMIC PCM採樣率 = DMIC採樣時鐘頻率 / (N * OSR) = 3.072MHz / 2 / 32 = 48kHz

如下代碼給出了每一路DMIC通道的具體配置:

/* dmic channel configurations */
static dmic_channel_config_t s_dmicChannelConfig = {
    .divhfclk            = kDMIC_PdmDiv1,
    .osr                 = 32U,
    .gainshft            = 3U,
    .preac2coef          = kDMIC_CompValueZero,
    .preac4coef          = kDMIC_CompValueZero,
    .dc_cut_level        = kDMIC_DcCut155,
    .post_dc_gain_reduce = 1U,
    .saturate16bit       = 1U,
    .sample_rate         = kDMIC_PhyFullSpeed,
    .enableSignExtend    = false,
};

2.4 Flexcomm配置

i.MXRT600上最多提供8個多功能Flexcomm接口。 在此應用程序中,Flexcomm2被配置爲I2C接口。CS42888提供了標準的I2C控制接口,並支持全部功能的軟件配置。所以,HiFi4利用I2C對CS42888進行初始化,配置爲TDM工做模式。CS42888做爲I2C從設備,讀寫命令的操做時序如圖所示。

avatar

Flexcomm4接口在本應用中配置爲I2S接口,用於傳輸DMIC採集的8通道PCM數據。DMIC採集的PCM數據的採樣頻率爲48kHz,I2S採樣頻率需保持一致。下面是I2S採樣頻率的配置參數:

  • I2S時鐘源:audio_pll_clk
  • I2S時鐘源頻率:24.576MHz
  • MCLK頻率:12.288MHz

  • I2S傳輸模式:TDM
  • I2S聲道數:8
  • I2S聲道位寬:32bit
  • I2S BCLK = WS * 聲道數 * 聲道位寬 = 48KHz * 8 * 32 = 12.288MHz
  • I2S_DIV (I2S分頻係數) = audio_pll_clk / BCLK = 24.576MHz / 12.288MHz = 2

2.5 DMA和中斷配置

在RT600上作音頻數據的處理推薦用DMA,從而減小對CPU資源的消耗。DMA在RT600上推薦的用法是CM33核使用DMA0,而HiFi4使用DMA1。此外,在HiFi4中使用DMA與在CM33端是有必定區別的,這個主要體如今如下幾點:

  • 須要在XOS或XTOS中註冊並啓用HiFi4中斷。
  • 在HiFi4中DMA操做的SRAM地址必須是non-cacheable。
  • 須要由使用INPUTMUX註冊HiFi4中斷。

這些註冊的中斷與HiFi4的鏈接關係以下表所示。表中除了提供所需的中斷選擇以外,還顯示了各個中斷的中斷優先級。L1中斷的優先級最低,而L3中斷的優先級最高。

如下代碼給出了HiFi4 DMA和中斷的具體配置:

#define XCHAL_EXTINT19_NUM      23  /* (intlevel 2) */
DMA_Init(DMA1);
/* XCHAL_EXTINT19_NUM, intlevel 2 */
INPUTMUX_AttachSignal(INPUTMUX, 18U, kINPUTMUX_Dmac1ToDspInterrupt); 
xos_register_interrupt_handler(XCHAL_EXTINT19_NUM,
                       (XosIntFunc *) DMA_IRQHandle, 
                     DMA1);
xos_interrupt_enable(XCHAL_EXTINT19_NUM);

2.6 音頻數據流的處理

爲了可以將8通道DMIC採集的音頻數據發送到CS42888音頻板並播放,根據CS42888數據手冊,咱們須要將CS42888配置成TDM模式。在TDM模式下,CS42888接收的PCM數據位寬必須是32bit,其有效數據範圍能夠是16位到24位。爲此,本應用中咱們須要軟件程序將DMIC採集到的16bit位寬的PCM數據處理爲32bit位寬,下面咱們就介紹該方法。

首先,DMIC採集到的每一通道的PCM數據都利用了ping-pang buffer的形式放在對應的緩衝區,而RT600的DMA支持了最多4通道DMIC的數據搬移。所以,採用DMA memory to memory的功能,咱們能夠把DMIC的4通道PCM數據搬到一個固定的緩衝區(假設爲BUFFER1),可是這個BUFFER1中4通道的PCM數據是有固定間隔的,間隔的大小爲48bit。有的小夥伴或許這裏有疑惑了,爲何間隔的大小是48bit,而不是32或16bit呢?咱們接下來慢慢分析。

正是因爲DMIC和DMA外設的限制,致使DMA一次只能搬運4通道16bit的PCM數據,假如BUFFER0沒有被操做的內存地址已經初始化爲0x00,那麼咱們就能夠把那些內存地址上爲0x00的地址與PCM數據拼湊成32bit的PCM數據,PCM數據的有效位依舊是16bit,知足CS42888的要求。PCM數據間隔大小爲48bit是針對16bit的PCM數據,那針對於32bit的PCM數據來講,這4通道的PCM數據在BUFFER1上的間隔就是32Bbit。

看到這裏相信讀者已經明白了8通道的PCM數據該怎麼處理了,沒錯,只須要另外再開啓1路DMA,仍是採用DMA memory to memory的功能,就能夠將另外DMIC的4通道PCM數據搬移到BUFFER1內存空間上那些間隔出來的32bit位寬的地址上。

整個DMIC採集的8通道PCM數據後續軟件過程以下圖所示。

接下來,HiFi4控制一路I2S將處理成TDM格式的PCM數據傳輸到CS42888編解碼器。爲了可以流暢地播放音頻流數據,與RT600之I2S外設介紹及應用中介紹的處理方法同樣,筆者採用了以下圖所示的方法。圖中,總共3個緩衝區用於處理PCM數據,這3個緩衝區構成一個閉環。每一個緩衝區爲1024字節,包含32幀PCM數據,每一幀包含8包32bit的PCM數據。 每當一個緩衝區中的PCM數據接收滿時,下一個緩衝區將當即開始接收,發送也同理。由於本次應用中須要處理的PCM數據有8路,數據量比較大,所以採用ring buffer的機制可以保證數據傳輸的穩定和可靠。

3、RT600 硬件演示平臺搭建

8通道DMIC音頻數據採集demo基於i.MX RT600 EVK RevE板子實現,整個硬件平臺包括3部分:DMIC音頻採集板,CS42888音頻板和i.MX RT600 EVK板,以下圖所示。

爲了演示該demo,須要注意如下幾點:

  1. DMIC音頻採集板與RT600 EVK板的J31鏈接。

  2. CS42888音頻板與RT600 EVK板進行鏈接,鏈接狀況如表所示:

    CS42888 audio board RT600 EVK board
    A4 PIN J26 PIN1 (GND)
    A5 PIN J27 PIN3 (BCLK)
    A6 PIN J27 PIN2 (WS)
    A8 PIN J27 PIN1 (TX)
    A9 PIN J29 PIN4 (3V3)
    A11 PIN J28 PIN1 (RESET)
    A13 PIN J29 PIN8 (5V)
    A16 PIN JS2 PIN1 (1V8)
    B5 PIN J28 PIN10 (SCL)
    B6 PIN J28 PIN9 (SDA)
    B12 PIN J27 PIN6 (MCLK)
  3. 音頻揚聲器插入CS42888音頻板的J11,J12,J13,J14,J15和J16端口。

  4. 對RT600 EVK板進行改動:

    • 去掉R379-A,R380-A,R384-A,R389-A,R390-A,R391-A,R392-A,R393-A這些電阻。
    • 用0歐姆電阻焊接R379-B,R380-B,R384-B,R389-B,R390-B,R391-B,R392-B,R393-B這些位置。

avatar

至此,RT600之DMIC外設介紹完畢。

相關文章
相關標籤/搜索