rk3588 适配音频解码芯片 es8388
在 RK3588 这种高性能 SoC 平台上,选择 ES8388 作为音频解码芯片(Audio Codec)是一个非常经典且平衡的选择。这种组合在嵌入式开发、单板计算机(如 Orange Pi, Rock 5B 等)以及工业控制领域非常常见。使用 ES8388 的主要优点:
1. 成本效益极高 (Cost-Effectiveness)
ES8388 是一款国产(苏州顺芯)的高性能、低功耗立体声音频 Codec。
- 低单价: 相比于瑞昱(Realtek)或德州仪器(TI)的同类芯片,ES8388 的采购成本极具竞争力。
- 外围电路简单: 它的集成度高,需要的电容、电阻等被动器件较少,能有效降低整体 BOM 成本。
2. 成熟的驱动支持 (Driver Maturity)
由于 ES8388 在 Rockchip 平台(从 RK3288, RK3399 到现在的 RK3588)上已经使用了多年,其驱动程序极其稳定:
- 原生支持: Rockchip 的 SDK(Linux 内核、Android)中已经包含了完善的 ES8388 驱动。
- 调试门槛低: 开发者在配置 Device Tree (DTS) 时,可以直接参考官方示例,基本能实现"开箱即用",极大缩短了研发周期。
3. 接口匹配度高 (Interface Compatibility)
ES8388 的硬件接口与 RK3588 的音频控制器完美对齐:
- I2S/PCM: 支持标准的 I2S 接口,能够轻松处理多采样率的音频数据。
- I2C 控制: 通过标准的 I2C 接口进行寄存器配置,逻辑清晰。
- 录播一体: 具备 2 通道 ADC(录音)和 2 通道 DAC(播放),正好满足大多数通用设备对接耳机、麦克风的需求。
4. 功耗控制出色 (Low Power Consumption)
RK3588 虽然性能强劲,但在移动设备或嵌入式网关中,功耗依然是关键指标。
- ES8388 设计初衷即包含便携式应用,具备多种省电模式(Power Management)。
- 在非活动状态下,可以按模块关闭模拟/数字电路,非常适合对散热和续航有要求的 RK3588 终端。
5. 功能实用,覆盖主流需求
对于大多数 RK3588 的应用场景(如 AI 盒子、边缘计算服务器、商显屏),ES8388 提供的功能已经足够:
- 支持多重模拟增益调节: 方便适配不同灵敏度的麦克风。
- 内置混音器: 支持灵活的音频路径路由。
作者:炭烤毛蛋 ,点击博主了解更多。
文章目录
- [rk3588 适配音频解码芯片 es8388](#rk3588 适配音频解码芯片 es8388)
-
-
- [1. 成本效益极高 (Cost-Effectiveness)](#1. 成本效益极高 (Cost-Effectiveness))
- [2. 成熟的驱动支持 (Driver Maturity)](#2. 成熟的驱动支持 (Driver Maturity))
- [3. 接口匹配度高 (Interface Compatibility)](#3. 接口匹配度高 (Interface Compatibility))
- [4. 功耗控制出色 (Low Power Consumption)](#4. 功耗控制出色 (Low Power Consumption))
- [5. 功能实用,覆盖主流需求](#5. 功能实用,覆盖主流需求)
-
- [1. rk3588 es8388 原理图](#1. rk3588 es8388 原理图)
-
- [1.1 ES8388 核心原理图](#1.1 ES8388 核心原理图)
-
- [1.1.1 ES8388 核心供电网络](#1.1.1 ES8388 核心供电网络)
- [1.1.2 电源去耦与滤波电路](#1.1.2 电源去耦与滤波电路)
-
- 1) 1.8V 电源(VCCA1V8_CDDEC) 1.8V 电源(VCCA1V8_CDDEC))
- 2) 3.3V 模拟电源(AVDD3V3_CDDEC / VCCA3V3_CDDEC) 3.3V 模拟电源(AVDD3V3_CDDEC / VCCA3V3_CDDEC))
- [1.2 ES8388 HP](#1.2 ES8388 HP)
-
- [1.2.1 耳机供电](#1.2.1 耳机供电)
- [1.2.2 耳机关键元件](#1.2.2 耳机关键元件)
- [1.3 ES8388 电源汇总](#1.3 ES8388 电源汇总)
- [1.4 es8388 电源流向图](#1.4 es8388 电源流向图)
- [2. rk3588 es8388 内核配置](#2. rk3588 es8388 内核配置)
-
- [2.1 RK3588 ↔ ES8388](#2.1 RK3588 ↔ ES8388)
-
- [2.1.1🔌 RK3588 ↔ ES8388 物理连接示意图](#2.1.1🔌 RK3588 ↔ ES8388 物理连接示意图)
- [2.1.2 RK3588 ↔ ES8388 音频数据通道 (I2S 总线)](#2.1.2 RK3588 ↔ ES8388 音频数据通道 (I2S 总线))
- [2.1.3 RK3588 ↔ ES8388 控制配置通道 (I2C 总线)](#2.1.3 RK3588 ↔ ES8388 控制配置通道 (I2C 总线))
- [2.1.4 RK3588 ↔ ES8388 同步基准主时钟(MCLK)](#2.1.4 RK3588 ↔ ES8388 同步基准主时钟(MCLK))
- [2.1.5 RK3588 ↔ ES8388 辅助控制信号 (GPIO to CE)](#2.1.5 RK3588 ↔ ES8388 辅助控制信号 (GPIO to CE))
- [2.1.6 模拟音频输入/输出](#2.1.6 模拟音频输入/输出)
- [2.2 rk3588 ES8388 内核设备树](#2.2 rk3588 ES8388 内核设备树)
- [3. rk3588 es8388 HAL 配置](#3. rk3588 es8388 HAL 配置)
- 结语
1. rk3588 es8388 原理图
1.1 ES8388 核心原理图

根据 ES8388 的原理图,对 ES8388 音频编解码器及其相关电路的供电方案进行分析。
1.1.1 ES8388 核心供电网络
从第一张原理图可以看出,ES8388 使用了三组主要的电源网络:
| 网络标签 | 典型电压 | 作用域 | 对应ES8388引脚(推测) |
|---|---|---|---|
VCCA1V8_CDDEC |
1.8V | 数字核心 / 数字IO 电源(DVDD) | 引脚 2 (DVDD) 或 3 (PVDD) |
VCCA3V3_CDDEC |
3.3V | 数字IO / 模拟电源(AVDD) | 引脚 17 (AVDD) |
AVDD3V3_CDDEC |
3.3V | 模拟电源(AVDD) | 引脚 17 (AVDD) |
注意:
AVDD3V3_CDDEC与VCCA3V3_CDDEC可能是同一网络的不同命名,或者通过磁珠/电阻单点连接。原理图中两者同时出现,通常表示模拟和数字 3.3V 分开走线,最终在芯片附近汇合。
1.1.2 电源去耦与滤波电路
1) 1.8V 电源(VCCA1V8_CDDEC)
- 去耦电容 :
C176(4.7µF,X5R,16V)------ 大容量储能,滤除低频纹波C156(100nF,X5R,16V)------ 滤除中高频噪声C127(100nF,X5R,16V)------ 靠近芯片引脚放置
- 布局特点:大小电容并联,覆盖宽频段干扰。
2) 3.3V 模拟电源(AVDD3V3_CDDEC / VCCA3V3_CDDEC)
- 去耦电容 :
C153(4.7µF,X5R,10V)C145(100nF,X5R,10V)- 另外在芯片
Analog supply区域附近还标注了C133、C161等多个电容(值未完全给出,推测为 100nF 或 1µF)
- 隔离电阻 :
R113(4.7Ω,5%)------ 通常用作 RC 低通滤波 或 电源隔离,与电容组成 π 型滤波,防止数字噪声窜入模拟电源。
1.2 ES8388 HP

1.2.1 耳机供电
耳机部分原理图主要围绕耳机座(CTIA 标准)和检测电路,涉及以下供电:
| 网络 | 电压 | 用途 |
|---|---|---|
VCCA3V3_CODECO |
3.3V | 为耳机放大器或检测电路提供电源 |
VCC_1V8_S0 |
1.8V | 为电平转换、MOSFET 栅极控制或上拉提供逻辑电压 |
1.2.2 耳机关键元件
- HP_DET_L :耳机插入检测信号,通过电阻
R134(100kΩ)上拉至VCC_1V8_S0,默认高电平;插入时被耳机插座的机械开关拉低,产生中断。 - MIC 偏置 :麦克风偏置电压通常由 ES8388 内部提供(
MICBIAS),无需外部供电。图中未直接显示,但通过INPPHONEMIC网络连接至芯片。 - 输出耦合 :
LOUT1和ROUT1通过电容C193(22µF)、C202(22µF)耦合到耳机座,这些电容的耐压(6.3V或10V)高于音频交流摆幅,正常工作。 - ESD 保护 :
Q22、Q233(WNM2016-3 / WMM2016-3)可能是 低电容 TVS 二极管阵列 或 MOSFET 开关 ,用于耳机接口的静电保护和信号切换。其供电由VCC_1V8_S0提供。
1.3 ES8388 电源汇总
| 电源轨 | 电压 | 主要负载 | 去耦方式 | 备注 |
|---|---|---|---|---|
| VCCA1V8_CDDEC | 1.8V | ES8388 数字核心 | 4.7µF + 100nF | 低噪声,避免与模拟地耦合 |
| VCCA3V3_CDDEC | 3.3V | ES8388 数字IO | 未明确(可能与模拟共用) | 建议加磁珠与模拟电源隔离 |
| AVDD3V3_CDDEC | 3.3V | ES8388 模拟电路(ADC/DAC/PLL) | 4.7µF + 100nF + 4.7Ω RC | 关键:需极低纹波,建议 LC 或 π 型滤波 |
| VCCA3V3_CODECO | 3.3V | 耳机检测、外部开关 | 100nF(C209) | 可与 AVDD 同源,但需单独滤波 |
| VCC_1V8_S0 | 1.8V | 上拉电阻、MOSFET 逻辑 | 100nF(C200) | 可由系统 1.8V LDO 提供 |
1.4 es8388 电源流向图
系统电源
├─ 1.8V LDO ──┬─ VCCA1V8_CDDEC ──→ ES8388 DVDD/PVDD
│ └─ VCC_1V8_S0 ──→ 耳机检测上拉、ESD保护逻辑
└─ 3.3V LDO ──┬─ AVDD3V3_CDDEC ──(4.7Ω+4.7µF+100nF)──→ ES8388 AVDD
└─ VCCA3V3_CODECO ──(100nF)──→ 耳机座供电、检测电路
2. rk3588 es8388 内核配置
ES8388 典型工作流程:
- 系统启动:RK3588 通过 I2C 总线配置 ES8388 的寄存器,设置采样率、数据格式、音频通路(例如将麦克风输入路由到 ADC,将 DAC 输出路由到耳机)。
- 播放音乐:RK3588 通过 I2S 总线持续发送 PCM 音频数据;ES8388 接收后转换为模拟信号输出。
- 调节音量:用户滑动音量条 → RK3588 通过 I2C 总线写入 ES8388 的音量控制寄存器,实时改变放大增益。
- 切换场景:插入耳机 → RK3588 检测到 GPIO 中断 → 通过 I2C 总线重新配置 ES8388 的输出路由(关闭扬声器、开启耳机放大器)。
🧠 I2S I2C 两条总线如何协同工作?
| 总线 | 职责 | 数据方向 | 数据量 | 实时性要求 |
|---|---|---|---|---|
| I2S | 传输音频数据 | 双向全双工 | 高(每秒几兆位) | 极高(必须连续) |
| I2C | 传输控制命令 | 主→从(读写) | 低(字节级) | 低(可容忍毫秒级延迟) |
| 两条总线各司其职,互不干扰,共同实现了完整且灵活的音频系统。 |
2.1 RK3588 ↔ ES8388
2.1.1🔌 RK3588 ↔ ES8388 物理连接示意图
ES8388 音频编解码器
RK3588 SoC
I2S 总线
(含BCLK/LRCK/SDO/SDI)
I2C 总线
(含SCL/SDA)
MCLK 主时钟
GPIO → CE
I2S 控制器
(音频数据接口)
I2C 控制器
(音频控制接口)
通用输入输出
主时钟输出
I2S 从接口
(音频数据收发)
I2C 从接口
(寄存器配置)
控制使能引脚
主时钟输入
模拟音频输入/输出
麦克风/扬声器/耳机
麦克风
扬声器/耳机
在这个物理连接图中,我们将 I2S 和 I2C 分别视为两条独立且完整的总线,不再拆分成具体的信号线(如BCLK、LRCK、SDO、SDI 或 SCL、SDA)。这样更便于理解两个芯片之间的"接口级"关系。
2.1.2 RK3588 ↔ ES8388 音频数据通道 (I2S 总线)
- 角色定位 :RK3588 作为 I2S 主设备(Master) ,ES8388 作为 I2S 从设备(Slave)。
- 传输内容:数字音频流(PCM 数据)。
- 方向 :双向全双工 。
- 播放方向:RK3588 → ES8388(DAC 数据,用于扬声器/耳机)
- 录音方向:ES8388 → RK3588(ADC 数据,来自麦克风)
- 物理实现 :在硬件设计上,I2S 总线实际由 4 条独立信号线 组成,但在本图抽象为一条总线:
SCLK(位时钟):由 RK3588 产生,同步每个数据位。LRCK(左右声道时钟):由 RK3588 产生,指示当前数据属于左声道还是右声道。SDO(数据输出):RK3588 播放数据输出到 ES8388。SDI(数据输入):ES8388 录音数据输入到 RK3588。
- 典型参数:采样率 8kHz ~ 192kHz,位深度 16bit/24bit/32bit,BCLK 频率 = 采样率 × 位深 × 通道数。
2.1.3 RK3588 ↔ ES8388 控制配置通道 (I2C 总线)
- 角色定位 :RK3588 作为 I2C 主设备 ,ES8388 作为 I2C 从设备。
- 传输内容:控制命令和状态信息(如音量调节、音频通路切换、工作模式设置、寄存器读写)。
- 方向 :双向半双工(RK3588 发起读写操作,ES8388 响应)。
- 物理实现 :由 2 条信号线 组成,本图抽象为一条总线:
SCL(串行时钟):由 RK3588 产生。SDA(串行数据):双向数据线。
- I2C 设备地址 :ES8388 的 I2C 从地址通常为 0x10 或 0x11 ,具体取决于
CE引脚电平或硬件设计。 - 典型速率:100 kHz(标准模式)或 400 kHz(快速模式),足以满足音频控制命令的低频需求。
2.1.4 RK3588 ↔ ES8388 同步基准主时钟(MCLK)
- 连接 :RK3588 的
MCLK_OUT→ ES8388 的MCLK_IN。 - 作用:为 ES8388 提供精准的时钟基准,用于内部 PLL 生成采样时钟和 I2S 位时钟。
- 频率:通常是采样率的 256 倍或 384 倍(例如 48kHz 采样率时,MCLK = 12.288MHz 或 24.576MHz)。
- 必要性:没有稳定的 MCLK,ES8388 无法正确采样或转换音频数据。
2.1.5 RK3588 ↔ ES8388 辅助控制信号 (GPIO to CE)
- 连接 :RK3588 的一个通用 GPIO 引脚 → ES8388 的
CE(芯片使能/控制接口选择)。 - 功能 :
- 决定控制接口模式:CE 为低电平时,ES8388 工作于 I2C 模式;CE 为高电平时工作于 SPI 模式。在 RK3588 平台中,通常将 CE 拉低以使用 I2C 控制。
- 可能影响 I2C 地址:部分设计中,CE 的电平还会影响 I2C 从地址的最低有效位。
- 实现:RK3588 在系统初始化时通过 GPIO 输出固定电平,将 ES8388 锁定为 I2C 模式。
2.1.6 模拟音频输入/输出
- 输入(录音) :ES8388 的
LIN1/LIN2、RIN1/RIN2引脚连接麦克风(单声道或立体声)。 - 输出(播放) :ES8388 的
LOUT1/LOUT2、ROUT1/ROUT2引脚连接扬声器功放或耳机插孔。
模拟部分不属于数字总线,但它们是音频数据的最终目的地和来源。
2.2 rk3588 ES8388 内核设备树
废话不多说,接下来是内核设备树配置。
bash
/ {
es8388_sound: es8388-sound {
status = "okay";
compatible = "rockchip,multicodecs-card";
rockchip,card-name = "rockchip-es8388";
hp-det-gpio = <&gpio1 RK_PD5 GPIO_ACTIVE_LOW>;
io-channels = <&saradc 3>;
io-channel-names = "adc-detect";
keyup-threshold-microvolt = <1800000>;
poll-interval = <100>;
spk-con-gpio = <&gpio1 RK_PD3 GPIO_ACTIVE_HIGH>;
hp-con-gpio = <&gpio1 RK_PD2 GPIO_ACTIVE_HIGH>;
rockchip,pre-power-on-delay-ms = <30>;
rockchip,post-power-down-delay-ms = <40>;
rockchip,format = "i2s";
rockchip,mclk-fs = <256>;
rockchip,cpu = <&i2s0_8ch>;
rockchip,codec = <&es8388>;
rockchip,audio-routing =
"Headphone", "LOUT1",
"Headphone", "ROUT1",
"Speaker", "LOUT2",
"Speaker", "ROUT2",
"Headphone", "Headphone Power",
"Headphone", "Headphone Power",
"Speaker", "Speaker Power",
"Speaker", "Speaker Power",
"LINPUT1", "Main Mic",
"LINPUT2", "Main Mic",
"RINPUT1", "Headset Mic",
"RINPUT2", "Headset Mic";
pinctrl-names = "default";
pinctrl-0 = <&hp_det>;
play-pause-key {
label = "playpause";
linux,code = <KEY_PLAYPAUSE>;
press-threshold-microvolt = <2000>;
};
};
};
&i2c7 {
status = "okay";
es8388: es8388@11 {
status = "okay";
#sound-dai-cells = <0>;
compatible = "everest,es8388", "everest,es8323";
reg = <0x11>;
clocks = <&mclkout_i2s0>;
clock-names = "mclk";
assigned-clocks = <&mclkout_i2s0>;
assigned-clock-rates = <12288000>;
pinctrl-names = "default";
pinctrl-0 = <&i2s0_mclk>;
};
};
&i2s0_8ch {
status = "okay";
pinctrl-0 = <&i2s0_lrck
&i2s0_sclk
&i2s0_sdi0
&i2s0_sdo0>;
};
&pinctrl {
headphone {
hp_det: hp-det {
rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
};
编译后重新刷入固件,可以看到已经注册的声卡。
bash
cat /proc/asound/cards
0 [rockchipes8388c]: simple-card - rockchip,es8388-codec
rockchip,es8388-codec
3. rk3588 es8388 HAL 配置
Android 系统如果尚未配置 ES8388 音频解码芯片,需要在声卡列表增加 es8388 声卡选项。
bash
diff --git a/tinyalsa_hal/audio_hw.c b/tinyalsa_hal/audio_hw.c
index 0033bf3..cc98f34 100644
--- a/tinyalsa_hal/audio_hw.c
+++ b/tinyalsa_hal/audio_hw.c
@@ -291,7 +291,6 @@ struct dev_proc_info SPEAKER_OUT_NAME[] = /* add codes& dai name here*/
{"rockchipcx2072x", NULL,},
{"rockchipes8316c", NULL,},
{"rockchipes8323c", NULL,},
+ {"rockchipes8388c", NULL,},
{"rockchipes8396c", NULL,},
{"rockchiprk", NULL, },
{"rockchiprk809co", NULL,},
然后设置对应的音频路由,将 Android audio service 转换为 jason 配置,再经 HAL 传递到内核驱动。es8388 音频路由配置文件路径如下:
hardware/rockchip/audio/tinyalsa_hal/codec_config/es8388_config.h
结语
不枉博主详细讲解,欢迎订阅博主--炭烤毛蛋 。