DAI:Digital Audio Interfaces(音頻設備的硬件接口)

1 PCM接口
   
針對不同的數字音頻子系統,出現了幾種微處理器或DSP音頻器件間用於數字轉換的接口最簡單的音頻接口是PCM(脈衝編碼調製)接口,該接口由時鐘脈衝(BCLK)、幀同步信號(FS)及接收數據(DR)和發送數據(DX組成。在FS信號的上升沿,數據傳輸從MSBMost Significant Bit)字開始,FS頻率等於採樣率。FS信號之後開始數據字的傳輸,單個的數據位按順序進行傳輸,1個時鐘週期傳輸1個數據字。發送MSB時,信號的等級首先降到最低,以避免在不同終端的接口使用不同的數據方案時造成MSB的丟失。
     PCM
接口很容易實現,原則上能夠支持任何數據方案和任何採樣率,但需要每個音頻通道獲得一個獨立的數據隊列
2 IIS
接口(即I2S接口)
     IIS
接口(Inter-IC Sound)在20世紀80年代首先被飛利浦用於消費音頻,並在一個稱爲LRCLKLeft/Right CLOCK)的信號機制中經過多路轉換,將兩路音頻信號變成單一的數據隊列。當LRCLK爲高時,左聲道數據被傳輸;LRCLK爲低時,右聲道數據被傳輸。與PCM相比,IIS更適合於立體聲系統。對於多通道系統,在同樣的BCLKLRCLK條件下,並行執行幾個數據隊列也是可能的。
3 AC97
接口
     AC'97
Audio Codec 1997)是以Intel爲首的五個PC廠商IntelCreative LabsNSAnalog DeviceYamaha共同提出的規格標準。與PCMIIS不同,AC'97不只是一種數據格式,用於音頻編碼的內部架構規格,它還具有控制功能AC'97採用AC-Link與外部的編解碼器相連,AC-Link接口包括位時鐘(BITCLK)、同步信號校正(SYNC)和從編碼到處理器及從處理器中解碼(SDATDINSDATAOUT的數據隊列。AC'97數據幀以SYNC脈衝開始,包括1220位時間段(時間段爲標準中定義的不同的目的服務)及16“tag”段,共計256個數據序列。例如,時間段“1”“2”用於訪問編碼的控制寄存器,而時間段“3”“4”分別負載左、右兩個音頻通道。“tag”段表示其他段中哪一個包含有效數據。把幀分成時間段使傳輸控制信號和音頻數據僅通過4根線到達9音頻通道或轉換成其他數據流成爲可能。與具有分離控制接口的IIS方案相比,AC'97明顯減少了整體管腳數。一般來說,AC'97編解碼器採用TQFP48封裝。

PCM also supports Time Division Multiplexing (TDM) in that several devices can use the bus simultaneously (this is sometimes referred to as network mode).


ASLA - Advanced Sound Linux Architecture

 OSS - 以前的Linux音頻體系結構,被ASLA取代併兼容

 Codec - Coder/Decoder

 I2S/PCM/AC97 - Codec與CPU間音頻的通信協議/接口/總線

 DAI - Digital Audio Interface 其實就是I2S/PCM/AC97

 DAC - Digit to Analog Conversion

 ADC - Analog to Digit Conversion

 DSP - Digital Signal Processor

 Mixer - 混音器,將來自不同通道的幾種音頻模擬信號混合成一種模擬信號

 Mute - 消音,屏蔽信號通道

 PCM - Pulse Code Modulation 一種從音頻模擬信號轉換成數字信號的技術,區別於PCM音頻通信協議

 採樣頻率 - ADC的頻率,每秒採樣的次數,典型值如44.1KHZ

 量化精度 - 比如24bit,就是將音頻模擬信號按照2的24次方進行等分

 SSI - Serial Sound Interface

 DAPM - Dynamic Audio Power Management

 音頻編解碼器Codec負責處理音頻信息,包括ADC,DAC,Mixer,DSP,輸入輸出以及音量控制等所有與音頻相關的功能。

 Codec與處理器之間通過I2C總線和數字音頻接口DAI進行通信。

 I2C總線 - 實現對Codec寄存器數據的讀寫。

 DAI - 實現音頻數據在CPU和Codec間的通信。

以Codec作爲研究對象,它的輸入有Mic(Microphone),PhoneIn電話信號等,輸出有耳機HP(HeadPhone),揚聲器Speaker和PhoneOut電話信號。另外需要注意在Codec與CPU端間也有音頻數字信號的輸入輸出。

1) 播放音樂

 

2) 錄音

 

3) 電話

--- 打電話 ---                                                           --- 接聽---

   

4) 通過藍牙打電話

--- 打電話 ---                                                           --- 接聽---   

 

  

 

 2. 系統架構

  Android的音頻系統擁有一個比較標準和健全的架構,從上層應用,java framework服務AudioMananger,本地服務AudioFlinger,抽象層AlsaHAL,本地庫,再調用external的Alsa-lib外部支持庫,最後到底層驅動的codec,可謂"五臟俱全"。

 以系統啓動AuidoFlinger爲例,簡要窺探Alsa Sound的組織架構。

Java服務AudioManager作爲服務端,本地服務AudioFlinger作爲客戶端,兩者通過Binder機制交互。AudioFlinger對硬件功能的具體實現(比如setMode設置電話/藍牙/錄音等模式)交給硬件抽象層AlsaHAL完成。抽象層可以調用本地標準接口,比如mASLADevice->route,或者直接調用Alsa-lib庫去操作底層驅動。

 

 Linux的音頻驅動結構相對複雜,源碼位於內核目錄下的/sound/soc/,其中/codec文件夾下存放與平臺無關的編解碼器驅動,/imx文件夾下存放於freescale imx平臺相關的音頻驅動,主要可分爲SSI驅動和DAI驅動。

以聲卡驅動的數據結構爲切入點分析,

1) struct snd_soc_codec - 由與平臺無關的codec驅動實現。

2) struct snd_soc_platform - 由與imx平臺相關的DAI驅動實現,主要實現了音頻數據的DMA傳輸功能。

3) struct snd_soc_dai_link - 將平臺相關的DAI與平臺無關的codec聯繫起來。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章