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.

[参考译文] TMS320VC5502:I2C 从器件读/写检测

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/664813/tms320vc5502-i2c-slave-read-write-detection

器件型号:TMS320VC5502
当 I2C 外设被配置为从机、并且外设指示它被寻址(即 I2CSTR 寄存器中的 BB 和 AAS 位被置位)时、如何确定主机是在读取还是写入?  XRDY 位始终指示它需要 Tx 数据、即使在主器件正在写入时也是如此。
除了 SPRU146D、  '5502上是否还有适用于 I2C 从设备的应用手册和/或工作示例代码? 我强调了工作方式、因为我在 CSL 或 eZdsp 中找到的示例都不有用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Steven、

    I2C 主设备使用 R/W 位来区分对从设备的写入和对从设备的读取。
    我的印象是、当 I2C 配置为从接收器、而主器件的 R/W 位为1时、I2C 从接收器从发送器转换为从发送器、并移出 I2CDXR 中的数据。 在这种情况下、我希望 I2CSTR 中的 XRDY 位置位。

    当受控接收器接收到一个 R/W 位= 0时、它应该保持在受控接收器模式并将数据从主器件移入 I2CDRR 寄存器、并且我希望 I2CSTR 中的 RRDY 位被置位。 但是、我没有验证这种行为。

    您是否观察到当主器件将 R/W 位发送为1时、XRDY 位被置位、而当主器件将 R/W 位发送为0时、RRDY 位被置位?

    我相信您不能通过检查 I2CMDR 内的 TRX 位来确定从器件是进入发送器模式还是接收器模式。 SPRU146D 中的表7指出、在从机模式中、禁用自由数据格式时、TRX 位无关。

    如果 I2CDRR 寄存器中出现 R/W 位也很有趣、但我不希望出现这种情况。

    我的理解是、I2C 硬件状态机通过转换到从发送器模式并移出 I2CDXR 的内容(R/W = 1)或保持在从接收器模式并将数据从主器件移入 I2CDRR 寄存器、自动对 R/W 位执行操作 (R/W = 0)。

    如果我找到一个具有类似 I2C IP 的不同器件的 I2C 从器件示例、我将告诉您。

    希望这对您有所帮助、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    观察到的行为是、一旦 I2C 外设结束复位、就始终设置 XRDY。 无论 从器件是为读取寻址、为写入寻址、还是根本不寻址、都将置1。  XRDY 位保持置位、直到您向 I2CDXR 写入2个字。 然后、它将保持清零状态、直到从器件被寻址进行读取、并且一个字节已被移出。 RRDY 位按预期工作、在主器件向从器件写入一个字节后变为高电平、并在从 I2CDRR 读取后变为低电平。

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

    您能否至少通过检查 RRDY 位来检测主器件何时将 DSP 置于从接收器模式?
    让我询问一下其他支持 I2C 从模式的处理器上的软件如何处理从接收器与从发送器的检测。 我没有找到任何 C5502的 I2C 从设备示例。

    此致、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、您可以推断 RRDY 位出现时已选择器件进行写入。 但是、在_after_接收到第一个字节(AAS 位变为高电平大约25到30us)之前、您不知道主器件是在读取还是写入。

    我使用的大多数其他 I2C 外设都提供地址的位0值、并且/或者它们的发送器就绪指示仅在选择了从器件进行读取时有效。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Steve、

    很高兴您发现、如果您向 XDR 写入虚拟值以清除 XRDY、您可以稍后再次覆盖 XDR (而 XRDY 仍然为低电平)并获取正确的数据。

    我只是想发布此解决方案、以便让其他任何尝试在从模式下使用 C55x I2C 的人受益。 感谢您的分享。

    此致、
    标记