Linux音頻子系統(六)ASoC驅動框架

1. 硬件架構

首先我們來看看,我們實際的開發板上的硬件接口,一般由一個cpu和一個codec組成,其大致的框圖爲
在這裏插入圖片描述
對於音頻的應用主要有播放和錄音的功能,數據流通過I2S的接口來傳輸,而I2c/l3接口主要完成的控制接口,例如控制聲音的大小,功放的增益等操作。對於回放/錄音的情形,PCM 數據流向大致是:
在這裏插入圖片描述

2. 軟件架構

ASoC–ALSA System on Chip ,是建立在標準ALSA驅動層上,爲了更好地支持嵌入式處理器和移動設備中的音頻Codec的一套軟件體系。Codec驅動與SoC CPU的底層耦合過於緊密.利於在多樣化的平臺/機器上移植複用,方便 codec 與 SoC 通過 PCM/I2S 總線建立鏈接。
軟件領域裏的抽象和重用一樣,嵌入式設備的音頻系統可以被劃分爲板載硬件(Machine)、Soc(Platform)、Codec三大部分:
在這裏插入圖片描述
Linux框架中,ASOC狀態可以劃分爲硬件Machine Driver、Platform Driver、Codec Driver三大部分組成。由上圖可以看出Machine是指我們的開發板,Platform是指Soc,包括開發Soc上的Audio DMA和CPU DAIs接口,而Codec是指編解碼器。

  • machine:單板相關內容,開發板所用的主芯片(Platform是指Soc)、編解碼芯片(codec)是哪一個。主芯片裏的IIS接口(DAI(全稱Digital Audio Interface)接口)接到哪裏去.CPU DAI是哪一個,codec DAI是哪一個,DMA是哪個
  • platform:平臺相關內容。通常需要包含Soc中的時鐘、PCM、IIS(DAI)(設置接口)和DMA(傳輸數據)等。只要指定了Soc,那麼我們就認爲對應一個platform,與Machine無關,使得該Soc可以在不同的Machine做兼容。
  • codec:也就是編解碼器,Codec裏面一般包含了I2S接口(DAI)、D/A、A/D、mixer、PA(內置或者外接)

3. 數據結構框圖

下面以一個的常見開發板mini2440來說明其數據結構的總體框架
在這裏插入圖片描述

  • Machine driver
    sound/soc/sumsang/s3c24xx_uda134x.c
    其中的Machine驅動負責Platform和Codec之間的耦合以及部分和設備或板子特定的代碼採樣率時鐘配置

  • Platform driver
    sound/soc/sumsang/s3c24xx-i2s.c
    I2S 控制器驅動 採樣率時鐘DMA 等配置

  • Codec driver
    sound/soc/codec/uda134x.c

    開發asoc聲卡驅動就是向asoc驅動核心的三個數據鏈表中註冊相應的鏈表節點,最後通過machine中註冊的dai_link數據結構將三部分聯繫在一起,共同完成硬件初始化部分,最後完成整個聲卡的註冊。

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