日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

深度解析ES8389/ES8390/音頻芯片Linux驅(qū)動(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ū)動架構(gòu)、寄存器配置、核心函數(shù)、數(shù)據(jù)流走向四個維度,完整拆解ES8389Linux驅(qū)動實現(xiàn),幫你吃透這款芯片的驅(qū)動邏輯。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2. ADC/DAC核心寄存器(0x20、0x40

?作用:配置音頻格式(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.混音/路由寄存器(0x2B、0x440x31

?作用:配置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.功耗控制寄存器(0x00、0x100x69

?作用控制芯片的復(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);// 開啟耳機電源 break;caseSND_SOC_BIAS_STANDBY: regmap_write(es8389->regmap,ES8389_RESET_REG00,0x3E);// 進入待機 break;

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

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

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

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

2.獲取并使能主時鐘(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()在音頻流啟動前被調(diào)用,核心邏輯:

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

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

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

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

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

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

?ON:芯片全功能運行,開啟模擬電路、時鐘;

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

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

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

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

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

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

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

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

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

wKgZO2mAHJKAIvS_AADAxNw8GbQ455.png

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

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

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

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

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

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

wKgZO2mAHJKAUG5HAADJHHAuth4808.png

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

?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é)與拓展

核心要點

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

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

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

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

適配注意事項

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

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

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

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

wKgZO2mAHJKAPbmHAAANNC5Lq5E714.png

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

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

    關(guān)注

    88

    文章

    11821

    瀏覽量

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

    關(guān)注

    3

    文章

    171

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Linux Kernel 6.1 tools目錄全解析?| RK平臺ARM64交叉編譯實戰(zhàn)指南

    、硬件測試等全場景能力。 本文完整拆解 Linux Kernel 6.1 tools 目錄所有模塊功能,并給出 RK 平臺 ARM64 架構(gòu)交叉編譯的標(biāo)準(zhǔn)指令 ,一站式解決內(nèi)核工具使用與編譯問題,適合
    的頭像 發(fā)表于 04-16 18:42 ?7593次閱讀
    <b class='flag-5'>Linux</b> Kernel <b class='flag-5'>6.1</b> tools目錄全<b class='flag-5'>解析</b>?| RK平臺ARM64交叉編譯實戰(zhàn)指南

    如何理解Linux內(nèi)核中的PCIe驅(qū)動

    各異的芯片組,加上各種 PCI 設(shè)備自身獨特的功能需求,Linux 內(nèi)核中的 PCI 支持遠(yuǎn)比我們希望的要復(fù)雜得多。今天這篇文章,我們將從驅(qū)動開發(fā)的視角,梳理
    的頭像 發(fā)表于 04-11 17:22 ?1287次閱讀

    WT2605C 藍(lán)牙音頻芯片介紹

    WT2605C藍(lán)牙音頻芯片介紹功能詳解與應(yīng)用指南—雙模藍(lán)牙+本地音頻播放SoC,適用于耳機、車載、智能家居等場景WT2605C是深圳唯創(chuàng)知音電子有限公司推出的一款高品質(zhì)雙模藍(lán)牙音頻芯片,內(nèi)置高性能
    的頭像 發(fā)表于 03-25 16:49 ?651次閱讀
    WT2605C 藍(lán)牙<b class='flag-5'>音頻芯片</b>介紹

    Linux內(nèi)核驅(qū)動開發(fā)的技術(shù)核心精要

    嵌入式Linux驅(qū)動開發(fā)是連接硬件與操作系統(tǒng)的關(guān)鍵環(huán)節(jié)。隨著內(nèi)核演進(如Linux 6.13)和硬件復(fù)雜度提升,開發(fā)者需掌握并發(fā)控制、中斷分層、內(nèi)存管理、設(shè)備樹、調(diào)試工具等核心知識。本
    發(fā)表于 03-10 13:56

    RK3576+ES8388音頻開發(fā):tinymix控件全解析

    無從下手,尤其不知道如何結(jié)合硬件原理圖精準(zhǔn)配置。本文將全面解析這些控件的含義,并手把手教你基于原理圖的配置方法。 一、tinymix基礎(chǔ)認(rèn)知 tinymix是Linux下操作ALSA音頻混音器(Mixer
    的頭像 發(fā)表于 03-10 08:03 ?6746次閱讀
    RK3576+<b class='flag-5'>ES</b>8388<b class='flag-5'>音頻</b>開發(fā):tinymix控件全<b class='flag-5'>解析</b>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    揭秘,瑞芯微全系擁抱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 ?1530次閱讀
    揭秘,瑞芯微全系擁抱<b class='flag-5'>Linux</b> <b class='flag-5'>6.1</b><b class='flag-5'>內(nèi)核</b>的底層邏輯
    岳阳县| 临安市| 邵武市| 台北县| 秦安县| 八宿县| 彭泽县| 四会市| 舞钢市| 寿宁县| 涟源市| 兰考县| 昭通市| 清水县| 宜兰县| 桑植县| 江陵县| 丹凤县| 宜黄县| 南召县| 镇雄县| 手游| 山东省| 长海县| 甘德县| 十堰市| 平泉县| 久治县| 荆门市| 湖南省| 康马县| 光山县| 墨脱县| 黔西县| 汽车| 克什克腾旗| 抚顺县| 绍兴县| 宝丰县| 都江堰市| 武邑县|