91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

深度解析ES8389/ES8390/音頻芯片Linux驅(qū)動(dòng)(Linux6.1內(nèi)核)

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

掃碼添加小助手

加入工程師交流群

嵌入式音頻開發(fā)中,順芯(EverestES8389/ES8390是一款高集成度的音頻Codec芯片,廣泛應(yīng)用于智能音箱、車載終端、便攜設(shè)備等場景。本文基于Linux6.1內(nèi)核,從驅(qū)動(dòng)架構(gòu)、寄存器配置、核心函數(shù)、數(shù)據(jù)流走向四個(gè)維度,完整拆解ES8389Linux驅(qū)動(dòng)實(shí)現(xiàn),幫你吃透這款芯片的驅(qū)動(dòng)邏輯。

注意:在講解rk3576系列課程的視頻中有提到es8388已經(jīng)停產(chǎn)了,目前這個(gè)8390pinpin替代的,估計(jì)也是升級版。

一、驅(qū)動(dòng)整體架構(gòu):基于ASoC+I2C框架

ES8389驅(qū)動(dòng)完全遵循Linux音頻子系統(tǒng)的ASoCALSA System on Chip框架設(shè)計(jì),同時(shí)依托I2C完成芯片寄存器的讀寫交互,整體架構(gòu)分為三層:

?I2C驅(qū)動(dòng)層:實(shí)現(xiàn)芯片與內(nèi)核的I2C通信,是驅(qū)動(dòng)的基礎(chǔ)載體;

?ASoC Component:封裝Codec的硬件操作(probe/remove/suspend/resume)、音頻控制(音量/靜音/混音);

?ASoC DAI:定義音頻接口I2S/TDM)、采樣率/格式等參數(shù),是CPUCodec的音頻數(shù)據(jù)交互入口。

核心代碼中,es8389_i2c_driverI2C驅(qū)動(dòng)主體,soc_codec_dev_es8389ASoC Component驅(qū)動(dòng),es8389_daiDAIDigital Audio Interface)驅(qū)動(dòng),三者共同構(gòu)成完整的驅(qū)動(dòng)體系。

二、核心數(shù)據(jù)結(jié)構(gòu):驅(qū)動(dòng)的骨架

