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.

[参考译文] TLV320ADC5140:CAN#39;t 在 PLL 模式下获得 I2S 输出、不确定 I2C 序列

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1179100/tlv320adc5140-can-t-get-i2s-output-with-pll-mode-not-sure-of-i2c-sequence

器件型号:TLV320ADC5140
主题中讨论的其他器件: PCM5122

我们尝试在 I2S 主控模式下测试 TLV320ADC5140、根据我们的理解、为 MCLK 供电是可选的。  由于我们仅以48kHz 相关的采样率运行、因此 OUT PCB 具有用于单个24.576mhz 晶体的焊盘。  目前、XO 未组装。  我们的理解是、TLV320可以提供其自身的内部 BCK 和 LRCK 输出、但根据以下序列、我们不会得到 I2S BCK/LRCK。  原理图如下:

我们尝试使用此序列进行激活(伪代码、使用 node.js 和 i2c 库、将按照下面的确认写入寄存器):

    const MST_CFG1_RATES = {
        48 : 0x48, // 01001000
        96 : 0x58, // 01011000
        192: 0x68, // 01101000
        384: 0x78 // 01111000
    };

    // SLEEP_CFG wake
    await i2cWriteByte(0x02, 0x91);

    // MST_CFG0 master, 48k 10000111
    await i2cWriteByte(0x13, 0x87);

    // i2cWriteByte(0x16, 0xXX); // CLK_SRC master (not using for now)

    // 256x 96k, 01011000
    await i2cWriteByte(0x14, MST_CFG1_RATES[96]);

    // ASI_CFG0 i2s, 32bit, 01110000 ? (not sure about last two bits)
    await i2cWriteByte(0x07, 0x70);

    // DSP_CFG sum pairs 00000100 ? not sure about HP
    await i2cWriteByte(0x6B, 0x04);

    // DEV_STS0 power up 1-4? 11110000
    await i2cWriteByte(0x76, 0xF0);

    // IN_CH_EN enable input 1-4? 11110000
    await i2cWriteByte(0x73, 0xF0);

    // ASI_OUT_CH_EN enable 1,2? 11000000
    await i2cWriteByte(0x74, 0xC0);

    // CH1_CFG0 config input, line, single-ended, no dre, 20k: 10101000
    await i2cWriteByte(0x3C, 0xA8);

    // CH2_CFG0
    await i2cWriteByte(0x41, 0xA8);

    // CH3_CFG0
    await i2cWriteByte(0x46, 0xA8);

    // CH4_CFG0
    await i2cWriteByte(0x4B, 0xA8);

读取 i2c 并得到确认值:

{
  '0x02': '10010001',
  '0x13': '10000111',
  '0x14': '1011000',
  '0x07': '1110000',
  '0x6B': '100',
  '0x76': '0',
  '0x73': '11110000'
}

