国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RK android平臺多MIC開發(fā):從驅(qū)動配置到算法適配

jf_44130326 ? 來源:Linux1024 ? 2026-02-06 16:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

智能音箱、視頻會議設(shè)備等場景中,多MIC(麥克風(fēng))配置是實(shí)現(xiàn)遠(yuǎn)場拾音、降噪、回聲消除的核心基礎(chǔ)。瑞芯微Rockchip在多MIC開發(fā)上提供了統(tǒng)一框架與差異化配置,本文將結(jié)合官方技術(shù)文檔,從聲卡注冊與DTS配置音頻測試算法集成常見問題解決四大維度,手把手教你完成多MIC開發(fā),附具體文件路徑與實(shí)操代碼。

wKgZPGkaixWAPRCFAAHyJDhX6a8468.png

一、核心前提:不同芯片的共性與差異

瑞芯微各芯片多MIC開發(fā)的核心邏輯一致(基于simple-audio-card框架、依賴TinyALSA工具鏈),但需注意接口與DTS路徑差異,下表可快速定位關(guān)鍵信息:

芯片型號

支持的MIC接口

核心參考DTS路徑

錄音設(shè)備節(jié)點(diǎn)(默認(rèn))

關(guān)鍵Codec示例

RK3399

I2S、外掛ADC

無固定路徑(參考ES8323/ES7210示例)

pcmC0D1c

ES8323ES7210RT5640

RK3326/PX30

I2SPDM

arch/arm64/boot/dts/rockchip/rk3326-evb-ai-va-v11.dts

pcmC0D1c

RK809RK817

RK3566/RK3568

I2SPDM

arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-pdm-mic-array.dts

pcmC1D1c

RK809ES7202ES7243e

提示:若找不到對應(yīng)DTS文件,可在arch/arm64/boot/dts/rockchip/目錄下全局搜索pdmi2smic等關(guān)鍵詞,或參考同系列芯片的多MIC配置示例。

二、關(guān)鍵步驟:多MIC開發(fā)全流程(附代碼與路徑)

MIC開發(fā)的核心是聲卡注冊(DTS配置)內(nèi)核適配測試驗(yàn)證算法集成,每個(gè)步驟均需結(jié)合芯片特性調(diào)整,以下為具體實(shí)操:

1.第一步:聲卡注冊與DTS配置(核心)

聲卡是多MIC數(shù)據(jù)傳輸?shù)?/span>橋梁,需通過DTS配置cpu_dai(如I2S/PDM接口)、codec_dai(如RK809 codec)與dai-link(連接兩者),分3種典型場景:

場景1PDMMICRK3326/PX30/RK3566/RK3568通用)

PDM接口支持多通道(1-8ch),1-2通道通常用于回采3-8通道用于MIC拾音,以RK3566為例:

// 路徑:arch/arm64/boot/dts/rockchip/rk3566-evb2-lp4x-v10-pdm-mic-array.dtsrk809_sound_micarray: rk809-sound-micarray {  compatible ="simple-audio-card";  simple-audio-card,name ="rockchip,rk809-codec";//聲卡名稱  simple-audio-card,mclk-fs = <256>;//主時(shí)鐘倍數(shù)(固定)   // dai-link0:播放(I2S接口)  simple-audio-card,dai-link@0 {   format="i2s";    cpu { sound-dai = <&i2s1_8ch>; };//綁定I2S1_8ch播放接口    codec { sound-dai = <&rk809_codec?0>; };//綁定Codec播放端  };  //dai-link1:錄音(PDM接口,多MIC)  simple-audio-card,dai-link@1 {   format="pdm";    cpu { sound-dai = <&pdm>; };//綁定PDM錄音接口    codec { sound-dai = <&rk809_codec?1>; };//綁定Codec錄音端  };};//使能I2S1_8ch播放接口&i2s1_8ch {  status ="okay"; #sound-dai-cells = <0>;  rockchip,clk-trcm = <1>;  pinctrl-0= <&i2s1m0_sclktx &i2s1m0_lrcktx &i2s1m0_sdo0>;};//使能PDM錄音接口(多MIC核心)&pdm {  status ="okay"; #sound-dai-cells = <0>;  pinctrl-0= <&pdmm0_clk &pdmm0_clk1 &pdmm0_sdi0&pdmm0_sdi1 &pdmm0_sdi2 &pdmm0_sdi3>;};//配置RK809 Codec(需支持回采與多通道)&rk809_codec { #sound-dai-cells = <1>;  compatible ="rockchip,rk809-codec","rockchip,rk817-codec";  clocks = <&cru I2S1_MCLKOUT>;  clock-names ="mclk";  adc-for-loopback;//使能回采功能  pdmdata-out-enable;//PDM數(shù)據(jù)使能  hp-volume = <20>;//耳機(jī)音量(可調(diào)整)  spk-volume = <3>;//喇叭音量(可調(diào)整)  mic-in-differential;//差分MIC輸入(提升抗干擾)  status ="okay";};

