天天看點

I2S注意事項啟用I2S使用I2S注意事項I2S波形圖鎮樓

關于I2S,wikipedia上介紹的比較全面。這裡記錄一些容易出錯的點。

啟用I2S

以Linux/Android主機闆而言,I2S是ASoC中的CPU Platform驅動。一般情況下需要同時搭上Codec和Machine驅動才能夠啟用。啟用後會在/proc/asound/cards中檢視到多出一個聲霸卡。(如果硬體上I2S确實沒有連接配接Codec,那麼一般CPU廠家核心中會有

Plublic Machine

的Machine驅動來保證單獨的I2S也可以被使用起來)

以Allwinner H3的I2S0為例,由于闆子I2S0沒有連接配接Codec,需要按照以下配置啟用該I2S:

Device Drivers  --->
 <*> Sound card support  --->
  <*>   Advanced Linux Sound Architecture  --->
   <*>   ALSA for SoC audio support  ---> 
    ....
    <*>   SoC daudio0 tdm interface for SUNXI chips
    <*>   Daudio0 Public Machine for SUNXI chips
    ....
           

其中

SoC daudio0 tdm interface for SUNXI chips

為ASoC中的CPU Platform驅動,

Daudio0 Public Machine for SUNXI chips

為ASoC中的

Machine

+ 虛拟Codec驅動。

對于Allwinner的平台而言還要确定sys_config.fex中的相應配置有沒有選中,相應的GPIO有無占用。

這樣編譯燒寫系統後,

cat /proc/asound/cards

可以檢視到多了一個聲霸卡。

使用I2S

使用I2S就是按照普通聲霸卡的方式進行使用,比如Android下的tinyalsa都可以做簡單的播放錄制等等。

更多使用方法見:Android音頻底層調試-基于tinyalsa。

注意事項

I2S中的一般常用的bit有16 24 32,這些I2S輸出的CLK都是32個。播放16bit時,放到了前32bit的前16bit;播放32bit一般是剛好是32bit;而播放24bit時,需要把資料按照32bit傳遞給裝置節點,也是前24bit。如果使用tinyalsa播放一個真24bit資料時,沒有轉換成32bit下傳時播放會出現噪聲。

|<- 16bit ->|
|<-       32bit     ->|
|<-    24bit    ->|   |
           

I2S硬體輸出的波形如下:

|<-       32bit     ->|
|<-    24bit    ->|   |
|<- 16bit ->|         |
           

當然還有一點,一些宣稱支援到32bit的,實際輸出的是時候可能會按照24bit輸出(當低8bit丢棄了),比如Allwinner H3。或許隻是kernel驅動的問題。

I2S波形圖鎮樓

I2S注意事項啟用I2S使用I2S注意事項I2S波形圖鎮樓

<完>