0x76看起来没有设置。  我们仍然希望在 FSYNC 和 BCLK 上看到生命体征。  GPIO1上是否需要 XO 输入?  数据表使其看起来是可选的、因此我们希望在没有数据表的情况下测试性能。  此外、该 I2S 主器件是同一电路板上 PCM5122的主器件。  但还没有这么远。

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

    FSYNC 也是3.16V? 这似乎很奇怪。

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

    https://www.ti.com/lit/an/sbaa382/sbaa382.pdf?ts=1670883310063

    您需要将 MCLK 馈入 GPIO 1。 我包含了该文档第3页的快照

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

    更新了:在24.576mhz 处连接了 XO、并在 ADC GPIO1引脚上确认了其波形。

    现在的问题是 I2S BCLK 看起来不对、我不确定它是否是由通道输入情况引起的。  我们使用的是4:2模式。

    无论我们尝试了什么、启用 PLL 后、让 LRCK/BCLK 变为现实似乎是不可能的。

    来自 tlv320ADC 主模式文档的这个示例 使 I2S 变得栩栩如生、但是所需的 BCLK 似乎也无法实现:

    w 98 13 a0 #启用主模式、禁用 PLL 以进行自动时钟配置
    W 98 14 48 # FS = 44.1/48K BCLK/fsync 比率= 256
    W 98 16 D8 # MCLK 是音频根、使用 MCLK_Ratio_SEL、MCLK/Fsync 比率= 512
    w 98 21 a0 #将 GPIO1配置为 MCLK 输入

    但是、我们仍然无法在示波器上正确查看 LRCK/BCLK 比率。  GPIO 上的 XO 为24.576mhz。  在32位、2个通道上、如果 CH1+2被左推、而 CH3-4被右推、我将如何获得96kHz 的频率?  我根据数据表尝试的所有组合都会产生错误的 BCLK。  很容易找到正确的 LRCK……

    它始终是6.144mhz。  32位* 96000 * 2个通道。  

    您能不能告诉我们、我们是否需要做一些事情、因为我们在求和?

    对此也非常困惑:

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

    您能否或有人告诉我、为什么这个序列会导致 LRCK 和 SCLK 卡在高电平? 有些事情不正确。

        const i2c = i2cbus.openSync(BUS);
    
        // SLEEP_CFG wake // 10010001
        await i2cWriteByte(0x02, 0x91);
    
        /*
        this makes the device come to life, yes, but getting desired SCLK seems impossible
        w 98 13 a0 # enable master mode, disable PLL for auto-clock config
        w 98 14 48 # FS = 44.1/48k BCLK/fsync ratio = 256
        w 98 16 d8 # MCLK is audio root, use MCLK_ratio_sel, MCLK/Fsync ratio = 512
        w 98 21 a0 # configure GPIO1 as MCLK input
         */
         
        // back to enabling internal pll with MCLK supplied...now I2S is dead again
    
        // MST_CFG0 master, 48k 11100111
        await i2cWriteByte(0x13, 0x87); // was 0xe7
    
        // 256x 96k, 01011000 (5d, 8d)
        await i2cWriteByte(0x14, 0x58); // was MST_CFG1_RATES[96]
    
        // CLK_SRC master, use ratio (256) 11001000
        await i2cWriteByte(0x16, 0x10); // was 0xC8
    
        // set GPIO1 as MCLK input, 10100000
        // await i2cWriteByte(0x21, 0xa0);
    
        // ASI_CFG0 i2s, 32bit, 01110000 ? (not sure about last two bits)
        await i2cWriteByte(0x07, 0x70);
    
        // DSP_CFG sum pairs 00000100 ? not sure about HP
        await i2cWriteByte(0x6B, 0x04);
    
        // DEV_STS0 power up 1-4? 11110000
        await i2cWriteByte(0x76, 0xF0);
    
        // IN_CH_EN enable input 1-4? 11110000
        await i2cWriteByte(0x73, 0xF0);
    
        // ASI_OUT_CH_EN enable 1,2? 11000000
        await i2cWriteByte(0x74, 0xC0);
    
        // CH1_CFG0 config input, line, single-ended, no dre, 20k: 10101000
        await i2cWriteByte(0x3C, 0xA8);
    
        // CH2_CFG0
        await i2cWriteByte(0x41, 0xA8);
    
        // CH3_CFG0
        await i2cWriteByte(0x46, 0xA8);
    
        // CH4_CFG0
        await i2cWriteByte(0x4B, 0xA8);
    
        i2c.closeSync();

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

    正在检查。 应在明天恢复

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

    我还能问吗?  我在 GitHub 上发现的有关某人为该芯片编写的 python 驱动程序的一些好奇心:

    #I2S CompatibilityWithZeroOffset(I2S only)
                #TLV320AICx140 devices can comply with the I2S bus format with zero offset by modifying
                # the default left justified format to fit the I2S format requirements, as follows:

    我注意到寄存器0x07在开启或关闭时产生奇怪的结果、但在 FSYNC 或 BCLK 上没有时钟。

    e2e 中的其他地方有人提到了这一点、但我再也找不到了。  无论如何、我仍然无法启用 PLL。

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

    在经过一整天的努力之后、我在这里休息了一会:

    w 4c 2 91 b10010001
    宽4c 13 97 b10010111
    宽4c 14 58 b1011000
    宽4c 21 a0 b10100000
    w 4c 7 be b10111110
    宽4c 6B 4 B100
    宽4c 76 f0 b11110000
    w 4c 73 f0 b11110000
    w 4c 74 c0 b11000000
    w 4c 3c A8 b10101000
    W 4c 41 A8 b10101000
    宽4c 46 A8 b10101000
    w 4c 4b A8 b10101000

    FSYNC/LRCK 和 BCLK 是平坦的。  否则、我唯一得到的方法是禁用 PLL。

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

    为了确认、除了时钟/比率错误外、我们仍在不断地遇到在0x15上获取任何状态的问题。  是否有任何其他方法可以从 TI 获得帮助?

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

    很抱歉耽误你的时间。 我现在看看这一点、明天将作出回应

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

    Sanjay、我们让它正常工作!  感谢你的帮助。 该问题是缺少对寄存器 PWR_CFG 0x75的写入。 该 python 驱动程序 非常有用。

    明天早上、我将发布我们的确切顺序、以防将来有人需要。  现在、我们只需要计算 PCM5122器件。