場景2I2SMICRK3399/RK3326通用)

MIC通過I2S接口連接(如RK3399使用ES8323 Codec),需配置I2S多通道與Codec驅(qū)動:

// RK3399 ES8323示例(無固定路徑,需自定義)es8323-sound {  status ="okay";  compatible ="simple-audio-card";  simple-audio-card,format ="i2s";  simple-audio-card,name ="rockchip,es8323-codec";  simple-audio-card,mclk-fs = <256>;  // CPU端:綁定I2S0  simple-audio-card,cpu { sound-dai = <&i2s0>; }; // Codec端:綁定ES8323  simple-audio-card,codec { sound-dai = <&es8323>; };};// ES8323 Codec配置(I2C地址0x11)es8323: es8323@11{ #sound-dai-cells =<0>;  compatible ="everest,es8323";  reg = <0x11>;  clocks = <&cru SCLK_I2S_8CH_OUT>;  clock-names ="mclk";  spk-con-gpio = <&gpio0?11GPIO_ACTIVE_HIGH>;// 喇叭控制GPIO  hp-det-gpio = <&gpio4?28GPIO_ACTIVE_HIGH>;// 耳機(jī)檢測GPIO  status ="okay";};// 同時(shí)修改ES8323驅(qū)動,支持8通道(關(guān)鍵!)// 路徑:kernel/sound/soc/codecs/es8323.c(需全局搜索驅(qū)動文件)staticstructsnd_soc_dai_driveres8323_dai = {  .capture = {    .stream_name ="Capture",    .channels_min =2,    .channels_max =8,// 原默認(rèn)2,改為8通道    .rates = es8323_RATES,    .formats = es8323_FORMATS,  },};

場景3:外掛ADC +虛擬聲卡(所有芯片通用)

ADC驅(qū)動無標(biāo)準(zhǔn)聲卡邏輯(如僅初始化寄存器),需用dummy-codec(虛擬Codec)注冊聲卡:

// 定義虛擬Codecdummy_codec: dummy-codec {  compatible ="rockchip,dummy-codec"; #sound-dai-cells = <0>;};//注冊聲卡(以RT5640為播放Codec,虛擬Codec為錄音)rt5640-sound {  compatible ="simple-audio-card";  simple-audio-card,name ="rockchip,rt5640-codec";  simple-audio-card,mclk-fs = <256>;  //播放鏈路(RT5640  simple-audio-card,dai-link@0 {   format="i2s";    cpu { sound-dai = <&i2s0>; };    codec { sound-dai = <&rt5640>; };  };  //錄音鏈路(虛擬Codec)  simple-audio-card,dai-link@1 {   format="i2s";    cpu { sound-dai = <&i2s0>; };    codec { sound-dai = <&dummy_codec>; };  };};

2.第二步:內(nèi)核強(qiáng)制8通道(RK3399 、RK3576必做,其他芯片可選)

部分芯片(如RK3399)默認(rèn)I2S驅(qū)動僅支持2通道,需修改內(nèi)核代碼強(qiáng)制8通道:

// 路徑:kernel/sound/soc/rockchip/rockchip_i2s.cstaticintrockchip_i2s_hw_params(structsnd_pcm_substream *substream,structsnd_pcm_hw_params *params){ // ... 原有代碼 ... if(substream->stream == SNDRV_PCM_STREAM_CAPTURE) {    regmap_update_bits(i2s->regmap, I2S_RXCR, I2S_RXCR_VDW_MASK | I2S_RXCR_CSR_MASK, val);  }else{    regmap_update_bits(i2s->regmap, I2S_TXCR, I2S_TXCR_VDW_MASK | I2S_TXCR_CSR_MASK, val);      // 新增:播放時(shí)強(qiáng)制錄音8通道(用于回采+MIC)    dev_info(i2s->dev,"for echo fixed 8 channels capture when playbackn");    val =0;    val |= I2S_CHN_8;// 8通道    val |= I2S_TXCR_VDW(16);// 16bit(32bit需改為I2S_TXCR_VDW(32))    regmap_update_bits(i2s->regmap, I2S_RXCR, I2S_RXCR_VDW_MASK | I2S_RXCR_CSR_MASK, val);  } // ... 原有代碼 ...}// 修改DAI驅(qū)動,支持8通道staticstructsnd_soc_dai_driver rockchip_i2s_dai = {  .capture = {    .stream_name ="Capture",    .channels_min =2,    .channels_max =8,// 原默認(rèn)2,改為8    .rates = SNDRV_PCM_RATE_8000_192000,    .formats = (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE),  },};

