https://www.jianshu.com/p/0f5fe8f51b66
簡介
LINUX下音頻驅動開發,要遵循標準的ALSA架構,
下面分別從硬件架構、軟件架構、驅動程序,3個方面分析。
硬件架構
硬件上音頻總線接口有很多,如I2S、PCM、TDM、SLIMBUS等,以I2S爲例分析:
I2S接口.png
- 播放流程
- 使用I2C對CODEC做初始化配置。
- 音頻數據從外部flash讀取到內存中。
- 數據經過DMA送到I2S的TXFIFO。
- 數據由TXFIFO送到CODEC硬件。
- 在CODEC硬件裏,數據從數字信號轉變成模擬信號。
- 模擬信號經過喇叭播放出來,就實現了聲音的播放。
- 錄音流程
與播放流程相反,在第5步,從模擬信號變成數字信號,其他都一樣
軟件架構-ALSA
安卓的整體音頻架構
ALSA.png
從上到下分別是:
- APP-HAL,安卓中的音頻框架,用於適配LINUX內核。
- ALSA-lib,LINUX內核音頻驅動框架。
- machine-codec驅動,硬件音頻驅動程序。
驅動程序
按照ALSA驅動框架要實現的接口有:
driver.png
各個部分功能分別是:
- DTS,音頻硬件參數配置。
- CPU DAI,CPU上的音頻接口驅動,如I2S,PCM,SLIMBUS等。
- platform,基於CPU的DMA接口封裝,用於實現音頻數據在內存和DMA之間流動。
- CODEC DAI,CODEC上的音頻接口驅動。
- CODEC,CODEC自身驅動。
- I2C,實現CODEC的配置接口。
- machine,設備層面組裝所有驅動,實現音頻通路。