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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RK3576音頻調試全紀錄

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

掃碼添加小助手

加入工程師交流群

嵌入式設備開發中,音頻調試往往是牽一發而動全身的環節——既需要對齊硬件原理圖的信號定義,又要適配軟件層的codec配置、引腳映射和驅動邏輯。本文基于RK3576平臺的實際調試場景,結合原理圖關鍵信息與代碼修改記錄,拆解ES8388/ES8323 codec音頻調試的完整流程,帶你解決無聲音、MIC不工作、耳機檢測失效三大核心問題。

一、調試背景:明確硬件與核心問題

1.硬件基礎

wKgZPGkanJmAcdzoAALDPtIKWCo807.png

本次調試的音頻硬件架構如下,原理圖核心標注需重點關注:

?Codec芯片:采用ES8388(主codec)與ES8323(輔助codec),支持耳機輸出、MIC輸入、線路輸入(Line In);

?供電要求:原理圖標注“the chip can adopt 1.8V poe supply”——Codec芯片支持1.8V供電,需確保電源軌穩定(避免因供電不足導致芯片異常);

?接口定義

?耳機接口:3-pole3極)設計,支持音頻輸出(無內置MIC引腳,需單獨配置外置MIC或線路輸入);

?MIC接口:標注“MIC ORT JNO”,對應硬件上的主MIC輸入通道;

?控制引腳:包含耳機檢測(HP_DET)、耳機控制(HP_CON)、線路輸入檢測(LINEIN_DET)等GPIO引腳。

2.初始問題清單

調試前設備存在三大音頻問題,也是本次優化的核心目標:

1.無聲音輸出:耳機插入后無任何聲音,Codec芯片未正確輸出音頻信號;

2.MIC錄音失效:內置MIC無法捕獲聲音,錄音文件為靜音或底噪嚴重;

3.耳機/線路輸入檢測失效:插入耳機或線路輸入設備,系統無任何硬件接入提示。

二、調試核心:硬件原理圖與代碼修改的對齊

音頻調試的關鍵邏輯是硬件信號定義軟件配置映射,以下按“HAL→ Codec配置設備樹內核驅動的順序,拆解每處修改與原理圖的對應關系。

