This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TAD5112:TAD5112:如何减少耳机插孔检测引起的耳机咔嗒声

Guru**** 2928980 points

Other Parts Discussed in Thread: TAD5112

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1650482/tad5112-tad5112-how-to-reduce-the-click-in-the-headphone-caused-by-the-headphone-jack-detection

器件型号: TAD5112

尊敬的所有人:

我在伪差分模式下将 TAD5112 用作耳机放大器、由 I2S、44.1kHz 音频、32 位字控制。 音频播放良好。 不播放音频时、使用内置耳机插孔检测功能。 该器件用于 eMDR 应用、因此可以播放~250ms 的左右交替蜂鸣音。 为了克服放大器的启动时间并防止砰砰声、我在整个会话中保持 I2S 运行、从而提供干净的无噪声音频体验。 当我停止会话时、我每秒执行一次耳机检测、但这是可以听到的。 在开发过程中、我了解到插孔检测是一个一次性功能。 我使用以下代码进行检测:

bool TAD5112::HeadphoneDetected(void) {
	uint8_t value;
	// 1. Select Page 1
	if (!SelectPage(1)) return false;

	WriteRegister(REG_P1_JACK_DET_CFG1, 0x0A);
	Utils::DelayMs(75);

	if(!ReadRegister(REG_P1_JACK_DET_CFG3, value)) return false;

	WriteRegister(REG_P1_JACK_DET_CFG1, 0x00);
	if((value & 0x70) == 0x70) { //ignore mic detection
		return true;
	}

	return false;
}

 

要完成我的初始化代码:  

	_i2c.Init();
    // Check if device is ready
    if (!_i2c.isDeviceReady(_address, 3, I2C_TIMEOUT_MS)) {
        return false;
    }
    _currentPage = 0xFF; // Reset page cache

    // Perform a software reset
    if (!SelectPage(0)) return false;
    if (!WriteRegister(REG_RESET, 0x01)) { // Write 0x01 to Reset register
        return false;
    }
    Utils::DelayMs(10); // Wait for reset to complete (datasheet recommends 10ms)

    if (!WriteRegister(REG_P0_DEV_MISC_CFG, 0x09)) return false; // Disable sleep mode
    Utils::DelayMs(2);
    if (!WriteRegister(REG_P0_PASI_CFG0, 0x70)) return false; //Select I2S communication, 32bit words
    if (!WriteRegister(REG_P0_PASI_RX_CFG0, 0x00)) return false; //Set 1 clock offset in I2S communication
    if (!WriteRegister(REG_P0_PASI_RX_CH1_CFG, 0x20)) return false; //ASI channel 1 = DAC channel 1, I2S left slot 0
    if (!WriteRegister(REG_P0_PASI_RX_CH2_CFG, 0x30)) return false; //ASI channel 2 = DAC channel 2, I2S right slot 0
    if (!WriteRegister(REG_P0_OUT1x_CFG0, 0x34)) return false; //OUT1 to input from DAC, pseudo differential mode, AVDD / 2
    if (!WriteRegister(REG_P0_OUT1x_CFG1, 0x60)) return false; //OUT1P headphone mode, 0dB gain
    if (!WriteRegister(REG_P0_OUT1x_CFG2, 0x60)) return false; //OUT1M headphone mode
    if (!WriteRegister(REG_P0_OUT2x_CFG0, 0x30)) return false; // 0b00110010 OUT2 to input from DAC, pseudo differential mode
    if (!WriteRegister(REG_P0_OUT2x_CFG1, 0x60)) return false; //OUT2P headphone mode, 0dB gain
    if (!WriteRegister(REG_P0_OUT2x_CFG2, 0x60)) return false; //OUT2M headphone mode
    if (!WriteRegister(REG_P0_CH_EN, 0x0C)) return false; // enable DAC channels 1 & 2
    if (!WriteRegister(REG_P0_DSP_CFG0, 0b00101000)) return false; // disable volume ramping
    if (!WriteRegister(REG_P0_DSP_CFG1, 0b00101000)) return false; // disable volume ramping
    if (!WriteRegister(REG_P0_MISC_CFG0, 0x00)) return false; // disable power up delay

    if (!WriteRegister(REG_P0_DYN_PUPD_CFG, 0x20)) return false; // enable DAC dynamic power up & down
    if (!WriteRegister(REG_P0_PWR_CFG, 0x40)) return false; // power up DAC;

如何减少插孔检测导致的咔嗒声?

 

提前感谢、

 

Robin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Robin、

    以下是一些 需要了解的建议:

    • 您可以尝试 配置插孔检测去抖。  (寄存器提供去抖控制以滤除插入JACK_DET_CFG2) /移除期间的瞬态噪声。
    • JACK_DET_CFG1、位 3()HPDET_COUPLING在交流耦合 (0) 和直流耦合 (1) 耳机检测之间进行选择。 交流耦合是在检测事件期间缓解咔嗒声的标准技术、可确保这与您的输出配置相匹配。
    • 启用 DAC 自动恢复可能有助于: DAC_FLT_CFG0 = 0b0100100# 发生 DAC 故障时自动恢复  

    此致、

    Arash