新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 走對這幾步 讓 I2S 收發(fā)器跑起來!

走對這幾步 讓 I2S 收發(fā)器跑起來!

作者: 時(shí)間:2024-08-28 來源:ADI 收藏

文章 概述

本文引用地址:http://2s4d.com/article/202408/462424.htm

本文介紹了收發(fā)器的配置與實(shí)現(xiàn),用于FPGA的VHDL編程。是數(shù)字音頻的標(biāo)準(zhǔn)化串行通信總線,由SCK、WS和SD三條線路組成。文章闡述了收發(fā)器的工作原理,包括數(shù)據(jù)傳輸方式、操作理論、配置方法、端口描述以及音頻數(shù)據(jù)事務(wù)傳輸。


本文詳細(xì)介紹了一個(gè)主 I2S 收發(fā)器組件用于 FPGA,以 VHDL 編寫。 組件通過 I2S 接口接收音頻數(shù)據(jù),并將接收到的數(shù)據(jù)在某一采樣率上傳送給并行接口上的用戶邏輯芯片。 它還在某一采樣率上從用戶邏輯芯片上接收并行數(shù)據(jù),并通過 I2S 接口將這些數(shù)據(jù)傳輸出去。 圖1說明了將 I2S 收發(fā)器集成到系統(tǒng)中的一個(gè)典型示例。
圖 示例實(shí)現(xiàn)

背景

I2S (也稱為 IIS) 是用于數(shù)字音頻的標(biāo)準(zhǔn)化串行通信總線。該總線由串行時(shí)鐘 (SCK)、字段選擇信號 (WS)和串行數(shù)據(jù) (SD) 3條線路組成。圖2顯示了 I2S 通信鏈路的數(shù)據(jù)幀。

圖 2. I2S 數(shù)據(jù)幀串行數(shù)據(jù)線傳輸兩個(gè)時(shí)間復(fù)用的數(shù)據(jù)通道——左信道和右信道。數(shù)據(jù)首先以2’s 二進(jìn)制補(bǔ)碼形式傳輸最高有效位(MSB)。字段選擇信號 (WS)表示當(dāng)前正在傳輸?shù)穆暤?低=左聲道,高=右聲道)。該通道數(shù)據(jù)字段的MSB在字段選擇信號 (WS)切換后傳輸一個(gè)時(shí)鐘周期,然后是數(shù)字節(jié)的其余部分。數(shù)據(jù)位在下降時(shí)鐘沿上傳輸,在上升時(shí)鐘沿上讀取。I2S發(fā)送器或I2S接收器都可以充當(dāng)主機(jī)(master)。主機(jī)提供串行時(shí)鐘和字段選擇信號。音頻編解碼器通常也需要一個(gè)“主時(shí)鐘”(MCLK) 來運(yùn)行其內(nèi)部電路。MCLK 頻率通常是采樣率的倍數(shù),例如 256*Fs (其中 Fs 是采樣率)。要求取決于具體的音頻編解碼器。

操作理論這個(gè)I2S 收發(fā)器輸入一個(gè)主時(shí)鐘,并通過計(jì)數(shù)器從它得到串行時(shí)鐘和字段選擇信號。串行時(shí)鐘頻率是主時(shí)鐘的整數(shù)倍,字段選擇頻率(即采樣率)是串行時(shí)鐘的整數(shù)倍。接收數(shù)據(jù)從串行時(shí)鐘上升沿上的 sd_rx 端口時(shí)鐘進(jìn)入內(nèi)部接收移位寄存器。在字段選擇切換后,為適當(dāng)?shù)耐ǖ绬⒂靡粋€(gè)串行時(shí)鐘周期的移位,并繼續(xù)保持?jǐn)?shù)據(jù)字段的寬度,然后再次禁用。在每個(gè)字段選擇開關(guān)上,收發(fā)器分別在 r_data_rx 和 l_data_rx 端口上呈現(xiàn)右聲道和左聲道的接收數(shù)據(jù)。相反,在 r_data_tx 和 l_data_tx 輸入端口上呈現(xiàn)的左右數(shù)據(jù)在每個(gè)字段選擇開關(guān)上并行加載到內(nèi)部傳輸移位寄存器中。這些數(shù)據(jù)在串行時(shí)鐘下降沿上的 sd_tx 端口被時(shí)鐘輸出。在字段選擇切換后,為適當(dāng)?shù)耐ǖ绬⒂靡粋€(gè)串行時(shí)鐘周期的移位,并在數(shù)據(jù)字段的寬度之外繼續(xù)一個(gè)串行時(shí)鐘,然后再次禁用。根據(jù) I2S 總線規(guī)范,額外的傳輸位將 sd_tx 數(shù)據(jù)線設(shè)置為’ 0 ',以防數(shù)據(jù)寬度與接收 I2S 設(shè)備不匹配。

配置I2S 收發(fā)器

I2S 收發(fā)器通過在 ENTITY 中設(shè)置通用參數(shù)進(jìn)行配置。

sclk_ws_ratio