3.第三步:音頻測試(驗(yàn)證多通道是否正常)

測試工具使用TinyALSAtinycap錄音、tinymix配置通路),需先通過mm編譯external/tinyalsa/生成工具,再按以下步驟操作:

步驟1:確認(rèn)聲卡注冊成功

# 查看已注冊聲卡(需出現(xiàn)目標(biāo)Codec,如rockchip,rk809-codec)adb shellcat/proc/asound/cards# 查看錄音設(shè)備節(jié)點(diǎn)(多MIC通常對應(yīng)pcmCxD1c,如RK3566為pcmC1D1c)adb shellls-l /dev/snd/

示例輸出(RK3566):

crw-rw----1system audio116,72024-05-2010:00pcmC1D1c // 多MIC錄音節(jié)點(diǎn)

步驟2:打開錄音通路

# 格式:tinymix -D [聲卡ID] [通路ID] [使能值]# 示例:RK3566打開聲卡1的錄音通路(通路ID需根據(jù)Codec調(diào)整,默認(rèn)1為錄音)adbshell tinymix -D111# (可選)打開喇叭放音通路(用于測試回采)adbshell tinymix -D102

步驟3:錄制8通道音頻

# 格式:tinycap[保存路徑]-D[聲卡ID]-d[設(shè)備ID]-c[通道數(shù)]-r[采樣率]-b[位寬]-p[周期大小]-n[周期數(shù)]# 示例:RK3566錄制8通道、16K采樣率、16bit音頻adb shell tinycap /sdcard/multi-mic-record.wav-D1-d1-c8-r16000-b16-p1024-n3

步驟4:分析錄音文件

將錄音文件導(dǎo)出到PC,用Adobe AuditionAudacity打開,查看8個(gè)通道的波形:

?1-2通道:回采信號(若播放了測試音頻,應(yīng)有波形);

?3-8通道:MIC拾音(說話時(shí)應(yīng)有波形,靜音時(shí)無雜波)。

4.第四步:多MIC算法集成(對接AI降噪/回聲消除)

Android原生錄音機(jī)僅支持1-2通道,需集成第三方多MIC算法(如AEC、波束成形),核心是在tinyalsa_hal中嵌入算法,步驟如下:

步驟1:修改TinyALSA HAL,關(guān)閉原生降噪

// 路徑:hardware/rockchip/audio/tinyalsa_hal/audio_hw.h#ifndefRK3368// 注釋掉原生SPEEX降噪,避免與第三方算法沖突+//#define SPEEX_DENOISE_ENABLE-#defineSPEEX_DENOISE_ENABLE#endif

步驟2:屏蔽通道固定代碼(避免強(qiáng)制2通道)

// 路徑:external/tinyalsa/pcm.c// 注釋掉以下代碼(強(qiáng)制通道檢查的邏輯)/*if(!(pcm->config.channels == 1)) {  if(channalFlags == -1 ) {    if(startCheckCount < SAMPLECOUNT) {      startCheckCount += count;    } else {      channalFlags = channel_check(data,count/2);    }  }//if(channalFlags == -1)  channel_fixed(data,count/2, channalFlags);}*/

步驟3:嵌入第三方算法

hardware/rockchip/audio/tinyalsa_hal/的錄音流程中(如audio_hw.cstart_input_stream函數(shù)),添加算法調(diào)用:

1.pcmCxD1c讀取8通道原始數(shù)據(jù);

2.調(diào)用算法處理(如AEC消回音、降噪);

3.輸出2通道處理后的數(shù)據(jù)(供原生APP使用)。

算法集成框架參考:

wKgZPGkaixWAACCYAABgw75klw8313.png

三、常見問題與解決方案(避坑指南)

1.問題1:錄音只有2通道,無8通道?

?原因1Codec驅(qū)動channels_max未設(shè)為8(如ES8323驅(qū)動需改channels_max = 8);

?原因2:內(nèi)核I2S驅(qū)動未強(qiáng)制8通道(RK3399需改rockchip_i2s.c);

