一、核心概述
RK平臺聲卡基于ALSA(Advanced Linux Sound Architecture)框架構建,核心目標是實現音頻數據的“采集-傳輸-處理-輸出”全鏈路管理。其本質是通過多個功能模塊的協作,將SoC內部的數字音頻信號與外部音頻設備(麥克風、耳機、HDMI等)連接,同時解決數據同步、格式兼容、硬件適配等問題。
根據《Rockchip Audio開發指南》,RK平臺聲卡的核心特點是模塊化設計和高靈活性,支持I2S/SAI/PDM等多種數字音頻接口、內部/外部CODEC組合,以及多聲道、異步采樣率轉換(ASRC)、數字回采(DLP)等高級功能,可適配智能家居、SoundBar、OTT盒子等多種場景。
二、聲卡核心構成組件
RK平臺聲卡由5大核心組件構成,各組件職責明確且協同工作,具體定義與功能如下:
|
組件
|
英文全稱
|
核心作用
|
RK平臺特有細節
|
|
DAI
|
Digital Audio Interface
|
數字音頻接口,連接SoC與CODEC,負責傳輸數字音頻信號(時序控制、格式解析)
|
支持SAI(靈活協議)、I2S/I2S-TDM(多聲道)、PDM(數字麥)、SPDIF(數字輸出)等類型
|
|
MACHINE
|
聲卡整合層
|
關聯DAI與CODEC,配置音頻拓撲(如協議格式、時鐘主從),生成最終聲卡設備
|
支持Simple Card(通用場景)、Multi Codecs Machine Driver(多CODEC場景)
|
|
DMAENGINE
|
DMA控制器
|
實現內存(DDR/SRAM)與DAI FIFO之間的高速數據傳輸,避免CPU占用
|
支持PL330(8通道限制)、RKDMA(無通道限制),可動態申請釋放通道(CONFIG_SND_SOC_DYNAMIC_DMA_CHAN)
|
|
CODEC
|
Coder-Decoder
|
|
分內部CODEC(如RK812/RK817,集成于PMIC)、外部CODEC(如ES8388、TAS5731)、Combo CODEC(如HDMI +模擬輸出)
|
|
PCM
|
Pulse Code Modulation
|
ALSA框架的核心接口,向上提供應用層訪問接口(如aplay/arecord),向下適配硬件
|
支持多種采樣率(8k~384k)、位寬(16bit~32bit)、聲道數(2CH~256CH)
|
三、聲卡數據傳輸流程(附流程圖)
RK平臺聲卡的數據流分為播放(輸出)和錄音(輸入)兩大方向,所有數據均通過DMAENGINE實現無CPU干預的傳輸,確保低延遲和高穩定性。
1.播放流程(數字→模擬/數字輸出)

2.錄音流程(模擬/數字輸入→數字)