字段選擇 (ws) 信號的頻率是采樣率。 sclk_ws_ratio 參數(shù)定義了每個(gè)字段選擇周期的串行時(shí)鐘*(sclk)* 周期數(shù)。

mclk_sclk_ratio

mclk_sclk_ratio 參數(shù)定義了每個(gè)串行時(shí)鐘*(sclk)* 周期的主時(shí)鐘 (mclk) 周期數(shù)。

d_width

參數(shù) d_width 以位為單位定義每個(gè)數(shù)據(jù)字段的大小。這并不需要等于一個(gè)字段選擇半周期內(nèi)串行時(shí)鐘周期的數(shù)量(即在信道數(shù)據(jù)傳輸期間串行時(shí)鐘的數(shù)量)。如果在字段選擇半周期內(nèi)有多余的時(shí)鐘周期,那么在額外的串行時(shí)鐘周期內(nèi)串行數(shù)據(jù)接收端口 (sd_rx) 上的任何數(shù)據(jù)都將被忽略,并且串行數(shù)據(jù)傳輸端口 (sd_tx) 為這些額外的位輸出 ’ 0 '。

提供主時(shí)鐘 (Master Clock)

I2S 收發(fā)器需要一個(gè)主時(shí)鐘 時(shí)鐘輸入 來操作。該時(shí)鐘是發(fā)送到 I2S 收發(fā)器正在通信的 I2S 從設(shè)備的同一主時(shí)鐘信號。

通常,期望的采樣率 (Fs) 是已知的,I2S 設(shè)備需要一個(gè)該采樣率的若干倍的主時(shí)鐘。例如,假設(shè)期望的采樣率是常用的 44.1 kHz,并且 I2S 設(shè)備接受 256*Fs 的主時(shí)鐘。這意味著用戶需要為 I2S 設(shè)備和 I2S 收發(fā)器提供11.29 MHz的 mclk 。mclk 信號可以在 FPGA 內(nèi)部使用鎖相環(huán)導(dǎo)出。

端口的描述

I2S收發(fā)器接口說明如表1所示。

表 端口的描述

音頻數(shù)據(jù)事務(wù)傳輸

I2S 收發(fā)器使 l_data_rx 和 r_data_rx 端口上的用戶邏輯可以使用接收到的數(shù)據(jù)。這兩個(gè)接收數(shù)據(jù)端口在每次 ws 轉(zhuǎn)換時(shí)都會更新。由于新的左聲道數(shù)據(jù)僅在 ws = ’ 0 '時(shí)接收,因此 l_data_rx 端口與 ws 的上升沿同時(shí)獲得新值,即當(dāng)左聲道數(shù)據(jù)字段完成時(shí)。同樣,新的右聲道數(shù)據(jù)僅在 ws = " 1 " 時(shí)接收,因此 r_data_rx 端口與 ws 的下降沿并發(fā)獲得新值,即當(dāng)右聲道數(shù)據(jù)字段完成時(shí)。用戶邏輯可以使用 ws 信號來指示新數(shù)據(jù)可用,從而以采樣率檢索該數(shù)據(jù)。圖3 說明了這種行為。

類似地,I2S 收發(fā)器在每個(gè) ws 轉(zhuǎn)換的 l_data_tx 和 r_data_tx 端口上鎖存新的傳輸數(shù)據(jù)。用戶邏輯可以使用 ws 信號來指示何時(shí)將其輸出數(shù)據(jù)鎖存,因此可以自由地在這些端口上呈現(xiàn)下一組傳輸數(shù)據(jù)。鎖存在 ws 下降沿上的 l_data_tx 值在左聲道數(shù)據(jù)字段傳輸期間在 sd_tx 上傳輸。同樣,鎖存在 ws 上升沿上的 r_data_tx 值在右聲道數(shù)據(jù)字段傳輸期間在 sd_tx 上傳輸。圖3 顯示了這種行為。圖 3. 時(shí)間圖

重置(Reset)

reset_n 輸入端口必須具有邏輯高,I2S 收發(fā)器才能正常工作。該端口上的低信號將異步復(fù)位組件。復(fù)位期間,組件保持 sclk 、 ws 和 sd_tx 端口為低電平。任何當(dāng)前正在進(jìn)行的傳輸都將停止。任何當(dāng)前正在進(jìn)行的接收被放棄, l_data_rx 和 r_data_rx 輸出端口清空。清除所有內(nèi)部數(shù)據(jù)緩沖區(qū)。一旦解除復(fù)位,I2S 收發(fā)器恢復(fù)工作。

結(jié)論

I2S 收發(fā)器是一種可配置的可編程邏輯組件,通過標(biāo)準(zhǔn) I2S 總線傳輸和接收音頻數(shù)據(jù)。它作為主控器工作,為接口提供串行時(shí)鐘和選字信號。它允許用戶為特定的采樣頻率、數(shù)據(jù)寬度、主時(shí)鐘和每字串行時(shí)鐘周期數(shù)進(jìn)行配置。



關(guān)鍵詞: ADI I2S

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