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

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

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

七、關(guān)鍵總結(jié)
1.模塊化設(shè)計(jì):RK聲卡的DAI、MACHINE、CODEC等組件解耦,開(kāi)發(fā)時(shí)可聚焦“CODEC移植”和“MACHINE配置”,降低復(fù)雜度;
2.靈活性適配:通過(guò)SAI的靈活協(xié)議、Combo DAI的多接口組合、ASRC的異步同步,可覆蓋從簡(jiǎn)單耳機(jī)到復(fù)雜多聲道系統(tǒng)的場(chǎng)景;
3.開(kāi)發(fā)簡(jiǎn)化:RK SDK已提供完善的DAI驅(qū)動(dòng)和MACHINE模板,多數(shù)場(chǎng)景下僅需修改DTS和CODEC驅(qū)動(dòng),無(wú)需從零開(kāi)發(fā)。
如需進(jìn)一步調(diào)試(如播放無(wú)聲、錄音失真),可使用示波器(測(cè)時(shí)鐘/數(shù)據(jù))、aplay/arecord(定位用戶(hù)態(tài)/內(nèi)核態(tài)問(wèn)題)、amixer(控制CODEC通路)等工具。
-
音頻
+關(guān)注
關(guān)注
31文章
3186瀏覽量
85511 -
聲卡
+關(guān)注
關(guān)注
4文章
131瀏覽量
31612 -
Rockchip
+關(guān)注
關(guān)注
0文章
90瀏覽量
19575
發(fā)布評(píng)論請(qǐng)先 登錄
路由器常用基礎(chǔ)知識(shí)總結(jié)
linux /Android 基礎(chǔ)知識(shí)總結(jié)大全
Linux下聲卡的安裝(ALSA)
Linux ALSA聲卡驅(qū)動(dòng)之ALSA架構(gòu)簡(jiǎn)介
Linux ALSA聲卡驅(qū)動(dòng)之一:聲卡的創(chuàng)建
Linux ALSA聲卡驅(qū)動(dòng)之一:ALSA架構(gòu)簡(jiǎn)介
51單片機(jī)學(xué)習(xí) 基礎(chǔ)知識(shí)總結(jié)
Arduino入門(mén)必備基礎(chǔ)知識(shí)(基礎(chǔ)認(rèn)證考前總結(jié))
【51單片機(jī)】考試基礎(chǔ)知識(shí)總結(jié)(引腳)
alsa底層框架系統(tǒng)配置與插件
高級(jí)linux聲卡架構(gòu)ALSA概述及特點(diǎn)
RK平臺(tái)新聲卡添加與驅(qū)動(dòng)調(diào)試指南
RK3576 Android15音頻開(kāi)發(fā)必看:alsa_route核心文件解析與修改場(chǎng)景
RK平臺(tái)聲卡基礎(chǔ)知識(shí)總結(jié)(基于ALSA框架)
評(píng)論