模塊1TinyALSA HAL層配置(解決采樣率不匹配導致的雜音/無聲

HAL層是Android音頻框架與底層硬件的橋梁,核心修改集中在采樣率與音頻參數適配。

代碼修改(audio_hw.c/audio_hw.h

// 播放與錄音的采樣率從 48000Hz 改為 44100Hz-staticstructpcm_config pcm_config = {.rate =48000, .period_size =960};+staticstructpcm_config pcm_config = {.rate =44100, .period_size =256};-staticstructpcm_config pcm_config_in = {.rate =48000, .period_size =768};+staticstructpcm_config pcm_config_in = {.rate =44100, .period_size =256};// 默認播放采樣率定義同步修改-#defineDEFAULT_PLAYBACK_SAMPLERATE 48000+#defineDEFAULT_PLAYBACK_SAMPLERATE 44100

為什么改?——與硬件codec能力對齊

?原理圖未明確標注采樣率,但ES8388/ES8323芯片對44100Hz采樣率的兼容性更好(尤其通話、普通音樂播放場景);

?48000Hz采樣率與部分音頻通路(如MIC輸入)的硬件時鐘MCLK)不匹配,導致音頻數據傳輸時出現丟幀,表現為無聲或雜音;

?縮小period_size(從960/768改為256):減少音頻緩沖區大小,降低播放延遲,避免因緩沖區溢出導致的聲音卡頓。

模塊2ES8388 Codec配置(解決耳機無輸出、MIC無錄音

ES8388是主codec芯片,負責音頻信號的編解碼,修改集中在輸出使能、音量控制、MIC輸入通道選擇

代碼修改(es8388_config.h

// 1. 耳機輸出使能:新增 OUT1 Switch 控制,打開耳機輸出通道conststructconfig_control es8388_headphone_incall_controls[] = {+  {.ctl_name ="Output 1 Playback Volume", .int_val = {27,27}},// 耳機音量設置(27 為安全值,避免爆音)+  {.ctl_name ="OUT1 Switch", .int_val = {on}},// 使能 OUT1 輸出(對應原理圖耳機輸出引腳)};// 2. MIC 輸入配置:調整捕獲音量、修正輸入通道conststructconfig_control es8388_main_mic_capture_controls[] = {-  {.ctl_name ="Capture Digital Volume", .int_val = {192,192}},// 原音量過高,底噪嚴重+  {.ctl_name ="Capture Digital Volume", .int_val = {175,175}},// 降低音量,減少底噪-  {.ctl_name ="Left/Right Channel Capture Volume", .int_val = {8,8}},+  {.ctl_name ="Left/Right Channel Capture Volume", .int_val = {3,3}},// 進一步降低通道音量-  {.ctl_name ="Left PGA Mux", .str_val ="DifferentialL"},// 原通道選錯,未對應硬件 MIC 引腳+  {.ctl_name ="Left PGA Mux", .str_val ="Line 2L"},// 切換到 Line 2L 通道(對應原理圖 MIC 輸入引腳)+  {.ctl_name ="Right PGA Mux", .str_val ="Line 2R"},// 右通道同步切換,適配立體聲 MIC};

關鍵對齊:與原理圖MIC /耳機接口匹配

?OUT1 Switch使能:原理圖中耳機輸出信號連接到ES8388OUT1引腳,默認未打開該通道,導致耳機無聲音;

?MIC通道選擇:原配置用“DifferentialL”通道,對應原理圖的線路輸入1Line 1),而實際MIC硬件連接到Line 2通道,導致“MIC插了但沒走對應通路

?音量調整:原192音量過高,超出MIC拾音范圍,導致底噪嚴重,降至175后底噪消失且錄音清晰。

模塊3:設備樹(DTS)修改(解決耳機/線路輸入檢測失效

設備樹是硬件引腳與軟件驅動的映射表,核心修改耳機檢測、控制引腳,新增線路輸入檢測配置,完全對齊原理圖引腳定義。

代碼修改(rk3576-evb1.dtsi

es8388_sound: es8388-sound {-  hp-det-gpio = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; // 原引腳與原理圖不匹配+  hp-det-gpio = <&gpio2 RK_PA7 GPIO_ACTIVE_LOW>; // 改為原理圖標注的耳機檢測引腳(GPIO2_PA7)-  spk-con-gpio = <&gpio2 RK_PB1 GPIO_ACTIVE_HIGH>; // 關閉揚聲器控制(未使用)-  hp-con-gpio = <&gpio3 RK_PD6 GPIO_ACTIVE_HIGH>; // 原耳機控制引腳錯誤+  hp-con-gpio = <&gpio2 RK_PA6 GPIO_ACTIVE_HIGH>; // 改為原理圖耳機控制引腳(GPIO2_PA6)+  linedet-gpio = <&gpio2 RK_PB0 IRQ_TYPE_EDGE_BOTH>; // 新增線路輸入檢測引腳(對應原理圖 Line In 檢測)  headphone {-    pinctrl-0 = <&hp_det>; // 原僅配置耳機檢測引腳+    pinctrl-0 = <&hp_det>,<&linein_det>; // 新增線路輸入檢測引腳配置  };+  linein_key: linein-key { // 新增線路輸入檢測節點+    compatible = "linein-key";+    status = "okay";+  };};&pinctrl {  headphone {    hp_det: hp-det {-      rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;+      rockchip,pins = <2 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>; // 對齊耳機檢測引腳    };+    linein_det: linein-det { // 新增線路輸入檢測引腳配置+      rockchip,pins = <2 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;+    };  };};// SAI 音頻接口:修正數據輸出引腳(對應 codec 數據輸入)&sai1 {+  rockchip,sai-tx-route = <1 2 0 3>; // 調整 SAI 數據路由-  pinctrl-0 = <&sai1m0_sdo0>; // 原輸出引腳錯誤+  pinctrl-0 = <&sai1m0_sdo2>; // 改為原理圖 SAI 數據輸出引腳(SDO2)};

為什么改?——引腳映射是檢測功能的前提

?耳機檢測引腳錯誤:原用GPIO0_PD3,但原理圖中耳機檢測實際連接到GPIO2_PA7,導致系統無法感知耳機插入;

?新增線路輸入檢測:原理圖包含Line In接口,需配置GPIO2_PB0作為檢測引腳,并添加對應的pinctrl配置;

?SAI引腳修正SAI(串行音頻接口)是CPUcodec傳輸音頻數據的通道,原SDO0引腳未對應codecSDI輸入,導致數據傳輸中斷,修正為SDO2后音頻流正常。

模塊4:內核驅動修改(解決“codec初始化失敗、檢測中斷無效

內核驅動負責codec芯片的硬件初始化、中斷處理(如耳機插入檢測),核心修改集中在ES8323驅動(輔助codec)和多codec管理邏輯。

4.1 ES8323驅動修正(es8323.c

// 1. 初始化寄存器配置:修正 DAC/ADC 供電與工作模式staticstructreg_default es8323_reg_defaults[] = {-  {0x04,0xc0},// 原 DAC 供電關閉+  {0x04,0x30},// 打開 DAC 供電(使能音頻輸出)-  {0x0a,0x00},// 原 ADC 配置錯誤+  {0x0a,0xf8},// 正確配置 ADC 采樣模式-  {0x0b,0x06},// 原 DAC 模式錯誤+  {0x0b,0x82},// 正確配置 DAC 輸出模式};// 2. 新增調試日志:定位 bias level 切換問題staticintes8323_set_bias_level(...){+  printk("xsc es8323_set_bias_level %drn", level);// 打印 bias 狀態(ON/PREPARE/STANDBY/OFF) switch(level) { caseSND_SOC_BIAS_OFF:-    snd_soc_component_write(..., ES8323_DACPOWER,0xC0);// 原關閉 DAC 供電+    snd_soc_component_write(..., ES8323_DACPOWER,0x30);// 保持 DAC 供電(避免待機后無聲音)   break;  }}// 3. 修正 probe 函數:初始化關鍵寄存器staticintes8323_probe(...){+  snd_soc_component_write(component,0x09,0x88);// 使能 ADC 輸入+  snd_soc_component_write(component,0x35,0xA0);// 配置 MIC 偏置電壓(對應原理圖 1.8V 供電)+  es8323_set_bias_level(component, SND_SOC_BIAS_STANDBY);// 初始化為待機模式(而非 OFF)}

4.2codec管理邏輯(rockchip_multicodecs.c

// 1. 新增線路輸入檢測數據結構structmulticodecs_data {+  intlineinmic_gpio_pin;// 線路輸入檢測 GPIO+  intlineinmic_irq;// 線路輸入中斷號+  structdelayed_work lineinmic_handler;// 線路輸入檢測工作隊列};// 2. 線路輸入中斷處理函數+staticvoidlineinmic_det_func(structwork_struct *work){+  lineinmicgpio_value = gpio_get_value(mc_data->lineinmic_gpio_pin);// 讀取檢測引腳電平+  // 高電平=未插入,低電平=插入,可根據實際需求調整+}// 3. 初始化線路輸入檢測staticintrk_multicodecs_probe(...){+  // 從設備樹讀取線路輸入檢測引腳+  mc_data->lineinmic_gpio_pin = of_get_named_gpio_flags(np,"linedet-gpio",0, &irq_flags);+  // 申請中斷(上升沿+下降沿觸發,支持插入/拔出檢測)+  ret = devm_request_threaded_irq(..., mc_data->lineinmic_irq, ..., IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING);+  INIT_DEFERRABLE_WORK(&mc_data->lineinmic_handler, lineinmic_det_func);// 初始化工作隊列}

關鍵作用:驅動是硬件功能的使能開關

?ES8323供電修正:原驅動在待機(OFF)時關閉DAC供電,導致再次喚醒后codec無供電而無法工作,改為保持供電后解決喚醒無聲音問題;

?MIC偏置電壓:新增0x35寄存器配置(0xA0),為MIC提供1.8V偏置電壓(匹配原理圖供電),否則MIC無法正常拾音;

?線路輸入中斷:通過中斷+工作隊列實現線路輸入的實時檢測,插入/拔出時能及時通知系統,解決檢測無響應問題。

三、調試踩坑與解決:5個關鍵問題的定位邏輯

1.問題1:耳機有聲音但MIC無錄音

?排查:用tinymix工具查看MIC通道是否使能(tinymix | grep Capture),發現“Left PGA Mux”通道為“DifferentialL”

?解決:對照原理圖確認MIC連接到Line 2通道,修改es8388_config.h中的PGA Mux配置。

1.問題2:耳機插入無檢測

?排查:用cat /sys/class/gpio/gpioXXX/value讀取原檢測引腳(GPIO0_PD3)電平,插入耳機后無變化;

?解決:查看原理圖確認實際引腳為GPIO2_PA7,修改設備樹后檢測正常。

1.問題3:播放音頻有雜音

?排查:dmesg | grep pcm發現“underrun”日志(緩沖區欠載),采樣率48000Hz時頻繁出現;

?解決:將采樣率改為44100Hz,縮小period_size,減少緩沖區壓力。

1.問題4:待機后喚醒無聲音

?排查:dmesg | grep es8323發現bias level切換到OFF模式,DAC供電被關閉;

?解決:修改es8323.cOFF模式的DAC供電配置,保持供電不關閉。

1.問題5:線路輸入無響應

?排查:設備樹未配置linedet-gpio,驅動無對應中斷處理;

?解決:添加線路輸入檢測引腳和中斷邏輯,初始化工作隊列。

四、調試驗證:4步確認音頻功能正常

1.播放驗證

tinyplay /sdcard/test.wav -D 0 -d 0(用tinyplay工具播放測試音頻,確認耳機有聲音且無雜音);

2.錄音驗證

tinycap /sdcard/record.wav -D 0 -d 1 -c 2 -r 44100 -b 16(錄音后播放,確認MIC拾音清晰);

3.檢測驗證

?插入耳機:cat /sys/class/extcon/extcon0/state查看是否有“headphone”狀態;

?插入線路輸入:cat /sys/class/lineinmic_class/lineinmic_gpio查看是否顯示“in”

1.日志驗證

dmesg | grep -i audio“error”“underrun”日志,dmesg | grep es8323顯示bias level切換正常。

五、總結:RK3576音頻調試的3個核心原則

1.硬件優先:所有軟件修改必須對齊原理圖(引腳、供電、通道),比如耳機檢測引腳、MIC輸入通道,錯誤的映射會導致功能完全失效;

2.分層排查:從HAL層(參數適配)→ Codec配置(通道/音量)設備樹(引腳映射)內核驅動(初始化/中斷),逐層定位,避免跨層調試;

3.日志輔助:在關鍵函數(如codec probebias level切換、中斷處理)添加打印,快速定位哪一步沒走通,比如bias切到OFF導致無供電。

音頻調試看似復雜,但只要將硬件信號軟件配置一一對應,再結合日志排查,就能逐步解決問題。希望本文的調試思路,能為你在RK平臺或其他嵌入式設備的音頻開發中提供參考。

# RK3576平臺音頻調試全紀錄:從原理圖到代碼,解決無聲音、MIC失效、耳機檢測難題


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5198

    文章

    20442

    瀏覽量

    333961
  • 音頻
    +關注

    關注

    31

    文章

    3188

    瀏覽量

    85545
  • rk3576
    +關注

    關注

    1

    文章

    265

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    基于RK3576開發板的PWN使用說明

    RK3576開發板使用PWN教程及Demo
    的頭像 發表于 05-07 14:07 ?2256次閱讀
    基于<b class='flag-5'>RK3576</b>開發板的PWN使用說明

    基于RK3576開發板的人臉識別算法

    RK3576開發板展示人臉識別算法例程和API說明
    的頭像 發表于 05-07 16:48 ?2728次閱讀
    基于<b class='flag-5'>RK3576</b>開發板的人臉識別算法

    【米爾RK3576開發板評測】帶你初步了解米爾RK3576這塊開發板

    輸出。 8、RK3576還對雙屏同顯異顯支持良好,可驅動商顯,工業120HZ 4K HDMI屏,LVDS 1080p屏。 9、自帶RECOVERY一鍵恢復出廠設置,方便測試調試。 10、是定昌目前極具
    發表于 12-18 20:35

    【米爾RK3576開發板評測】+項目名稱【米爾RK3576開發板評測】一個視頻和你共同認識一下米爾RK3576開發板

    RK3576還對雙屏同顯異顯支持良好,可驅動商顯,工業120HZ 4K HDMI屏,LVDS 1080p屏。 9、自帶RECOVERY一鍵恢復出廠設置,方便測試調試。 10、是定昌目前極具價格優勢
    發表于 12-18 20:50

    米爾RK3576RK3588怎么選?-看這篇就夠了

    4通道以及雙DP v1.3嵌入USB 3.1且帶有音頻和HDCP2.x。 攝像頭視頻輸入對比 RK3576支持最高16MPixel ISP帶有HDR和3DNR RK3588配備48M Pixel
    發表于 12-27 11:44

    【米爾RK3576開發板評測】+項目名稱值得購買的米爾RK3576開發板

    更多可玩性。 米爾RK3576的擴展板也非常不錯。尺寸120x90mm,高度17.8mm 帶有3.5mm音頻接口,MiniDP,HDMI顯示輸出接口,兩個USB3.0接口,兩個千兆網口。 RTC電池
    發表于 01-08 22:59

    RK3576 vs RK3588:為何越來越多的開發者轉向RK3576

    瑞芯微(Rockchip)最新發布的 RK3576 一經推出,就吸引了大量原本關注 RK3588 的開發者。RK3588 作為旗艦級芯片,性能固然強大,但 RK3576 憑借其超高的能
    發表于 05-30 08:46

    Mpp支持RK3576

    想問下,https://github.com/rockchip-linux/mpp這里面支持RK3576么,看介紹沒有提到說支持RK3576 目前是買了個rk3576的機頂盒,搭載了安卓14,想做安卓視頻硬解。
    發表于 06-13 15:35

    【作品合集】米爾RK3576開發板測評

    】米爾RK3576開發板免費試用 作者:EPTmachine【米爾RK3576開發板免費體驗】1、開發環境、鏡像燒錄、QT開發環境搭建以及應用部署 【米爾RK3576開發板免費體驗】2、板載麥克風和
    發表于 09-11 10:19

    新品體驗 | RK3576開發板

    前言:RK3576作為瑞芯微第二代8nm高性能AIOT平臺,一經推出便獲得了極大的關注。廣州眺望電子科技有限公司是一家專注于嵌入式處理器模組研發與應用的國家高新技術企業,目前公司已推出的相關型號有
    的頭像 發表于 11-01 08:08 ?3142次閱讀
    新品體驗 | <b class='flag-5'>RK3576</b>開發板

    RK3576單板發布倒計時:RK3399與RK3576對比

    好多人說RK3576RK3399的升級版,某種程度上也可以這么說,RK3576在強大的多媒體功能的基礎上,性能和接口都進行了升級 一、工藝 性能 rk3576采用 Rockchip
    的頭像 發表于 12-03 16:59 ?2515次閱讀
    <b class='flag-5'>RK3576</b>單板發布倒計時:<b class='flag-5'>RK</b>3399與<b class='flag-5'>RK3576</b>對比

    RK3588與RK3576區別解析

    以下是RK3576RK3588對比: 電魚電子SBC-RK3576單板 核心性能:RK3576為四核A72@2.2GHz + 四核A53@1.8GHz + M0協處理器,算力 58K
    的頭像 發表于 12-17 14:03 ?4009次閱讀
    <b class='flag-5'>RK</b>3588與<b class='flag-5'>RK3576</b>區別解析

    瑞芯微RK3576RK3576S有什么區別,性能參數配置與型號差異解析

    瑞芯微第二代8nm高性能AIOT平臺RK3576家族再添新成員-RK3576S,先說結論:相較主型號的RK3576/RK3576J,性能略有縮減,而功耗有所降低。主要應用于商顯終端、智
    的頭像 發表于 08-14 23:57 ?2366次閱讀
    瑞芯微<b class='flag-5'>RK3576</b>與<b class='flag-5'>RK3576</b>S有什么區別,性能參數配置與型號差異解析

    迅為如何在RK3576上部署YOLOv5;基于RK3576構建智能門禁系統

    迅為如何在RK3576開發板上部署YOLOv5;基于RK3576構建智能門禁系統
    的頭像 發表于 11-25 14:06 ?1790次閱讀
    迅為如何在<b class='flag-5'>RK3576</b>上部署YOLOv5;基于<b class='flag-5'>RK3576</b>構建智能門禁系統

    迅為RK3576對比RK3568:AI算力與接口的全面躍遷

    迅為RK3576對比RK3568:AI算力與接口的全面躍遷
    的頭像 發表于 12-22 15:24 ?1582次閱讀
    迅為<b class='flag-5'>RK3576</b>對比<b class='flag-5'>RK</b>3568:AI算力與接口的全面躍遷