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.

[参考译文] UCD90160:组合命令的 NACK 问题

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1311512/ucd90160-an-nack-issue-with-a-combined-command

器件型号:UCD90160
主题中讨论的其他器件: UCD90120

大家好、

对于 UCD90160和 UCD90120器件、我们发现组合命令存在 NACK 问题。

1.运行低于命令1&2的操作正常。
1. i2cset -y -f 8 0x34 0x03 0x54 #清除故障(在 Linux 驱动程序 PMBus_core.c 中自动执行命令)。
2. i2cget -y -f 8 0x34 0x80 #获取 STATUS_MFR_SPECIFIC 寄存器

命令1的波形:

2.当我们组合运行这两个命令时。
i2cset -y -f 8 0x34 0x03 0x54;i2cget -y -f 8 0x34 0x80;i2cset -y -f 8 0x34 0x03 0x54;

我们发现命令1收到了 NACK、但在重试后、可以。 此问题100%重现。

我们试图在每个 i2c 命令之间添加延迟(即使是1s)、但未起作用。

您能给我们一些建议吗?

此致、
海亮

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

    您好

    请在这里查看我的答复。  

    NACK 来自主机。 您的主机是否支持时钟延展?

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

    您好、Yihe、

    我们如何知道这个 NACK 来自主机?  主机支持时钟延展、并且我们已在许多其他器件中测试了此函数。

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

    您好

    请在问题发生之前提供上一条命令的捕获。

    此致

    颐和

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

    您好、Yihe、

    客户 通过执行以下循环命令重现此问题。
    i2cset -y -f 8 0x34 0x03 0x54;i2cget -y -f 8 0x34 0x80;i2cset -y -f 8 0x34 0x03 0x54;

    但是、如果它们仅在低于2个命令的情况下运行、则无法重现此问题。
    i2cset -y -f 8 0x34 0x03 0x54
    i2cget -y -f 8 0x34 0x80

    以下是客户方面的更多详细信息。

    •客户可以从主板和 BMC 板 I2C 主器件执行 i2cset -y -f 8 0x34 0x03 0x54命令、不会出现任何错误、但实际上读回数据是意外的。

    root@localhost:~# i2cget -y -f 8 0x34 0x03
    0xFF #预期0x54

    可以写入0x34寄存器吗?

    •当 客户从 BMC 板执行 i2cget -y -f 8 0x34 0x80命令时,该命令失败,但 他们从主板获得了0xff。

    可以读取0x80寄存器吗?

    此致、
    海亮

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

    您好

    命令0x3是只写的、您不能执行

    i2cget -y -f 0x34 0x03 //这无效

    0x80命令可读。  

    此致

    颐和

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

    您好,Yihe,

    通过将 i2cset -y -f 8 0x34 0x03 0x54 更改为 i2cset -y -f 8 0x34 0x03,可以解决此问题。  

    但是、根据 PMBus 规范、0x19寄存器  功能 其位7  展示了支持 PEC (数据包错误检查)。   

    检查 UCD 器件0x19寄存器(值0xb0)后、它支持 PEC 函数、因此我们需要添加一个额外的 PEC 字节作为事务中的最后一个字节。

     

    因此、我们仍需要确定该问题的根本原因、请对此提供帮助。

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

    您好

    UCD 支持 PEC。 我需要先看到波形、然后再发生故障、以便更好地了解情况。

    请提供。

    此致

    颐和

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

    您好、Yihe、

    这里是波形。

    波形1: i2cset -y -f 8 0x34 0x03 0x54;  

    波形2/3: i2cget -y -f 8 0x34 0x80 (返回值为0xff);  

    波形4: i2cset -y -f 8 0x34 0x03 0x54 (NACK); i2cset -y -f 8 0x34 0x03 0x54 (这是重试并获取 ACK)

    此致、
    海亮

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

    您好

    请查看我的评论如下。

    此致

    颐和

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

    您好、Yihe、

    我看到您的回复关于波形  i2cget -y -f 8 0x34 0x80。   是的、它有停止和启动信号、但我认为它是由前一个时钟中的 NACK 引起的。

    我想知道为什么会有一个 NACK  i2cget -y -f 8 0x34 0x80。

    如果我执行  i2cget -y -f 8 0x34 0x80 与下面内容无关、它不会有这样的问题。 只有组合命令才会出现此问题。

    此致,
    海亮

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

    您好

    请查看我的评论

    此致

    颐和

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

    您好,Yihe,

    某些注释似乎无法正确显示。

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

    您好

    缺少的评论并不重要。

    请重点关注为什么 NACK 不中止事务、而是主机继续运行。

    此致

    颐和  

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

    您好

    我们发现、读取0x80有时会 返回 ACK、但有时会返回 NAK。  查看 UCD 器件数据表后、不支持0x80寄存器。 这就是我们随机得到 ACK 和 NAK 的原因吗?  

    您能否确认是否正常?

    顺便说一下、

    在 Linux PMBus 内核驱动程序中、如果启用了内核选项 CONFIG_DEBUG_FS、则会读取寄存器0x7f 和0x80。  

    如果您可以确认上述情况没有问题、我会将其视为 PMBus 内核驱动程序的一个小限制。

    谢谢、此致。

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

    您好

    我们不支持0x80命令。  

    此致

    颐和

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

    您好,Yihe,

    您是否认为编写不受支持的命令会随机获得 NACK 和 ACK?

    此致,

    海亮

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

    您好

    我需要看到波形才能更好地理解这一点。

    此致

    颐和

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

    您好、Yihe、

    您需要什么波形? 之前、一位客户分享了在写入0x80命令后获取 NACK 和 ACK 的波形。

    获取 NACK

    我看到您的回复关于波形  i2cget -y -f 8 0x34 0x80。   是的、它有停止和启动信号、但我认为它是由前一个时钟中的 NACK 引起的。

    [/报价]

    获取 ACK

    如果我执行  i2cget -y -f 8 0x34 0x80 与下面内容无关、它不会有这样的问题。 只有组合命令才会出现此问题。

    [/报价]

    谢谢

    海亮

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

    您好

    我是说来自0x80命令的波形、而不是0x34。

    此致

    颐和  

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

    您好、Yihe、

    我认为0x34是器件地址。 0x80是命令。  

    此致、
    海亮

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

    您好

    我们将在电子邮件中讨论该问题、并关闭该主题。

    此致

    颐和