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.

[参考译文] TLV320AIC24K:I2C控制寄存器值随每次读取而变化

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/576055/tlv320aic24k-i2c-control-register-values-changing-with-every-read

部件号:TLV320AIC24K

我们有这个编解码器,正在设置I2C端口。 每次读取控制寄存器状态(使用地址的自动增量)时,寄存器3A的值在我们的编程值和0x88之间切换。 此外,每次读取时,将寄存器4增量控制为0x20。

这是相当令人惊讶的行为,并不是随机的。 我们希望将I2C用于控制接口,而将4线串行端口仅用于数据。 我们需要确信,I2C上的数据正是我们所期望的。 我已通读数据表,但找不到任何迹象表明这是预期行为。

您能否解释一下这是否是预期的,以及I2C总线是否可以用作唯一的控制端口?

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

    这应与寄存器3的子寄存器地址相关。 寄存器3包含4个子寄存器,由子寄存器索引确定。 如数据表中所述:

    "...对于具有多个子寄存器的寄存器,子寄存器索引会随每次读/写自动递增。 例如,第一个读/写寄存器3读/写寄存器3A,下一个寄存器3B,依此类推,直到到达最后一个子寄存器。 此时,子寄存器索引返回到第一个子寄存器..."。

    因此,为了读取寄存器3,我建议使用自动递增功能。 对于其余寄存器,我建议在不使用自动递增功能的情况下读取它们。

    此致,
    Luis Fernando Rodríguez ñ o S.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Luis,

    我在CR3上执行了自动增量,使用自动增量只读取了4个字节,在CR4上执行了单字节读取。 在这两种情况下,每次读取时非保留位都会更改。 我已使用示波器验证除了读取之外没有发生任何事情,并且我正在正确读取数据。 我们在示波器上有一个I2C模块,它显示了我们的数据以及启动/停止位等。所有这些看起来都正确。
    我尝试过两个不同的I2C控制器(一个是我们的处理器,另一个是外部USB转换器),它们的结果都相似。
    我提高了驱动力强度,结果没有变化。

    我从寄存器3读取4个字节4次。 Register 3C提供以下结果:
    40.
    BF
    C0
    00
    这似乎表明每次读取时设备ID都在更改!

    下面是我的整体活动顺序:
    通过复位和处理器TDM总线中的编解码器加电
    将编解码器从重置中取出,处理器TDM仍处于三角状态
    通过I2C读取编解码器寄存器,处理器TDM仍处于三角状态

    我是否必须执行某种初始化才能通过I2C从寄存器中获得稳定值?

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

    好的,我弄明白了子寄存器的事情。 我将尝试将此记录在案,以备将来参考。


    数据表指出,"索引寄存器地址被记录下来,以便在下一个控制寄存器上执行下一个读/写操作"。 图32显示了正常的I2C自动索引,在每次发送ACK时寄存器地址都会增加。  

    要清除,每次发送ACK时主寄存器地址都会增加。 每次向主寄存器地址发出新的读取命令时,子寄存器地址都会增加。

    因此,从寄存器3开始读取四个字节将为您提供以下寄存器内容:

    3A 4 5A 6A

    再次阅读相同内容,您将获得:

    3B 4 5B 6B

    继续发送相同的命令,您将获得:

    3c 4 5C 6A

    3D 4 5D 6B

    3A 4 5A 6A

    等等

    每次读取到主寄存器地址时,子寄存器地址都会增加其自己的子寄存器地址,并且在读取最后一个子寄存器时,子寄存器地址会自动换行。

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    另请注意,首次读入寄存器4时,依次读入N和P值(FSDIV设置为0),第二次读入M值(FSDIV设置为1)。 数据表中未记录此信息,这些分禾器比率的重置值也未记录。
    通电读数寄存器4给出值0x30 (即 FSDIV = 0,M=16)。 再次阅读它,它给出0x90 (即 FSDIV=1,N=6,P=8)。