fix(amp): mute the speaker before the 12V rail finishes rising

Hold master mute from shortly after the boost turns on through EQ setup, then let the chip fade in so boot does not pop.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-28 10:11:11 +08:00
parent 29507014f5
commit d7cd10eb08
3 changed files with 16 additions and 2 deletions

View File

@ -364,7 +364,10 @@ void System_AudioBringUp_Poll(void)
BSP_DreamCorePowerEnable(1);
BSP_BlueToothPowerEnable((uint8_t)(mGuiData[GUI_BL_SW].Current ? 1 : 0));
Power_LogRails("audio-up");
rt_thread_mdelay(480);
/* 12V 一开功放默认不静音,会有一声啪。数字电源起来后先静音,再等时钟和模拟电源 */
rt_thread_mdelay(20);
AD85020B_MasterMute(1);
rt_thread_mdelay(460);
if (!powon)
return;
AD85020B_Init();

View File

@ -383,6 +383,13 @@ static AD85020B_StatusTypeDef AD85020B_ApplyPrototypeEq(void)
return AD85020B_OK;
}
AD85020B_StatusTypeDef AD85020B_MasterMute(uint8_t mute)
{
AD85020B_I2C_Init();
return AD85020B_I2C_Write(AD85020B_REG_SCTL3,
mute ? AD85020B_SCTL3_MMUTE : 0x00);
}
/**
* @brief AD85020B 初始化
* @retval AD85020B_StatusTypeDef: 初始化结果
@ -401,9 +408,11 @@ AD85020B_StatusTypeDef AD85020B_Init(void)
if (status != AD85020B_OK) return status;
wk_delay_ms(20); // 等待复位完成(文档未明确,建议10~50ms)
/* 步骤3:复位后恢复正常模式(BIT5=1) */
/* 步骤3:复位后恢复正常模式(BIT5=1)。复位默认是不静音,立刻拉回主静音 */
status = AD85020B_I2C_Write(AD85020B_REG_SCTL6, AD85020B_SW_NORMAL);
if (status != AD85020B_OK) return status;
status = AD85020B_I2C_Write(AD85020B_REG_SCTL3, AD85020B_SCTL3_MMUTE);
if (status != AD85020B_OK) return status;
wk_delay_ms(10);
/* 步骤4:配置输入格式(文档SCTL1,默认I2S格式,0x00) */

View File

@ -37,6 +37,7 @@
#define AD85020B_REG_SCTL1 0x00 // 输入格式配置
#define AD85020B_REG_SCTL2 0x01 // 采样率配置
#define AD85020B_REG_SCTL3 0x02 // 静音控制
#define AD85020B_SCTL3_MMUTE 0x40 /* B6=1:主静音,退出时芯片做淡入 */
#define AD85020B_REG_MVOL 0x03 // 主音量控制
#define AD85020B_REG_SCTL4 0x0C /* EQ / DEQ / 音调;样机 0x90:EQ 开、左右独立 */
#define AD85020B_SCTL4_PROTO_EQ 0x90
@ -78,6 +79,7 @@ AD85020B_StatusTypeDef AD85020B_I2C_Write(uint8_t reg, uint8_t data);
AD85020B_StatusTypeDef AD85020B_I2C_Read(uint8_t reg, uint8_t *data);
AD85020B_StatusTypeDef AD85020B_RamWrite24(uint8_t ram_addr, uint8_t bank, uint32_t value);
AD85020B_StatusTypeDef AD85020B_RamRead24(uint8_t ram_addr, uint8_t bank, uint32_t *value);
AD85020B_StatusTypeDef AD85020B_MasterMute(uint8_t mute);
AD85020B_StatusTypeDef AD85020B_Init(void);
#endif