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.

[参考译文] PCM3120-Q1:当 I2S 为96kHz 和32位字长时、读取的数据无效

Guru**** 2366860 points
Other Parts Discussed in Thread: PCM3120-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1480778/pcm3120-q1-read-data-is-invalid-with-i2s-at-96khz-and-32bit-word-length

器件型号:PCM3120-Q1

工具与软件:

大家好!

我在使用 PCM3120-Q1时遇到问题、我在这种情况下使用 I2S 接口测量数据。

我在 ADC 的输入上施加一个5kHz 的正弦波。

当我将 I2S 接口配置为96 kHz (实际频率为100 kHz)和32位字长时、测得的信号如下所示:

对我而言、它看起来要么存在数据转换错误、要么信号过冲。

无论如何、当我将 I2S 接口配置为100kHz/16位或48 (实际50) kHz/32位时、数据看起来正确。

因此、我假设既不是数据转换误差、也不是信号过冲。

100 kHz/16位

50 kHz/32位

PCM3120-Q1的初始化外观如下:

// Set page to page 0x00
pcm3120_wr_reg(REG_PAGE_CFG, 0x00);

// Disable sleep
pcm3120_wr_reg(REG_SLEEP_CFG, 0x01);
// Sleep according to datasheet:
// "Wait for at least 1 ms to allow the device to complete the internal wake-up sequence"
HAL_Delay(5);

// Set ADC_FSCALE to 2d = "VREF is set to 1.375 V to support 1 VRMS for the differential input or 0.5 VRMS for the single-ended input"
pcm3120_wr_reg(REG_BIAS_CFG, 0x02);

// Set Channel 1 input type to "Line input"
pcm3120_wr_reg(REG_CH1_CFG0, 0x80);

// Set Channel 1 input impedance  to "Typical 10 kOhm input impedance"
pcm3120_wr_reg(REG_CH1_CFG0, 0x84);

// Set Channel 1 gain to 20 dB
pcm3120_wr_reg(REG_CH1_CFG1, 0x50);

// Enable input Channel 1
pcm3120_wr_reg(REG_IN_CH_EN, 0x80);

// Set ASI to I2S mode with 16 / 24 / 32 bit word length
pcm3120_wr_reg(REG_ASI_CFG0, 0x70); // 32 bit word length
// pcm3120_wr_reg(REG_ASI_CFG0, 0x60); // 24 bit word length
// pcm3120_wr_reg(REG_ASI_CFG0, 0x40); // 16 bit word length

// Enable ASI Channel 1 output
pcm3120_wr_reg(REG_ASI_OUT_CH_EN, 0x80);

// Power PLL and ADC channel
pcm3120_wr_reg(REG_PWR_CFG, 0x60);

我将 STM32 µC 作为主机控制器。 我的 I2S 配置如下所示:

在数据表中、我发现与此相关的唯一内容是 ASI_WLEN 配置、其中建议使用16位字长和10k Ω 输入阻抗(第8.6.2.5章、ASI_CFG0 -> ASI_WLEN):

ASI word or slot length.
0d = 16 bits (Recommended this setting to be used with 10-kΩ or
20-kΩ input impedance configuration)
1d = 20 bits
2d = 24 bits
3d = 32 bits


您能帮助我解决这个问题吗、或者解释为什么使用此设置无法实现96 kHz/32位字长吗?

谢谢、此致

Julian

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

    Julian、您好!

    这很有趣、只是为了确保您在目标模式下使用器件、其中控制器上会生成 BCLK 和 WCLK? 那么 BCLK=32*2*100k = 6.4MHz? 您是否还提供了 MCLK?  

    我的想法是、可能有些 PLL 设置导致96k 和100k 之间的误差有点太高而无法正确识别、而在某些数据截断中会 使二进制补码签名数据混乱。 我知道、我们的一些较新器件通常支持高达5%的时钟差异、但该器件不存在规格中指明的、但该器件仍然工作的时钟错误差异。 您是否提供了48K 的倍数的 MCLK? 我认为我们有机会手动设置 PLL、这样可以避免这个问题。 请告知您测量的时钟输入。

    您是否能够读取 ASI_STS 寄存器(0x15)?

    此致!
    MIR

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

    嗨、Mir、

    感谢您的答复。

    是的、该器件已连接到我的主机控制器、控制器处于 I2S 主模式、并提供 BCLK 和 FSYNC 信号。 MCLK 未连接。

    根据数据表、f_BCLK = f_fs * FRAME_LENGTH = 100k * 64 = 6.4 MHz (我也进行了调试以确保正确)。


    是的、我读取 ASI_STS 寄存器。 最初、控制器的默认时钟误差太高(记不清、但大约为50%)。 据我所知、ASI_STS 当时读取为0xFF。 然后、我尝试找到一种设置、ASI_STS 未读取"无效采样率"、导致音频频率为100kHz。

    现在、ASI_STS = 0x54表示100kHz/32位(0x52表示100kHz/16位)。


    我可以尝试找到一个主机控制器设置、其中音频比目前的频率更接近96kHz。 我刚才想、当 ASI_STS 回复有效的采样率时、器件工作正常。

    此外、我还可以连接示波器来查看 I2S 总线并验证 BCLK 是否正确。

    此致

    Julian

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

    Julian、您好!

    我听一位同事说、此器件系列的最大时钟误差为3%。 因此、尽管它检测最接近的支持采样率96k、但在采样率大约为98.88kHz 之前器件可能无法正常工作... 但是是的、如果可以确保时钟符合预期且抖动尽可能小、那么您也应该验证 I2S 总线。 您是否受困于100kHz 时钟? 也许您可以改用其他器件、我相信我们的新转换器系列(例如 TAA5x1x)将通过更灵活的 PLL 和时钟支持100kHz 采样率。

    此致!
    MIR

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

    嗨、Mir、

    我尝试了控制器上的一些不同时钟设置、发现了一个 I2S 音频频率为95.833kHz (误差-0.17%)的解决方案。

    遗憾的是、这是同样的行为:96 kHz/16位和48 kHz/32位可以正常工作、而96 kHz/32位无法为我提供正确的数据。

    我会请硬件开发部门的一位同事获取有关 I2S 总线验证方面的支持、如果有新信息、我们还会联系您。

    目前、我们计划继续使用 PCM3120-Q1器件。

    此致、

    Julian

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

    Julian、您好!

    听起来不错、是的、请验证 I2S 信号、可以随时在此处发送示波器屏幕截图、以便我进行观察。 在相同的采样率下、以及没有符号的情况下、32位信号的振幅比16位信号高2倍、因此好像存在一些二进制数据问题。  

    此致!
    MIR

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

    嗨、Mir、

    感谢您的支持。 我一有示波器镜头就回来找你了。

    我做了一些新的屏幕截图-幅度更小、但仍然是5 kHz 正弦。 我认为这不是标志问题。

    96kHz/32位

    48kHz/32位

    96kHz / 32位–更多样本-有时具有单个负值峰值

    此致、

    Julian

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

    Julian、您好!

    听起来不错、当您有示波器镜头时、请发送它们。 我很快就会尝试在实验室中对其进行测试。

    -mir