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.

[参考译文] AM6422:关于 I2C_BUFSTAT 使用情况的说明 — 控制器接收模式下 RXSTAT 与 TXSTAT 的行为

Guru**** 2667985 points

Other Parts Discussed in Thread: AM6442, AM6422

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1581689/am6422-clarification-on-i2c_bufstat-usage-rxstat-vs-txstat-behavior-in-controller-receive-mode

器件型号: AM6422
主题中讨论的其他器件: AM6442

根据 AM64x/AM243x 处理器器件技术参考手册(修订版本 2.0、修订版本 H)的第 6569 页、该I2C_BUFSTAT[13:8] RXSTAT字段应指示 RX FIFO 中当前的字节数。

然而、在我们的测试过程中、我们观察到的行为似乎与文档相矛盾:

  • 指定 控制器接收模式 (主器件从从器件读取数据)、 TXSTAT 字段实际上反映了传输结束时接收到的字节数。
  • RXSTAT 字段保持为零。

您能否请确认是否预计会出现这种行为、并澄清该TXSTAT字段是否确实应用于确定控制器接收模式下的剩余字节计数?

谢谢!

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

    您好、Wei Ding、

    我已查看 AM64x/AM243x 处理器器件修订版本 1.0、2.0 勘误表、但没有报告此类异常  I2C_BUFSTAT.TXSTAT/RXSTAT  行为。

    我有以下初步检查点问题:

    Q1:您使用的是 AM6442 I2C 实例?

    Q2:配置的 I2C 总线时钟速度是多少?

    问题 3:在 I2C_SCL 和 I2C_SDA 上使用的上拉电阻器的值是多少?

    问题 4:您用于 AM6442 I2C 引脚的 VDDSHVx IO 电源电压 (1.8V 或 3.3V) 是多少?

    Q5:我是否可以理解,只有一个 I2C 目标和一个 I2C 控制器连接到 I2C 总线?

    问题 6. 您是否有机会查看 I2C 目标寄存器侧的信息 (如果可能) -它是否成功地将数据发送到 AM6422 I2C 控制器?

    问题 7 当控制器从目标读取数据时、您是否有 I2C 总线的一些示波器图像?

    问题 8.  I2C_IRQSTATUS_RAW [3] RRDY 位轮询显示 I2C 控制器实际接收数据。

    问题 9: 它是 CPU 轮询还是 I2C 控制器操作的中断模式?

    感谢您的澄清!

    此致、

    Anastas Yordanov

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

    尊敬的 Anastas:

    感谢您查看此内容。 以下是您问题的答案:

    Q1:您使用的是 AM6442 I2C 实例?   I2C0 和 I2C1

    Q2:配置的 I2C 总线时钟速度是多少?   400kHz(快速模式)

    问题 3:在 I2C_SCL 和 I2C_SDA 上使用的上拉电阻器的值是多少?  4.7k (I2C0)、10K (I2C1)

    问题 4:您用于 AM6442 I2C 引脚的 VDDSHVx IO 电源电压 (1.8V 或 3.3V) 是多少?   3.3V

    Q5:我是否可以理解,只有一个 I2C 目标和一个 I2C 控制器连接到 I2C 总线?  在每个总线上、都连接了一个控制器和多个从器件。

    问题 6. 您是否有机会从 I2C 目标寄存器端检查内容(如果可能)-它是否成功地将数据发送到 AM6422 I2C 控制器?   是的、控制器从从从传感器接收数据。

    问题 7 当控制器从目标读取数据时、您是否有 I2C 总线的一些示波器图像?   否

    问题 8. I2C_IRQSTATUS_RAW [3] RRDY 位轮询显示 I2C 控制器实际接收数据。  是的、在数据读取期间检查 I2C_IRQSTATUS_RAW[3] RRDY 位。

    问题 9:它是 CPU 轮询还是 I2C 控制器操作的中断模式?   此操作中使用轮询模式。

    谢谢、

    Wei

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

    您好、Wei Ding、

    “对不起,我不知道该怎么办。“ 感谢您回答我的问题。

    从硬件的角度来看、事情似乎还可以。

    一个重要问题是您是否启用了 pinmux 控件 输入缓冲器  I2C0_SCL 和 I2C1_SCL 引脚(SoC 电平)的(在相应的 PADF 寄存器中)?

    问题 10. I2C 控制器需要监控生成的时钟是否存在从 I2C 目标施加的时钟延展。   

    问题 11. 您是否遵循了“I2C  时钟/I2C 时钟“ 表中的设置:  AM64x TRM 的 I2C F/S、I2C HS 模式下最大 I2C 比特率的 I2C 寄存器值?

     

    问题 12. 您可以在控制器端成功读取多少个字节?

    谢谢!

    此致、

    Anastas Yordanov

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

    您好、Anastas、

    对于您的上述问题、是的、我们已根据 TRM 设置 I2C 控制器、可以从从从传感器接收数据。 如前所述、我们观察到在控制器的接收模式下(当主器件从从器件读取数据时)、TXSTAT 字段实际上反映了传输结束时接收到的字节数、我们不知道为什么。 这可以在 Lauterbach 的快照中看到。

    谢谢、

    Wei

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

    尊敬的 Wei Ding:

    根据  AM64x/AM243x 处理器器件技术参考手册 (修订版本 2.0、修订版本 H)的第 6569 页、该 I2C_BUFSTAT[13:8] RXSTAT 字段应指示 RX FIFO 中当前的字节数。“

    我假设从相应的位字段中禁用了 AM6442 不受支持的 DMA 模式。 正确?

    根据 TRM 的第 6569 页、我对 轮询模式下 TXSTAT 和 RXSTAT 寄存器位字段的行为有点困惑(以绿色突出显示)。   是这些寄存器位字段在每次字节发送和接收时更新为 FIFO 中的实际字节数、还是它们仅显示要传输和清除的初始字节数、在完成事件时与所有字节传输后同步。 您是否可以观察到 I2C 控制器发送过程的 TXSTAT 值更新?

    “对于您的上述问题、是的、我们已根据 TRM 设置了 I2C 控制器、可以从从从传感器接收数据。 如前所述、我们观察到在控制器的接收模式下(当主器件从从器件读取数据时)、TXSTAT 字段实际上反映了传输结束时接收到的字节数、我们不知道为什么。“

    因此、我想您的软件完全遵循 图 12-132。   “I2C 控制器接收器模式、轮询方法“部分的“I2C 编程指南/小节、AM64x TRM 的 I2C 编程模型“中的 F/S 和 HS 模式。 正确?

    我需要 与我们的 I2C 硬件和低级软件驱动程序专家在内部讨论确切的 TXSTAT 和 RXSTAT 行为。 请预计回复可能会延迟。

    感谢您的耐心!

    此致

    Anastas Yordanov

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

    您好、Wei Ding、

    很抱歉耽误了我的回复。

    我得到了专家的确认:

    RXSTAT 位应指示 I2C 控制器要接收的数据量。 TXSTAT 位应指示 I2C 控制器要发送的数据量。  

    您能否  根据 Lauterbach 主机应用程序寄存器定义文件、确认 I2C_BUFSTAT、TXSTAT 和 RXSTAT 字符串到相应受监控的 AM6442 寄存器地址和位字段位置的正确映射。

    我正在等待您的反馈!

    此致、  
    Anastas Yordanov

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

    您好、Wei Ding、

    请参阅我从设计团队收到的意见:

    I2C 配置为主器件接收 7 个字节。

     

    根据规格:

    TXSTAT = DCOUNT–TXFIFO。 注意:在 FIFO 操作期间、此 DCOUNT 会递减。

    RXSTAT = RX FIFO 中当前存在但尚未由 CPU 读取消耗的接收字节的数量。

     

    通过仿真:

    案例 1:DCOUNT = 7、TXFIFO 为空

    收到 7 个字节、并且由于停止条件而设置 RDR。

    读取 BUFSTAT:RXSTAT = 7、作为接收的 7 个字节、TXSTAT = 7

    读取 1 个字节:读取 BUFSTAT:RXSTAT = 6 作为接收的 7 个字节、TXSTAT = 6

    读取 2 个字节:读取 BUFSTAT:RXSTAT = 5 作为接收的 7 个字节、TXSTAT = 5

    …μ s。

    读取 7 个字节:读取 BUFSTAT:RXSTAT = 0 作为接收的 7 个字节、TXSTAT = 7

     

    注意:一旦内部 DCOUNT 计数器达到 0、就会使用配置的原始 DCOUNT 寄存器值重新加载。

     

    结语:

    RX 状态值取决于当前接收到的字节数。 读取所有字节后该位变为 0。

    如上所示的 TX 状态取决于 DCOOUNT–TX FIFO。

    此致、

    Sreenivasa.