# esp32_tas5805m_a2dp **Repository Path**: chging/esp32_tas5805m_a2dp ## Basic Information - **Project Name**: esp32_tas5805m_a2dp - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-05 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ESP32-WROVER-E + TAS5805M 蓝牙双喇叭测试工程 本工程基于用户提供的《小搭-音箱子系统设计方案 v1.5》,实现手机蓝牙音乐播放到 TAS5805M 的可烧录测试程序。 > 版本说明:`v5.5.1` 是 ESP-IDF 版本,不是 ESP-ADF 版本。本工程使用 ESP-IDF v5.5.1,并复用 ESP-ADF `release/v2.x` 的 `audio_pipeline`、`a2dp_stream` 与 `i2s_stream_idf5` 源码接口。 ## 数据通路 ```text 手机 A2DP / SBC | v ADF a2dp_stream(输出 16-bit 双声道 PCM) | v two_way_crossover L/R 混合为 mono 左声道:LR4 60 Hz 高通 + LR4 4 kHz 低通 -> TAS OUT_A -> 中低音喇叭 右声道:LR4 4 kHz 高通 -> TAS OUT_B -> 高音喇叭 | v ADF i2s_stream(ESP32 为 I2S Master) | v TAS5805M(ESP-ADF 官方驱动、硬件音量、静音) ``` 默认是二分频单声道测试模式。也可在 `idf.py menuconfig` 的 `TAS5805M A2DP test` 菜单选择: - `Two-way mono`:默认,中低音 + 高音; - `Stereo`:两个全频喇叭的左右声道; - `Dual mono`:两个全频喇叭播放相同单声道。 严禁在 Stereo 或 Dual mono 模式直接连接没有硬件保护的裸高音单元。 ## 默认接线 | ESP32-WROVER-E | TAS5805M | 说明 | |---|---|---| | GPIO26 | SCLK / BCLK(pin 7) | 建议 ESP32 端串 22–33 Ω | | GPIO25 | LRCLK(pin 6) | 建议 ESP32 端串 22–33 Ω | | GPIO22 | SDIN(pin 8) | 建议 ESP32 端串 22–33 Ω | | GPIO18 | SDA(pin 10) | 外接 2.2–4.7 kΩ 上拉到 3.3 V | | GPIO23 | SCL(pin 11) | 外接 2.2–4.7 kΩ 上拉到 3.3 V | | GPIO21 | PDN(pin 12) | DVDD 域控制信号 | | GPIO19 | ADR/FAULT(pin 3) | 按方案用 4.70 kΩ 上拉到 DVDD,地址为 0x2C;启动后切换为 FAULT | | GND | DGND/PGND/AGND | ESP32 与功放共地 | 电源和功率级仍须按原理图实现:DVDD=3.3 V、PVDD=12 V、Bootstrap 电容、PVDD 就近去耦以及四路输出 LC 滤波。 喇叭是 BTL 差分连接: - `OUT_A+ / OUT_A-` 经各自 LC 支路后接中低音喇叭; - `OUT_B+ / OUT_B-` 经各自 LC 支路后接高音喇叭; - 任一喇叭负端都不能接 GND,也不能把两个负端并在一起。 即使已有软件分频,高音支路也建议保留串联保护电容,避免程序异常或上电瞬态损坏高音。 ## SDK 与编译 需要: - ESP32-WROVER-E 或经典 ESP32(必须支持 Bluetooth Classic); - ESP-IDF v5.5.1; - ESP-ADF `release/v2.x`; - 4 MB Flash。 PowerShell 示例: ```powershell $env:IDF_PATH = 'C:\Espressif\frameworks\esp-idf-v5.5.1' $env:ADF_PATH = 'C:\Espressif\frameworks\esp-adf' . "$env:IDF_PATH\export.ps1" idf.py set-target esp32 idf.py build idf.py -p COMx flash monitor ``` 首次执行 `set-target` 会重新生成 `sdkconfig`,工程默认配置位于 `sdkconfig.defaults`,app 分区为 3 MiB。 工程在 `components/` 中提供最小 ADF 组件封装,只编译本测试所需的 ADF 源码,避免把编解码器、网络播放等无关组件全部带入。TAS5805M 组件直接编译 ESP-ADF `esp_codec_dev` 中的官方 `device/tas5805m`、I2C/GPIO 控制和音量实现;本工程代码只负责板级引脚、上电顺序及 Audio HAL 适配。`ADF_PATH` 必须指向含有 `components/esp_codec_dev/device/tas5805m` 的 ESP-ADF 目录。 ## 首次上电步骤 1. 先不接最终喇叭,使用限流 12 V 电源。 2. 检查 TAS5805M 在 I2C 地址 `0x2C` 应答。 3. 检查 BCLK、LRCLK 和 SDIN 波形;TAS5805M 在时钟建立后才离开 Hi-Z。 4. 优先接假负载或廉价全频测试单元。 5. 手机搜索并连接 `Xiaoda-TAS5805M`,从低音量播放扫频。 6. 确认 OUT_A 只有中低频、OUT_B 只有高频,再连接最终单元。 7. 串口出现 `Bluetooth PCM: ...` 且格式为 16-bit/2ch 后,程序才会解除功放静音。 ## 功放离线与自动重试 TAS5805M 在启动时没有 I²C 应答不会再触发 `ESP_ERROR_CHECK` 或重启: - A2DP Pipeline 和蓝牙可发现状态保持运行; - 后台 `tas_supervisor` 默认每 3 秒重试一次功放初始化; - 功放离线期间的手机音量和静音命令只缓存,不访问失联的 I²C 总线; - TAS5805M 恢复应答后,官方驱动重新发送完整寄存器/DSP 配置并应用缓存的音量和静音状态; - 重试间隔可在 `idf.py menuconfig -> TAS5805M A2DP test` 修改。 离线时预期看到: ```text W (...) a2dp_tas5805m: TAS5805M offline (ESP_ERR_TIMEOUT); retrying in 3000 ms ``` 成功恢复后预期看到: ```text I (...) tas5805m_board: loading Espressif ESP-ADF TAS5805M register/DSP program I (...) tas5805m_board: official driver ready: volume=70% (... dB), muted=1 I (...) a2dp_tas5805m: TAS5805M online with the official ESP-ADF driver ``` ## TAS5805M 官方驱动集成 - 使用 ESP-ADF `esp_codec_dev` 的 `tas5805m_codec_new()` 和官方完整寄存器/DSP 配置表,不再保留工程原来的少量手写初始化寄存器; - I2C 菜单填写标准 7-bit 地址 `0x2C`;板级适配器转换为 `esp_codec_dev` 控制层使用的 8-bit 写地址 `0x58`,IDF 5.x I2C 传输层再正确换回 7-bit 地址; - I2S 先启动 BCLK/LRCLK,等待 20 ms 后才释放 PDN 并加载配置,满足功放启动时需要有效时钟的条件; - 手机 AVRCP 绝对音量 `0..127` 先归一化为 Audio HAL 的 `0..100`,再按线性幅度换算成分贝后写入数字音量寄存器;默认 100% 对应 0 dB(`DIG_VOL=0x30`)、50% 约 -6 dB、25% 约 -12 dB。旧版错误地按每 1% 固定 0.5 dB 换算,导致 25% 变成 -37.5 dB、几乎不可闻; - 如需保护扬声器,可在 menuconfig 的 `Attenuation at phone volume 100%` 中重新增加满音量衰减; - 驱动根据 `TAS5805M power-stage supply PVDD` 自动覆盖通用表的 `AGAIN=0x13`。默认 12 V 使用 `AGAIN=0x10`(-8 dB、0 dBFS 对应约 11.74 Vpeak),避免通用表在 12 V 硬件上额外损失输出摆幅; - ESP32 分频前默认增加 6 dB 前级,并使用快速软限幅将 PCM 保持在 16-bit 满幅内;可在 menuconfig 的 `DSP preamp gain before soft limiter` 调成 0..12 dB; - 播放时每 5 秒报告输入及 OUT_A/OUT_B 的 peak/RMS dBFS、软限幅占比,并回读功放电源状态、时钟、`DIG_VOL`、`AGAIN` 和故障寄存器,便于区分数字电平不足与供电/负载/热限制; - 官方配置加载后保持静音,确认 A2DP PCM 格式并设置 I2S 时钟后解除静音; - 关机先静音并等待淡出,再拉低 PDN。 官方表提供可工作的通用初始化。与实际扬声器、箱体和 PVDD 匹配的 Hybrid modulation、EQ、limiter 与内部 crossover 仍应由 PurePath Console 3 生成后进行整表替换;不能靠零散修改单个 bit 作为量产调音。 ## 调音说明 默认 60 Hz 与 4 kHz 是方案中的 bring-up 参数,不是最终声学参数。最终量产参数必须在实际箱体、实际单元和目标声压下测量频响、相位、阻抗和热表现后确定。 参考资料: - [ESP-ADF 入门文档](https://docs.espressif.com/projects/esp-adf/en/latest/get-started/) - [ESP-ADF 官方源码](https://github.com/espressif/esp-adf) - [ESP-ADF Releases](https://github.com/espressif/esp-adf/releases) - [TI TAS5805M 数据手册](https://www.ti.com/lit/ds/symlink/tas5805m.pdf) - [TI TAS5805M Process Flows 应用说明](https://www.ti.com/lit/an/sloa263a/sloa263a.pdf)