關鍵說明
?時序同步:DAI負責與CODEC協商時鐘(MCLK/BCLK/LRCK)和協議格式(如I2S、TDM),確保數據傳輸無錯位;
?無CPU干預:DMAENGINE直接管理內存與DAI FIFO的數據搬運,僅在緩沖區滿/空時觸發中斷通知CPU;
?格式適配:若輸入輸出采樣率不一致(如UAC場景),可通過ASRC(異步采樣率轉換器)進行實時轉換,避免失真。
四、RK平臺聲卡核心子模塊詳解
1. DAI(數字音頻接口):聲卡的“傳輸中樞”
DAI是SoC與CODEC的“橋梁”,RK平臺支持多種DAI類型,適配不同場景需求:
|
DAI類型
|
核心特點
|
支持聲道數
|
典型應用場景
|
|
SAI
|
協議靈活(可構造I2S/DSP/TDM時序)、支持多Lane合并、FIFO交織配置
|
8CH IN/OUT
|
SoundBar(多聲道輸出)、Mic Array
|
|
I2S
|
支持標準I2S/PCM協議,時鐘補償(ACC)
|
8CH IN/OUT
|
普通音頻設備(耳機、單麥克風)
|
|
I2S-TDM
|
基于I2S擴展,支持TDM協議,可異步/同步模式
|
16CH IN/OUT
|
多麥克風陣列、多聲道錄音
|
|
PDM
|
僅Master模式,支持數字麥克風陣列,含高通濾波(HPF)
|
8CH IN / 2CH OUT
|
智能家居(遠場語音喚醒)
|
|
SPDIF
|
支持LPCM(無損)、DD/DTS(壓縮)格式,數字透傳
|
2CH(LPCM)/7.1CH(壓縮)
|
家庭影院(HDMI /光纖輸出)
|
2. CODEC(編解碼器):“數模轉換核心”
CODEC是實現“數字信號模擬信號”轉換的關鍵,RK平臺分為兩類:
?內部CODEC:集成于SoC或PMIC,成本低、適配簡單,如:
?RK812/RK817:PMIC集成CODEC,支持立體聲DAC/ADC,可直驅外部PA;
?DCODEC:SoC內置數字CODEC,支持DSM(Delta Sigma Modulation)模式,節省外部PA成本。
?外部CODEC:獨立芯片,音質優、功能豐富,需通過I2C/SPI控制,如:
?ES8388:立體聲CODEC,支持高信噪比(SNR≥95dB);
?TAS5731:D類功放CODEC,適合大音量場景(如SoundBar)。
3. MACHINE(聲卡整合層):“配置管家”
MACHINE的核心是解析DTS配置并“綁定” DAI與CODEC,避免開發人員重復編寫驅動。RK平臺支持兩種主流MACHINE驅動:
?Simple Card:適用于“1個DAI+1個CODEC”的通用場景,通過DTS配置協議格式(如simple-audio-card,format = "i2s")、時鐘主從(simple-audio-card,bitclock-master)等參數,無需編寫額外代碼;
?Multi Codecs Machine Driver:適用于“1個DAI/Combo DAI +多個CODEC”的復雜場景(如HDMI +模擬輸出、DAI+VAD),需通過DTS配置rockchip,codec列表和音頻路由(rockchip,audio-routing)。
五、RK平臺聲卡開發關鍵點
1.驅動開發重點:
?多數場景下,基于RK SDK開發只需移植/編寫CODEC驅動(如I2C接口的ES8388驅動);
?僅在多CODEC、特殊時序(如自定義TDM)場景下,需編寫MACHINE驅動;
?DAI驅動已由RK提供(如rockchip_i2s.c、rockchip_sai.c),無需修改,僅需通過DTS配置屬性(如時鐘、協議)。
1.核心代碼路徑(內核源碼):
kernel/sound/soc/rockchip/ # RK平臺核心音頻驅動├─ rockchip_asrc.c # ASRC驅動├─ rockchip_i2s.c # I2S驅動├─ rockchip_i2s_tdm.c # I2S-TDM驅動├─ rockchip_pdm.c # PDM驅動├─ rockchip_sai.c # SAI驅動└─ rockchip_multicodecs.c # Multi Codecs Machine驅動kernel/sound/soc/codecs/ # CODEC驅動├─ rk817_codec.c # 內部CODEC(RK817)├─ es8388.c # 外部CODEC(ES8388)└─ hdmi-codec.c # HDMI CODEC
1.聲卡添加步驟:
a.使能內核配置(如CONFIG_SND_SIMPLE_CARD、CONFIG_SND_SOC_ROCKCHIP_I2S);
b.在DTS中使能DAI節點(如I2S/SAI),配置引腳、時鐘;
c.在DTS中添加CODEC節點(如I2C總線下的ES8388);
d.添加MACHINE節點(如Simple Card),關聯DAI與CODEC;
e.編譯內核,通過cat /proc/asound/cards驗證聲卡注冊成功。
六、聲卡構成腦圖

七、關鍵總結
1.模塊化設計:RK聲卡的DAI、MACHINE、CODEC等組件解耦,開發時可聚焦“CODEC移植”和“MACHINE配置”,降低復雜度;
2.靈活性適配:通過SAI的靈活協議、Combo DAI的多接口組合、ASRC的異步同步,可覆蓋從簡單耳機到復雜多聲道系統的場景;
3.開發簡化:RK SDK已提供完善的DAI驅動和MACHINE模板,多數場景下僅需修改DTS和CODEC驅動,無需從零開發。
如需進一步調試(如播放無聲、錄音失真),可使用示波器(測時鐘/數據)、aplay/arecord(定位用戶態/內核態問題)、amixer(控制CODEC通路)等工具。
-
音頻
+關注
關注
31文章
3188瀏覽量
85545 -
聲卡
+關注
關注
4文章
131瀏覽量
31621 -
Rockchip
+關注
關注
0文章
92瀏覽量
19577
發布評論請先 登錄
Linux下聲卡的安裝(ALSA)
Linux ALSA聲卡驅動之ALSA架構簡介
Linux ALSA聲卡驅動之一:聲卡的創建
Linux ALSA聲卡驅動之一:ALSA架構簡介
alsa底層框架系統配置與插件
高級linux聲卡架構ALSA概述及特點
RK3576 Android15音頻開發必看:alsa_route核心文件解析與修改場景
RK平臺聲卡基礎知識總結(基于ALSA框架)
評論