?解決:檢查codec驅(qū)動rockchip_i2s.c的通道配置,確保均為8

2.問題2:部分MIC通道無波形?

?原因1PDM/I2S引腳未配置(需在DTSpinctrl-0中添加所有MIC的引腳);

?原因2MIC硬件故障(如虛焊、供電不足);

?解決:先檢查DTS引腳配置,再用示波器測量MIC接口的時(shí)鐘與數(shù)據(jù)信號。

3.問題3:回采通道無波形?

?原因1:未打開回采功能(Codec需配置adc-for-loopback);

?原因2:未播放測試音頻(回采需先通過tinyplay播放音頻);

?解決:確認(rèn)DTSadc-for-loopback已啟用,且錄音時(shí)播放了測試音頻。

4.問題4:算法集成后無輸出?

?原因1tinyalsa_hal未讀取正確的錄音節(jié)點(diǎn)(默認(rèn)是pcmC0D0c,需改為多MIC節(jié)點(diǎn)如pcmC1D1c);

?解決:在audio_hw.c中修改pcm_open的參數(shù),指定多MIC的聲卡ID和設(shè)備ID

四、開發(fā)資源匯總

1.關(guān)鍵文件路徑(全局搜索關(guān)鍵詞)

?DTSarch/arm64/boot/dts/rockchip/(搜索pdmi2smic-array);

?內(nèi)核驅(qū)動:kernel/sound/soc/rockchip/rockchip_i2s.ckernel/sound/soc/codecs/(搜索Codec型號如es8323);

?TinyALSAexternal/tinyalsa/hardware/rockchip/audio/tinyalsa_hal/

2.工具下載

?音頻分析:Audacity(免費(fèi))Adobe Audition

?ADB工具:Android SDK Platform Tools

五、總結(jié)

瑞芯微多MIC開發(fā)的核心是DTS配置通道+內(nèi)核適配8通道+算法處理多通道數(shù)據(jù),不同芯片的差異主要在接口(PDM/I2S)與文件路徑,開發(fā)者可按以下流程快速落地:

1.確定芯片的MIC接口(PDM/I2S)與參考DTS

2.配置DTScpu_daicodec_daidai-link

3.測試8通道錄音,驗(yàn)證硬件正常;

4.集成第三方算法,對接上層APP

附錄:多MIC開發(fā)腦圖