1.私有數(shù)據(jù)結(jié)構(gòu)體(es8389_private

驅(qū)動(dòng)通過該結(jié)構(gòu)體管理芯片的運(yùn)行時(shí)狀態(tài),是貫穿整個(gè)驅(qū)動(dòng)的核心:

structes8389_private{ structsnd_soc_component*component; // 關(guān)聯(lián)ASoC組件 structregmap*regmap;        // 寄存器映射(簡化I2C讀寫) structclk*mclk;          // 主時(shí)鐘句柄 unsignedintsysclk;         // 系統(tǒng)時(shí)鐘頻率 intmastermode;           // 主/從模式標(biāo)識
  u8 adc_slot;   // ADC TDM時(shí)隙  u8 dac_slot;   // DAC TDM時(shí)隙 intdmic;     // DMIC使能標(biāo)識  u8 mclk_src;   // 主時(shí)鐘源 enumsnd_soc_bias_levelbias_level; // 功耗偏置等級};

2.時(shí)鐘系數(shù)結(jié)構(gòu)體(_coeff_div

ES8389的時(shí)鐘配置高度依賴采樣率和主時(shí)鐘(MCLK)的匹配,驅(qū)動(dòng)預(yù)定義了不同MCLK/采樣率組合下的寄存器配置表:

struct_coeff_div {  u16 fs;     // 采樣率(如8000/16000/48000)  u32 mclk;    // 主時(shí)鐘頻率  u32 rate;    // 音頻速率  u8 Reg0x04;   // 時(shí)鐘分頻寄存器0x04配置值 // ... 省略其他寄存器配置項(xiàng)  u8 Reg0x19;   // 系統(tǒng)寄存器0x19配置值};

代碼中coeff_div數(shù)組包含了8kHz/16kHz/44.1kHz/48kHz等主流采樣率的時(shí)鐘參數(shù),get_coeff()函數(shù)負(fù)責(zé)根據(jù)實(shí)際MCLK和采樣率匹配對應(yīng)的寄存器配置。

三、關(guān)鍵寄存器解析:硬件的指令集

ES8389驅(qū)動(dòng)的核心是寄存器操作,按功能可分為5大類,以下結(jié)合代碼中的關(guān)鍵操作解析:

1.時(shí)鐘配置寄存器(0x04-0x0A、0x0F、0x11

?作用:配置時(shí)鐘分頻、倍頻、源選擇,是音頻采樣率匹配的核心;

?關(guān)鍵操作es8389_pcm_hw_params()函數(shù)中,根據(jù)采樣率匹配coeff_div表后,批量寫入時(shí)鐘寄存器:

regmap_write(es8389->regmap, ES8389_CLK_DIV1_REG04, coeff_div[coeff].Reg0x04);regmap_write(es8389->regmap, ES8389_CLK_MUL_REG05, coeff_div[coeff].Reg0x05);// ... 其他時(shí)鐘寄存器寫入

2. ADC/DAC核心寄存器(0x200x40

?作用:配置音頻格式(S16_LE/S24_LE/S32_LE)、I2S/TDM模式、靜音等;

?關(guān)鍵操作

?格式配置:hw_params()中根據(jù)PCM參數(shù)設(shè)置數(shù)據(jù)長度:

switch(params_format(params)){ caseSNDRV_PCM_FORMAT_S16_LE:    state |= ES8389_S16_LE; // 16位小端格式   break; // ... 其他格式配置}regmap_update_bits(es8389->regmap, ES8389_ADC_REG20, ES8389_DATA_LEN_MASK, state);

?靜音控制:es8389_mute()中通過0x20/0x40寄存器的低2位控制ADC/DAC靜音:

regmap_update_bits(es8389->regmap, ES8389_DAC_REG40,0x03,0x03); // 靜音DAC

3.模擬偏置寄存器(0x60-0x63

?作用:配置模擬電路的偏置電壓、電源模式,是芯片正常工作的基礎(chǔ);

?關(guān)鍵操作es8389_init()中初始化模擬電路:

regmap_write(es8389->regmap, ES8389_VMID_REG60,0x2A); // 偏置電壓配置regmap_write(es8389->regmap, ES8389_ANA_CTL1_REG61,0xC9); // 模擬控制1

4.混音/路由寄存器(0x2B0x44、0x31

?作用:配置ADC/DAC的混音源、通道路由(如左右聲道交換、ADC MUX選擇);

?關(guān)鍵操作:通過DAPMDynamic Audio Power Management)控件配置路由,例如:

// 配置ADC MUX選擇AMIC/DMICstaticconststructsoc_enum es8389_dmic_mux_enum =  SOC_VALUE_ENUM_SINGLE(ES8389_DMIC_EN_REG6D,6,3, es8389_dmic_mux_txt, es8389_dmic_mux_values);

5.功耗控制寄存器(0x000x100x69

?作用控制芯片的復(fù)位、功耗等級(ON/STANDBY/OFF);

?關(guān)鍵操作es8389_set_bias_level()中切換功耗狀態(tài):

caseSND_SOC_BIAS_ON: regmap_write(es8389->regmap,ES8389_RESET_REG00,0x01);// 退出復(fù)位 regmap_update_bits(es8389->regmap,ES8389_HPSW_REG69,0x20,0x20);// 開啟耳機(jī)電源 break;caseSND_SOC_BIAS_STANDBY: regmap_write(es8389->regmap,ES8389_RESET_REG00,0x3E);// 進(jìn)入待機(jī) break;

四、核心函數(shù)分析:驅(qū)動(dòng)的靈魂

1. probe函數(shù):驅(qū)動(dòng)初始化入口

es8389_probe()是驅(qū)動(dòng)加載時(shí)的核心函數(shù),完成以下關(guān)鍵操作:

1.從設(shè)備樹讀取配置(mclk-srcadc-slot、dmic-enabled等);

2.獲取并使能主時(shí)鐘(MCLK);

3.調(diào)用es8389_init()完成芯片默認(rèn)寄存器配置;

4.關(guān)聯(lián)ASoC組件和私有數(shù)據(jù)。

2. hw_params函數(shù):音頻參數(shù)適配

es8389_pcm_hw_params()在音頻流啟動(dòng)前被調(diào)用,核心邏輯:

1.解析PCM參數(shù)(采樣率、格式、通道數(shù));

2.配置ADC/DAC的數(shù)據(jù)格式(如S16_LE);

3.匹配時(shí)鐘系數(shù)表,寫入時(shí)鐘寄存器;

4.完成硬件參數(shù)與芯片寄存器的映射。

3. set_bias_level函數(shù):功耗管理

ES8389支持4種功耗等級(OFF/STANDBY/PREPARE/ON),該函數(shù)負(fù)責(zé)切換不同等級:

?ON:芯片全功能運(yùn)行,開啟模擬電路、時(shí)鐘;

?STANDBY:低功耗待機(jī),關(guān)閉部分時(shí)鐘和模擬電路;

?OFF:深度休眠,僅保留必要的電源。

4. mute函數(shù):靜音控制

es8389_mute()實(shí)現(xiàn)ADC/DAC的靜音/取消靜音:

?靜音:設(shè)置ADC/DAC寄存器的靜音位;

?取消靜音:清除靜音位,同時(shí)恢復(fù)ADC使能和時(shí)鐘配置。

五、音頻數(shù)據(jù)流走向:從CPU到耳機(jī)/麥克風(fēng)

ES8389的數(shù)據(jù)流分為播放(Playback采集(Capture兩條路徑,驅(qū)動(dòng)通過DAPM路由定義了完整的數(shù)據(jù)流鏈路,以下結(jié)合流程圖詳解:

1.播放(Playback)數(shù)據(jù)流

wKgZO2mAHJKAIvS_AADAxNw8GbQ455.png

關(guān)鍵節(jié)點(diǎn)

?I2S INCPU通過I2S接口發(fā)送音頻數(shù)據(jù)到Codec;

?DACL/DACR:數(shù)字音頻解碼為模擬信號

?OUT MUX:支持左右聲道交換(如DAC2→DAC1);

?HPOL/HPOR:最終輸出到耳機(jī)左/右聲道。

2.采集(Capture)數(shù)據(jù)流

wKgZO2mAHJKAUG5HAADJHHAuth4808.png

關(guān)鍵節(jié)點(diǎn)

?PGAL/PGAR:模擬信號前置放大(增益可通過寄存器0x72/0x73配置);

?ADC Mixer:支持DAC信號回灌到ADC(如音頻回環(huán)測試);

?ADC MUX:切換模擬麥克風(fēng)(AMIC/數(shù)字麥克風(fēng)(DMIC);

?I2S OUT:數(shù)字音頻數(shù)據(jù)通過I2S發(fā)送到CPU。

六、總結(jié)與拓展

核心要點(diǎn)

1.框架依賴:驅(qū)動(dòng)基于ASoC+I2C框架,遵循Linux音頻子系統(tǒng)的標(biāo)準(zhǔn)設(shè)計(jì),適配性強(qiáng);

2.時(shí)鐘核心:采樣率匹配的關(guān)鍵是coeff_div時(shí)鐘表,需確保MCLK與采樣率的匹配;

3.功耗管理:通過bias_level實(shí)現(xiàn)不同功耗等級的切換,平衡性能與功耗;

4.路由靈活DAPM路由支持混音、聲道交換、麥克風(fēng)類型切換,滿足復(fù)雜音頻場景。

適配注意事項(xiàng)

1.設(shè)備樹需配置everest,mclk-src(時(shí)鐘源)、everest,dmic-enabledDMIC使能)等屬性;

2.不同硬件平臺(tái)的MCLK頻率不同,需確認(rèn)coeff_div表中是否有匹配的時(shí)鐘參數(shù);

3.Linux6.1內(nèi)核下,ASoC框架的接口無重大變化,適配其他版本(如5.15/6.6)僅需微調(diào)寄存器配置。

如需獲取相關(guān)驅(qū)動(dòng),請?jiān)u論區(qū)留言,需要適配其他Linux內(nèi)核版本(如4.19/5.10),或定制音頻路由、功耗策略,可私信交流具體的修改方案。

wKgZO2mAHJKAPbmHAAANNC5Lq5E714.png

本文從驅(qū)動(dòng)架構(gòu)到數(shù)據(jù)流,完整拆解了ES8389音頻CodecLinux驅(qū)動(dòng)實(shí)現(xiàn),希望能幫助嵌入式開發(fā)者快速掌握這款芯片的驅(qū)動(dòng)邏輯,解決實(shí)際開發(fā)中的音頻適配問題。

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

    關(guān)注

    88

    文章

    11756

    瀏覽量

    218997
  • 音頻芯片
    +關(guān)注

    關(guān)注

    3

    文章

    162

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Linux音頻開發(fā)必藏!這個(gè)官網(wǎng)藏著從驅(qū)動(dòng)到應(yīng)用的全套解決方案

    打開alsa-project.org,首先會(huì)被這句簡介擊中:"為 Linux 系統(tǒng)提供音頻與 MIDI 功能的核心架構(gòu)"。作為 2.6 版本后 Linux 內(nèi)核默認(rèn)的
    的頭像 發(fā)表于 02-06 16:56 ?3062次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>音頻</b>開發(fā)必藏!這個(gè)官網(wǎng)藏著從<b class='flag-5'>驅(qū)動(dòng)</b>到應(yīng)用的全套解決方案

    拆解RK3568啟動(dòng)日志:Debian12+Linux6.1下的調(diào)試密碼,初學(xué)者也能看懂

    在嵌入式開發(fā)中,啟動(dòng)日志(Boot Log) 是硬件調(diào)試、驅(qū)動(dòng)開發(fā)、系統(tǒng)優(yōu)化的“第一手資料”。尤其是基于瑞芯微 RK3568(四核 A55,主打邊緣計(jì)算、物聯(lián)網(wǎng)設(shè)備)的方案,搭配 Debian12 系統(tǒng)與 Linux6.1 內(nèi)核
    的頭像 發(fā)表于 02-06 16:52 ?2862次閱讀
    拆解RK3568啟動(dòng)日志:Debian12+<b class='flag-5'>Linux6.1</b>下的調(diào)試密碼,初學(xué)者也能看懂

    初次編譯rk3568(rk3576)Linux 6.1內(nèi)核踩坑記錄:從報(bào)錯(cuò)終止到成功解決的完整流程

    很多剛接觸瑞芯微 rk 系列芯片開發(fā)的小伙伴,在初次編譯基于 Linux 6.1 內(nèi)核的系統(tǒng)時(shí),很容易因?yàn)榄h(huán)境依賴問題卡殼。最近我在編譯 rk3576(rk3568 流程類似)
    的頭像 發(fā)表于 02-06 16:47 ?2551次閱讀
    初次編譯rk3568(rk3576)<b class='flag-5'>Linux</b> <b class='flag-5'>6.1</b><b class='flag-5'>內(nèi)核</b>踩坑記錄:從報(bào)錯(cuò)終止到成功解決的完整流程

    ES7243E+ES8311音頻錄制與播放電路資料

    本電路為一款低成本音頻錄制與播放參考電路,含sch原理圖和pcb板圖。ES7243E接2路模擬麥克風(fēng)實(shí)現(xiàn)音頻采集,ES8311接1路功放實(shí)現(xiàn)音頻
    發(fā)表于 02-04 17:18 ?1次下載

    RK3576+Android15+Linux6.1調(diào)試EM05 4G模塊全記錄:從底層到上層的踩坑與破局

    )服務(wù)。最近我們在 RK3576 開發(fā)板 + Android15 系統(tǒng) + Linux6.1 內(nèi)核 環(huán)境下調(diào)試EM05 4G 模塊 時(shí),就遇到了從“RIL 起不來” 到 “庫缺失” 再到 “上層功能未開” 的一系列問題。今天就把完整的調(diào)試流程、踩過的坑和解決方案整理出來,
    的頭像 發(fā)表于 02-03 15:27 ?1451次閱讀
    RK3576+Android15+<b class='flag-5'>Linux6.1</b>調(diào)試EM05 4G模塊全記錄:從底層到上層的踩坑與破局

    保姆級教程!RK3588 Linux6.1?固件簽名完整實(shí)現(xiàn)方案(不含rootfs)

    ? ? ? 在嵌入式 Linux 開發(fā)中,固件簽名是保障設(shè)備安全的關(guān)鍵環(huán)節(jié) —— 它能有效防止惡意固件篡改、非法刷入,從源頭筑牢設(shè)備的系統(tǒng)安全防線。最近在 RK3588 平臺(tái)( Linux6.1
    的頭像 發(fā)表于 01-14 17:21 ?1821次閱讀
    保姆級教程!RK3588 <b class='flag-5'>Linux6.1</b>?固件簽名完整實(shí)現(xiàn)方案(不含rootfs)

    探索TLE8082ES+TLE8080EM評估板:從硬件到軟件的深度解析

    探索TLE8082ES+TLE8080EM評估板:從硬件到軟件的深度解析 在電子工程師的日常工作中,評估板是驗(yàn)證和開發(fā)新設(shè)計(jì)的重要工具。今天,我們將深入探討TLE8082ES+TLE8
    的頭像 發(fā)表于 12-21 15:50 ?687次閱讀

    Linux內(nèi)核printk日志級別全解析:從參數(shù)解讀到實(shí)操配置

    一、開篇:一個(gè)命令引出的核心問題 在?Linux?終端執(zhí)行?cat /proc/sys/kernel/printk,你可能會(huì)看到這樣的輸出: 這串?dāng)?shù)字不是隨機(jī)的,而是內(nèi)核日志系統(tǒng)的“核心配置開關(guān)
    的頭像 發(fā)表于 11-20 15:54 ?1691次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>printk日志級別全<b class='flag-5'>解析</b>:從參數(shù)解讀到實(shí)操配置

    【免費(fèi)送書】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)》

    Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)開發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開發(fā)調(diào)試難度大所致。2021年,一本講解驅(qū)動(dòng)
    的頭像 發(fā)表于 11-18 08:06 ?1374次閱讀
    【免費(fèi)送書】成為硬核<b class='flag-5'>Linux</b>開發(fā)者:《<b class='flag-5'>Linux</b> 設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)(第 2 版)》

    【書籍評測活動(dòng)NO.67】成為硬核Linux開發(fā)者:《Linux 設(shè)備驅(qū)動(dòng)開發(fā)(第 2 版)》

    )。成為硬核Linux開發(fā)者Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)開發(fā),一直給人門檻較高的印象,主要因內(nèi)核機(jī)制抽象、需深度理解硬件原理、開發(fā)調(diào)試難度大所致
    發(fā)表于 11-17 17:52

    ES8311+音頻PA雙引擎,AirAUDIO_1010釋放聲音潛能!

    AirAUDIO_1010音頻配件板以ES8311為核心,搭配高效音頻PA,構(gòu)建穩(wěn)定、高保真的音頻鏈路。無論是高音通透還是低音渾厚,雙芯協(xié)作都能精準(zhǔn)駕馭,釋放聲音的無限可能。 ? 一
    的頭像 發(fā)表于 08-28 13:04 ?1240次閱讀
    <b class='flag-5'>ES</b>8311+<b class='flag-5'>音頻</b>PA雙引擎,AirAUDIO_1010釋放聲音潛能!

    揭秘,瑞芯微全系擁抱Linux 6.1內(nèi)核的底層邏輯

    近期,瑞芯微(Rockchip)基本完成了旗下產(chǎn)品Linux6.1BSP內(nèi)核更新,引發(fā)了不小的行業(yè)熱議。除了低端RK3506依舊使用Buildroot構(gòu)建系統(tǒng)外,RK3588、RK3576
    的頭像 發(fā)表于 05-16 08:31 ?1313次閱讀
    揭秘,瑞芯微全系擁抱<b class='flag-5'>Linux</b> <b class='flag-5'>6.1</b><b class='flag-5'>內(nèi)核</b>的底層邏輯

    新品 | Module Audio,ES8388音頻交互模塊

    ModuleAudio是一款面向音頻交互的M5Stack擴(kuò)展模塊,基于高性能的ES8388音頻編解碼方案,提供雙通道3.5mm音頻接口(TRS音頻
    的頭像 發(fā)表于 04-25 14:16 ?1501次閱讀
    新品 | Module Audio,<b class='flag-5'>ES</b>8388<b class='flag-5'>音頻</b>交互模塊

    杰理科技推出AC706N多功能音頻芯片

    音頻設(shè)備領(lǐng)域,芯片性能直接決定了產(chǎn)品的用戶體驗(yàn)。杰理科技最新推出的AC706N多功能音頻芯片,憑借技術(shù)創(chuàng)新與場景化設(shè)計(jì),再次刷新行業(yè)標(biāo)準(zhǔn)。該芯片
    的頭像 發(fā)表于 04-19 10:47 ?2170次閱讀

    樹莓派4 性能大比拼:標(biāo)準(zhǔn)Linux與實(shí)時(shí)Linux 4.19內(nèi)核的延遲測試

    引言本文是對我之前關(guān)于RaspberryPi3同一主題的帖子的更新。與之前的帖子一樣,我使用的是隨Raspbian鏡像提供的標(biāo)準(zhǔn)內(nèi)核,以及應(yīng)用了RT補(bǔ)丁的相似內(nèi)核版本。對于實(shí)時(shí)版,我
    的頭像 發(fā)表于 03-25 09:39 ?808次閱讀
    樹莓派4 性能大比拼:標(biāo)準(zhǔn)<b class='flag-5'>Linux</b>與實(shí)時(shí)<b class='flag-5'>Linux</b> 4.19<b class='flag-5'>內(nèi)核</b>的延遲測試