2828| ES7243 | N| Y|
2929| ES7243E | N| Y|
3030| ES8156 | N| Y|
31+ | CJC8910 | Y| Y|
3132
3233
3334## 架构预览
3435
35- 以编解码器设备 (ES8311) 为例,下面分别介绍硬件框图和软件架构。
36+ 以编解码器设备 (ES8311) 为例,下面分别介绍硬件框图和软件架构。
3637编解码器设备 (ES8311) 和主芯片(ESP32-S3) 之间的硬件连接简图如下:
3738``` mermaid
3839graph LR;
@@ -79,7 +80,7 @@ class audio_codec_ctrl_if_t {
7980 open()
8081 read_reg()
8182 write_reg()
82- close()
83+ close()
8384}
8485
8586class audio_codec_gpio_if_t {
@@ -134,19 +135,19 @@ audio_codec_if_t ..> esp_codec_dev
134135audio_codec_data_if_t ..> esp_codec_dev
135136```
136137
137- 通讯通道抽象为两种接口:
138+ 通讯通道抽象为两种接口:
138139* ` audio_codec_ctrl_if_t ` 控制接口:
139- 主要提供 `read_reg` 和 `write_reg` API 来配置编解码器设备
140+ 主要提供 `read_reg` 和 `write_reg` API 来配置编解码器设备
140141 常用控制通道包括 I2C, SPI 等
141142* ` audio_codec_data_if_t ` 数据接口:
142- 主要提供 `read` 和 `write` API 用来交换音频数据
143+ 主要提供 `read` 和 `write` API 用来交换音频数据
143144 常用数据通道包括 I2S, SPI 等
144145
145146` esp_codec_dev ` 为用户提供便捷的上层 API 来实现播放和录音功能。它是由 ` audio_codec_data_if_t ` 和 ` audio_codec_if_t ` 组成。` audio_codec_if_t ` 对编解码器控制操作进行抽象,通过编解码器特有的配置参数构建(由 ` audio_codec_ctrl_if_t ` 和` audio_codec_gpio_if_t ` 通过 ` es8311_codec_cfg_t ` 进行配置)。` audio_codec_gpio_if_t ` 对 IO 控制进行抽象,以适配主控 IO 或者扩展芯片 IO, 在编解码器内部进行调用用以匹配特有的设定时序。
146147
147148## 解码器音量设定
148149
149- 音量统一通过 API ` esp_codec_dev_set_out_vol ` 进行设定。
150+ 音量统一通过 API ` esp_codec_dev_set_out_vol ` 进行设定。
150151` esp_codec_dev ` 支持以下音量设定实现:
1511521 . 通过调节音量寄存器实现
1521532 . 在硬件不支持音量调节下,可以使用内置的软件音量实现 ` audio_codec_new_sw_vol `
@@ -159,13 +160,13 @@ audio_codec_data_if_t ..> esp_codec_dev
159160## 使用方法
160161
161162以 ES8311 为例,下面将演示播放和录音的具体步骤
162- 1 . 为编解码器设备的控制和数据总线安装驱动,可参考[ test_board.c] ( test_apps/codec_dev_test/main/test_board.c )
163+ 1 . 为编解码器设备的控制和数据总线安装驱动,可参考[ test_board.c] ( test_apps/codec_dev_test/main/test_board.c )
163164 ```c
164165 ut_i2c_init(0);
165166 ut_i2s_init(0);
166167 ```
167-
168- 2 . 为编解码器设备实现控制接口,数据接口和 GPIO 接口 (使用默认提供的接口实现)
168+
169+ 2 . 为编解码器设备实现控制接口,数据接口和 GPIO 接口 (使用默认提供的接口实现)
169170 ```c
170171 audio_codec_i2s_cfg_t i2s_cfg = {
171172 #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0)
@@ -181,7 +182,7 @@ audio_codec_data_if_t ..> esp_codec_dev
181182 const audio_codec_gpio_if_t *gpio_if = audio_codec_new_gpio();
182183 ```
183184
184- 3 . 基于控制接口和 ES8311 特有的配置实现 ` audio_codec_if_t ` 接口
185+ 3 . 基于控制接口和 ES8311 特有的配置实现 ` audio_codec_if_t ` 接口
185186 ```c
186187 es8311_codec_cfg_t es8311_cfg = {
187188 .codec_mode = ESP_CODEC_DEV_WORK_MODE_BOTH,
@@ -193,7 +194,7 @@ audio_codec_data_if_t ..> esp_codec_dev
193194 const audio_codec_if_t *out_codec_if = es8311_codec_new(&es8311_cfg);
194195 ```
195196
196- 4 . 通过 API ` esp_codec_dev_new ` 获取 ` esp_codec_dev_handle_t ` 句柄
197+ 4 . 通过 API ` esp_codec_dev_new ` 获取 ` esp_codec_dev_handle_t ` 句柄
197198 参考下面代码用获取到的句柄来进行播放和录制操作:
198199 ```c
199200 esp_codec_dev_cfg_t dev_cfg = {
@@ -221,8 +222,8 @@ audio_codec_data_if_t ..> esp_codec_dev
221222
222223## 客制化编解码器设备
223224
224- 1 . 实现接口 ` audio_codec_ctrl_if_t ` 和 ` audio_codec_data_if_t `
225- 如果使用 I2C 总线作控制,I2S 总线做数据传输,可以使用默认的接口实现:
225+ 1 . 实现接口 ` audio_codec_ctrl_if_t ` 和 ` audio_codec_data_if_t `
226+ 如果使用 I2C 总线作控制,I2S 总线做数据传输,可以使用默认的接口实现:
226227 ` audio_codec_new_i2c_ctrl ` 和 ` audio_codec_new_i2s_data `
227228
2282292 . 在第一步的基础上实现接口 ` audio_codec_if_t `
0 commit comments