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.

[参考译文] TMS320F28375D:I2C 外设的时序图、显示在发送/接收期间何时在寄存器中设置/清除标志

Guru**** 2445440 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/819165/tms320f28375d-timing-diagram-for-i2c-peripheral-showing-when-flags-are-set-cleared-in-registers-during-transmission-reception

器件型号:TMS320F28375D

我想知道在通信期间何时在 I2C 寄存器中设置/清除标志。

例如(从机模式)、何时设置 AAS 标志? 它是在发送确认位之前还是在之后置位? 与重复起始相关的信息何时被清除?

如果您可以提供 涵盖尽可能多的标志的时序图、那将会很好

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

    我们目前不提供类似这样的任何内容。 数据表中记录了一些时序、但它们主要与时钟要求或开关特性相关、而不是与中断相关。

    您是否遇到了导致此问题的特定问题? 意外中断?

    惠特尼

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

    尊敬的惠特尼:

    我正在研究一些代码、 这些代码源自 SPRABJ6中提供的代码- TMS320F2803x 的 PMBus 通过 I2C 实现的软件。 该代码正在从模式下运行。

    在'RWBYTE'和'RWWORD'情况下 、此代码监控 AAS 位以确定主器件何时对其寻址、然后决定是执行读取还是写入操作、在我看来、这一决策中存在错误机会。

    下面是当主设备希望使用'RWBYTE'情况读取一个字节时我预见的事件序列。

    起始位+从地址+写入位+ Ack

    命令+确认

    重复起始+从地址+读取位+ Ack

    数据+ NACK +停止位

    根据数据表、当从器件地址匹配时、AAS 位被置位。 它不定义何时发送、但我假设它是在发送 Ack 位时发生的。 AAS 位由重复起始位清零、当从器件地址再次匹配时、AAS 位将重新置位、最后由停止位清零。

    SPRABJ6中提供的代码 等待 RRDY 位被置位、我认为这将在收到命令后发生。 命令被解码以确定正在执行一个 RWBYTE 操作。 然后、在查看 SDIR 标志之前、它会等待直到看到 AAS 位被置位、以确定是执行读取还是写入操作。

    这是我看到可能出现问题的地方。 如果代码执行得足够快、则不会发生重复启动、也不会清除 AAS 位、因此仍将设置该位、 并假设正在执行写入操作。 如果代码执行速度较慢、则会发生重复启动、并且 AAS 位会被清零、当再次置位时、将检测到读取。

    我可以看到解决此问题的唯一方法是清除 AAS 位(如果可能) 当它首次设置为接收到命令后、我可以等待设置的 AAS 位指示重复启动已执行且我们处于读取模式、或者设置的 RRDY 位指示字节已在写入之后 并且我们处于写入模式。

    我是否遗漏了一些东西或担心是否有效。 数据表中指出 AAS 位为 R/W、因此我假设一旦设置、我将能够手动清除它。

    因此、我建议的代码如下所示。

    等待 AAS 位被置位、表示我已经被寻址。

    清除 AAS 位、等待 RRDY 位置位、指示已接收到命令。

    读取命令并解码。

    等待 AAS 置位、表示正在执行重复启动和读取、或 RRDY 置位、表示已发送另一个字节且正在执行写入。

    我可以检查 SDIR 位的读/写状态、但看不到 PMBus 协议是否被遵守。 (皮带和大括号我想)

    回到我原来的帖子、我希望您现在了解为什么我想知道何时设置/清除 AAS 和其他位。

    我希望您能提供一些进一步的指导、

    斯图尔特。

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

    感谢您提供更多详细信息!

    很遗憾、我不认为 AAS 可以通过软件清除。 一些较新的器件 TRMS (我专门查看 F2838x)提供了一些有关哪些 I2CSTR 位为可写1清零位以及哪些为只读位、AAS 似乎是 RO 的更多详细信息-我已提交一个错误、以获得添加到 F2837x TRM 中的相同注释。

    惠特尼