基于虾哥Xmini-C3开发环境的JY6311驱动移植及效果优化
基于<虾哥开源的 ESP32 小智聊天机器人项目>集成JY6311驱动
1. 背景
基于目前ESP32平台的小智聊天机器人比较火,以及个人对这方面比较感兴趣,也一直从事相关音频方向的技术开发,本人淘了一块虾哥Xmini-C3开发板回来试用研究,购买链接如下:
小智AI机器人智能语音聊天虾哥Xmini-C3开发板已接入DeepSeek豆包-淘宝网
2. 介绍
虾哥Xmini-C3开发板是一个由虾哥开源的 ESP32 项目,github地址如下:
78/xiaozhi-esp32: An MCP-based chatbot | 一个基于MCP的聊天机器人
3.硬件
开发板硬件效果如下图所示:

4.开发
开发板买回来后,迫不及待地上电开机配网试用了一下效果,聊天对话交流这些都还不错,但是让它播放歌曲的时候,明显感觉声音比较沉闷,音量调到稍大一些时就有明显的破音,严重影响体验,激起了我改造它的兴趣。
4.1 首先声音比较沉闷怀疑是不是喇叭效果不行,换了个音腔好一点的喇叭,如下图所示:

更换喇叭后效果确实改善一点点,但还是没有达到理想的效果,下载了github下的开发环境,下一步打算调一下EQ看看;
4.2 看板子上使用的音频codec是顺芯的ES8311,下载它的datasheet来研究了一番,发现它的EQ调节只支持一段,可调节的效果比较有限,如简单拉高一下低频什么的,还是达不到想要的效果,只能再想想其他办法。
网上搜索了解了一下,无意间看到晶益微公司官网上有个JY6311刚好跟ES8311是PinToPin的,并且主要是它的DAC EQ支持3段调节,能够满足常用的EQ效果调节需求,果断在官网申请了样片并下载了相关的datasheet以及申请驱动支持包等。
参照ES8311提前把驱动移植进了开发环境,并按JY6311的EQ调节工具相关说明调节了一版EQ和DRC参数集成到了驱动里面。芯片到手后立刻焊接起来听了一下效果,果然调节了3段EQ后声音没那么沉闷了,人声比较突出,低音也比较强劲,并且由于使用DRC调节了增益曲线,解决了破音问题,听起来舒服多了, 感觉比我的智能音箱效果还要好一些。

5. JY6311驱动移植简要步骤
下面简单介绍一下上面的基于虾哥开源的xiaozhi-esp32-main开发环境移植JY6311驱动的简要步骤(JY6311驱动支持包可到晶益微官网申请下载)(此处codec驱动直接移植到managed_components目录下,若espressif__esp_codec_dev放在components目录下,请参考移植到对应目录下即可):
5.1 拷贝jy6311驱动文件到相关目录
- 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev\device目录下新建jy6311目录,把jy6311.c、jy6311.h、jy6311_user_cfg.h三个文件拷贝到jy6311目录下,如下两图所示:


- 把jy6311_codec.h头文件拷贝到xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev\device\include目录下,如下图所示:

- 把jy6311_audio_codec.cc和jy6311_audio_codec.h拷贝到xiaozhi-esp32-main\main\audio_codecs目录下,如下图所示:

5.2 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev目录下的Kconfig文件中增加jy6311驱动组件内核编译选项配置,如下图所示:

代码如下:
config CODEC_JY6311_SUPPORT
bool "Support JY6311 Codec Chip"
default y
help
Enable this option to support codec JY6311.
5.3 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev目录下的CMakeLists.txt文件中增加jy6311驱动组件源码编译选项配置,如下图所示:

代码如下:
if (CONFIG_CODEC_JY6311_SUPPORT)
list(APPEND COMPONENT_SRCS device/jy6311/jy6311.c)
endif()
5.4 在xiaozhi-esp32-main\managed_components\espressif__esp_codec_dev\include目录下esp_codec_dev_defaults.h文件中增加包含jy6311_codec.h头文件,如下图所示:

代码如下:
#ifdef CONFIG_CODEC_JY6311_SUPPORT
#include "jy6311_codec.h"
#endif
5.5 在xiaozhi-esp32-main\main\boards\xmini-c3目录下config.h文件中增加AUDIO_CODEC_JY6311_ADDR宏定义配置,如下图所示:

代码如下:
#define AUDIO_CODEC_JY6311_ADDR JY6311_CODEC_DEFAULT_ADDR
5.6 在xiaozhi-esp32-main\main\boards\xmini-c3目录下xmini_c3_board.cc文件中增加包含audio_codecs/jy6311_audio_codec.h头文件和创建Jy6311AudioCodec对象实例的代码,如下两图所示:


代码如下:
#include "audio_codecs/jy6311_audio_codec.h"
static Jy6311AudioCodec audio_codec(
codec_i2c_bus_,
I2C_NUM_0,
AUDIO_INPUT_SAMPLE_RATE,
AUDIO_OUTPUT_SAMPLE_RATE,
AUDIO_I2S_GPIO_MCLK,
AUDIO_I2S_GPIO_BCLK,
AUDIO_I2S_GPIO_WS,
AUDIO_I2S_GPIO_DOUT,
AUDIO_I2S_GPIO_DIN,
AUDIO_CODEC_PA_PIN,
AUDIO_CODEC_JY6311_ADDR);
return &audio_codec;
5.7 在xiaozhi-esp32-main\main目录下的CMakeLists.txt文件中增加jy6311_audio_codec.cc文件的编译选项配置,如下图所示:

代码如下:
"audio_codecs/jy6311_audio_codec.cc"
6 分享
效果改造好一点后满足感油然而生,想着目前这个小智聊天机器人最近比较火,把改造后的成果分享出来和大家一起共享,也欢迎其他技术爱好者提出其他宝贵建议并持续开发优化。
上面基于虾哥Xmini-C3开发环境(V1.7.6版本)移植好JY6311驱动的开发环境也上传到了github上,链接地址如下:
Clover-Luckily/xiaozhi-esp32-jy6311: xiaozhi-esp32 with jy6311
开发环境的搭建使用等请参考虾哥Xmini-C3的开发环境使用即可,github地址上面已经给出;
另附珠海晶益微电子有限公司的官网地址如下,可供下载datasheet、申请样片和驱动支持包等:
7 参数对比
基于这款产品是使用电池的,对功耗比较在乎,特意测量了一下功耗,发现jy6311的功耗完全出乎我的意料,在播放+录音场景下只有2.8mA左右,好奇功耗如此之低该不会是以牺牲性能为代价吧,特意参考两款codec的datasheet简单对比了一下主要性能参数,发现是我想多了,jy6311的性能和功耗都比es8311的要更好,并且jy6311还集成了更多的实用模块,如LDOs、PLL、MICBIAS等。在这个性能层面上能够做到这样的低功耗,在国内也算是首屈一指了,感觉只有TI和ADI的新一代产品才有如此的性能与功耗表现。
以下简单罗列了一下这两款codec的主要性能参数对比,仅供参考:
| 参数 | JY6311 | ES8311 |
| 声道数 | 单声道 | 单声道 |
| 集成LDOs | 有 | 无 |
| ADC分辨率 | 24位 | 24位 |
| DAC分辨率 | 24位 | 24位 |
| 采样率 | 8-192K | 8-96K |
| ADC信噪比 | 106dB | 100dB |
| DAC信噪比 | 110dB | 110dB |
| ADC THD+N | -92dB | -93dB |
| DAC THD+N | -96dB | -80dB |
| 工作电压 | 1.8-3.3V | 1.8-3.3V |
| 功耗(播放+录音) | 5mW | 14mW |
| ADC PGA增益范围 | 0~42dB | 0~30dB |
| MICBIAS输出 | 1.8-2.5V | 无 |
| PLL精准频率 | 支持 | 无 |
| ADC EQ调节 | 1段 | 1段 |
| ADC DRC调节 | 支持4点 | 支持2点 |
| DAC EQ调节 | 3段 | 1段 |
| DAC DRC调节 | 支持4点 | 支持2点 |
更多推荐




所有评论(0)