[Waveshare 1.75] ES7210 TDM 四槽输入需按 MMR 顺序供 AFE/WakeNet 使用
背景
Waveshare ESP32-S3-Touch-AMOLED-1.75 的 ES7210 使用四槽 TDM 输入。Waveshare 当前官方硬件参考明确标注该板实际串行槽位顺序为:
MIC1 / MIC3(ES8311 回放参考)/ MIC2 / MIC4(未连接)其官方 1.75 Xiaozhi 语音实现则将 AFE 输入定义为 16 kHz、16-bit、三通道 MMR:
MIC1 / MIC2 / ES8311 回放参考(MIC3)当前上游实现
当前 main/boards/waveshare/esp32-s3-touch-amoled-1.75/esp32-s3-touch-amoled-1.75.cc 仅向 BoxAudioCodec 传入 AUDIO_INPUT_REFERENCE。通用 BoxAudioCodec 虽初始化 ES7210 的四槽 TDM,但 input_reference=true 时逻辑输入通道数为 2,输入打开时也只请求前两个掩码;没有针对该板把四槽流转换成 AFE 所需的 MMR 三通道数据。
因此,MIC2 和回放参考的串行槽位/逻辑通道不一定能按该板 AFE 预期被消费,可能影响设备侧 AEC、WakeNet 与语音前端稳定性。
本地验证
我们仅对该 1.75 板型做了窄范围适配:读取四个 TDM 槽位,丢弃未连接的 MIC4,并重排为 MIC1 / MIC2 / MIC3(reference) 后送入 AFE。实机日志确认三通道 MMR 输入;在同一设备上,唤醒与后续识别表现明显改善。
这不是严格的量化基准,因而不主张直接以该观察判断通用音频代码有缺陷;但它与 Waveshare 当前官方 1.75 BSP/Xiaozhi 示例的板级约定一致。
建议
建议维护者评估是否为 waveshare-esp32-s3-touch-amoled-1.75 增加板型限定的音频布局适配:
- 保持其他使用
BoxAudioCodec的板型不变; - 对该板请求完整四槽 TDM;
- 仅在 AFE/AEC 路径将数据重排为
MIC1 / MIC2 / reference; - 明确 MIC4 未连接,并为该板增加启动日志/最小回归测试。
参考
- Waveshare 硬件参考(I2S audio interface 与 TDM slot order):https://github.com/waveshareteam/ESP32-S3-Touch-AMOLED-1.75/blob/main/HARDWARE_REFERENCE.md
- Waveshare 官方 Xiaozhi 音频前端(
AFE_INPUT_FORMAT = "MMR",16 kHz,3 路):https://github.com/waveshareteam/ESP32-S3-Touch-AMOLED-1.75/blob/main/firmware/brookesia/components/XiaozhiApp/XiaozhiAudioProcessor.cpp - 受影响上游板型文件:
main/boards/waveshare/esp32-s3-touch-amoled-1.75/esp32-s3-touch-amoled-1.75.cc - 受影响通用 codec:
main/audio/codecs/box_audio_codec.cc
如维护者认可方向,我可以整理为只影响 1.75 板型的最小 PR。
Source: 78/xiaozhi-esp32