wKgZPGkaixWAZQfrAANxnMnAnrA668.png ?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    4024

    瀏覽量

    133967
  • 音頻
    +關(guān)注

    關(guān)注

    31

    文章

    3188

    瀏覽量

    85543
  • Mic
    Mic
    +關(guān)注

    關(guān)注

    0

    文章

    72

    瀏覽量

    30038
  • 瑞芯微
    +關(guān)注

    關(guān)注

    27

    文章

    792

    瀏覽量

    54274
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    分享RK***瑞芯微開發(fā)Android 配置說明

    》進(jìn)行配置。【注】如果根據(jù)下一節(jié)的 kernel 端配置正確后能夠顯示,但是顯示方向不對,請參考根據(jù)本節(jié)所列文檔進(jìn)行調(diào)整。瑞芯微RK***開發(fā)板,友堅(jiān)科技專注于三星、瑞芯微
    發(fā)表于 08-16 18:33

    rk3399 rk3288攝像頭支持列表

    3399 RK3288 RK3326 RK3128)攝像頭支持列表(下圖) 文檔里面包含Android和linux相關(guān)驅(qū)動
    發(fā)表于 08-02 16:52

    初級小白實(shí)戰(zhàn)資料,零基礎(chǔ)入門rk3399平臺下linux4.4+android8.1開發(fā)

    直播時(shí)間:7月30日(本周五)19:30直播主題:一起玩安卓刷機(jī)與Linux設(shè)備驅(qū)動(基于RK3399平臺下Linux4.4+Android8.1
    發(fā)表于 07-27 17:53

    RK系列開發(fā)板音頻驅(qū)動適配指南(一)

    簡稱“OpenHarmony”)操作系統(tǒng),目前如果使用到多媒體(音頻)是需要做一系列的適配動作,才能應(yīng)用到各種場景。方案:基于OpenHarmony適配RK系列開發(fā)板音頻
    發(fā)表于 09-19 10:41

    RK系列開發(fā)板音頻驅(qū)動適配指南(一)

    RK系列開發(fā)板音頻驅(qū)動適配指南(一)RK系列開發(fā)板音頻驅(qū)動
    發(fā)表于 10-08 11:02

    RK系列開發(fā)板音頻驅(qū)動適配指南(二)

    RK系列開發(fā)板音頻驅(qū)動適配指南(一)RK系列開發(fā)板音頻驅(qū)動
    發(fā)表于 10-09 11:30

    RK系列開發(fā)板音頻驅(qū)動適配指南(三)

    驅(qū)動適配,本次主要介紹音頻驅(qū)動適配中的Codec模塊適配RK系列
    發(fā)表于 10-10 09:11

    RK系列開發(fā)板音頻驅(qū)動適配指南(四)

    開發(fā)板音頻驅(qū)動適配指南已經(jīng)闡述了,本次主要介紹音頻驅(qū)動適配中的HCS適配
    發(fā)表于 10-13 09:20

    RK系列開發(fā)板音頻驅(qū)動適配指南(五)

    工具燒錄,即可驗(yàn)證驅(qū)動RK系列開發(fā)板音頻驅(qū)動適配指南,DAI
    發(fā)表于 10-18 09:50

    迅為RK3576開發(fā)Android?屏顯示

    迅為RK3576開發(fā)Android?屏顯示
    的頭像 發(fā)表于 01-16 16:58 ?1907次閱讀
    迅為<b class='flag-5'>RK</b>3576<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>Android</b>?<b class='flag-5'>多</b>屏顯示

    一文搞定RK平臺Wi-Fi/BT調(diào)試!配置問題解決全攻略

    專用芯片,Wi-Fi/BT 的穩(wěn)定運(yùn)行直接影響產(chǎn)品體驗(yàn)。本文配置、編譯、測試問題排查,手把手帶你搞定 RK 平臺 Wi-Fi/BT 調(diào)
    的頭像 發(fā)表于 02-09 16:57 ?1295次閱讀
    一文搞定<b class='flag-5'>RK</b><b class='flag-5'>平臺</b>Wi-Fi/BT調(diào)試!<b class='flag-5'>從</b><b class='flag-5'>配置</b><b class='flag-5'>到</b>問題解決全攻略

    一文吃透RK平臺OTA升級開發(fā)邏輯調(diào)試的完整指南

    在 Rockchip(簡稱 RKAndroid 平臺開發(fā)中,OTA(Over The Air)升級是實(shí)現(xiàn)設(shè)備軟件迭代的核心方式。無論是本地卡刷升級,還是在線無縫更新,掌握 OTA 升
    的頭像 發(fā)表于 02-09 16:26 ?294次閱讀
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平臺</b>OTA升級<b class='flag-5'>開發(fā)</b>:<b class='flag-5'>從</b>邏輯<b class='flag-5'>到</b>調(diào)試的完整指南

    RK平臺UART開發(fā)驅(qū)動配置測試全流程

    完善的 UART 開發(fā)支持,本文將結(jié)合官方開發(fā)指南,功能特點(diǎn)、驅(qū)動配置、測試驗(yàn)證三個(gè)維度,帶大家快速掌握
    的頭像 發(fā)表于 02-04 17:44 ?1744次閱讀
    <b class='flag-5'>RK</b><b class='flag-5'>平臺</b>UART<b class='flag-5'>開發(fā)</b>!<b class='flag-5'>從</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>配置</b><b class='flag-5'>到</b>測試全流程

    硬核進(jìn)階:RK3576 Android15?驅(qū)動與系統(tǒng)開發(fā)實(shí)戰(zhàn)指南

    android15,想與大家探討更多,不僅僅是驅(qū)動,更包含android其他方面。 各位嵌入式與Android開發(fā)的朋友們,我們的?
    的頭像 發(fā)表于 01-26 22:29 ?627次閱讀
    硬核進(jìn)階:<b class='flag-5'>RK</b>3576 <b class='flag-5'>Android</b>15?<b class='flag-5'>驅(qū)動</b>與系統(tǒng)<b class='flag-5'>開發(fā)</b>實(shí)戰(zhàn)指南

    RK?平臺?SPI?開發(fā)完全指南(驅(qū)動?+?配置?+?測試?+?優(yōu)化)

    Linux 平臺 SPI 驅(qū)動已形成完善的開發(fā)體系,支持 Master/Slave 雙模式、速率適配及靈活
    的頭像 發(fā)表于 01-30 22:35 ?621次閱讀
    <b class='flag-5'>RK</b>?<b class='flag-5'>平臺</b>?SPI?<b class='flag-5'>開發(fā)</b>完全指南(<b class='flag-5'>驅(qū)動</b>?+?<b class='flag-5'>配置</b>?+?測試?+?優(yōu)化)