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.

[参考译文] UCD3138064:如何设置可发送 I2C 地址 0x7F return NACK 的 UCD3138064?

Guru**** 2609285 points
Other Parts Discussed in Thread: UCD3138064, UCD3138

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1577124/ucd3138064-how-can-i-set-ucd3138064-that-send-i2c-address-0x7f-return-nack

器件型号:UCD3138064
主题中讨论的其他器件: UCD3138

尊敬的 TI 专家:  

当 UCD3138064 PMBus 地址设置为 0x58 且 SLAVE_MASK=0x7F 时、我尝试发送 0x7F 地址、但返回 ACK。  

image.png

 我想实现 SEND I2C 地址 0x7F RETURN NACK、如何设置 UCD3138064?

谢谢!

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

    您好 Tina、

    您是否要设置一个自定义 I2C 场景、如果 I2C 命令为 0x7F、UCD3138064 将会发送 NACK? 因此、I2C 步骤如下:

    • UCD3138064 设置为 I2C 从器件
    • I2C 主器件发送器件地址 0x58、发送字节 CMD:0x7f
    • UCD3138064 通过 NACK 进行响应

    问题在于 UCD3138064 的 ACK 响应并不一定意味着 UCD3138064 可以做任何事情。 这只是意味着 UCD3138064 确认该命令。 UCD3138064 故意返回 NACK 响应可能很难做到。 为什么要这样做?

    此致、

    Jonathan Wong

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

    您好 Tina、

    校正、可以根据不同的 I2C 命令手动选择 NACK。 您需要设置手动命令 ACK。 请参阅第 378 页上的 UCD31xx TRM 中的第 10.3.7 节。

    此致、

    Jonathan Wong

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

    嗨、Jonathan

    我想 I2C 主器件发送器件地址 0x7F、UCD3138064 以 NACK 进行响应。

    我想这样做是因为客户 BMC 系统具有地址 0x7F 器件。 当 I2C 主器件将地址 0x7F 发送到 UCD3138064 时、UCD3138064 响应 ACK。 因此、BMC 系统和 UCD3138064 与地址 (0x7F) 冲突。  

    由于地址 (0x7F) 冲突问题、我想通过 UCD3138064 取消支持地址 0x7F。

    谢谢!

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

    您好 Tina、

    如我上一篇文章所示、这是可能的。 您可以手动选择 UCD3138064 将向哪些命令发送 ACK 或 NACK。 有关更多信息、请参阅 TRM。

    此致、

    Jonathan Wong

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

    嗨、Jonathan

    感谢您的答复。

    我想我没有清楚地解释我的问题。

    UCD31xx TRM 中的第 10.3.7 节是命令解决方案、但我的问题是解决。

    作为补充、固件集如下:

    PMBUS_ADDRESS = 0x58;

    PMBusRegs.PMBCTR2.ALL = PMCTRL2_HALF_PEC_ENA + PMBCTRL2_HALFRE0_SLAVE_ADDRESS_MASK_DISABLE+PMBCTRL2_ALL_RX_BYTE_ACK_CNT

    I2C 主设备发送接收字节以扫描地址 0x00 至 0x7F 至 UCD3148064、 地址 0x58 和 0x7F 响应 ACK、其他地址响应 NACK。  UCD31xx TRM 中的第 10.8.2 节说明 0x7F 是保留地址。 由于保留地址 0x7F、我认为 0x7F 响应 ACK。 因此、我询问如何设置地址 0x7F 可以响应 NACK。

    此外、是否可以仅通过设置寄存器来解决地址 0x7F 响应 NACK?

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

    您好 Tina、

    感谢您澄清您的问题。 我知道这有多么不像 TRM 中的解决方案那么简单。

    是、0x7F 是 UCD3138 的保留命令。 您是否认为如果您将 PMBus ACK 设置为手动模式、发送 0x7F 命令仍会自动返回 ACK? 如果您尚未尝试此操作、我将首先尝试此操作、以确认 0x7F 命令在 PMBus 手动模式下响应 ACK。  

    如果 0x7F 命令在 PMBus 手动模式下响应 ACK、则这可能是器件的硬件限制。 我可以对此进行研究、看看这是否属实。 我知道 UCD3138 具有 PMBus 命令、它将在 ROM 模式下响应。 这将自动发送 ACK。 第 13.1.5 节显示了 UCD3138 ROM 模式支持的 PMBus 命令的完整列表

    此致、

    Jonathan Wong

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

    嗨、Jonathan

    感谢您的答复。 但我的问题是解决。

    我尝试设置手动地址确认、我希望地址 0x7F 响应 NACK。  固件集:

    初始化 PMBus:

                          PMBusRegs.PMBC2.ALL = PMCTRL2_HALF_PEC_ENA

                                                            + PMBUS_ADDRESS

                                                            + PMCTRL2_HALFRE0_SLAVE_ADDRESS_MASK_DISABLE

                                                           + PMCTRL2_ALL_RX_BYTE_ACK_CNT

                                                           + PMCTRL2_ALL_MAN_SLAVE_ACK;

     PMBUS_IDLE_HANDLER:

                           pmbst_shadow.all=PMBusRegs.PMBST.all;

                           if ((pmbst_shadow.bit.slave_ADDR_READY = 1)&&(pmbst_shadow.bit.data_ready = 0))

                          {

                                  This_address =(PMBusRegs.PMBRXBUF.BYTE0 和 0x7F);

                                  if (this_address == 0x58)

                                  {

                                          PMBusRegs.PMBACK.bit.ACK=1;

                                  }

                                  暴露

                                  {

                                          PMBusRegs.PMBACK.bit.ACK=0;

                                          MiscAnalogRegs.GLBIOVAL.bit.SYNC_IO_VALUE =!MiscAnalogRegs.GLBIOVAL.bit.SYNC_IO_VALUE;    //调试引脚

                                  }

                                  返回;

                          }

    发送地址 0x7F、在此波形之后、CH3 正在 转换 、因此 FW 会响应 NACK。 但 SDA/SCL 响应 ACK。

    其他地址响应正确。 地址 0x77 响应 NACK、0x58 响应 ACK、遵循固件设置。

    如何发送地址 0x7F 响应 NACK?

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

    您好 Tina、

    感谢您分享代码和基于代码的行为。 看起来 0x7F 地址将以 NACK 自动响应。 我将研究这个问题、并由星期五回复您。 我们的印度团队正在为 Diwali 度假、因此我需要时间来确定解决方案。

    请注意、您可以通过转到在 E2E 上插入 C 代码 插入-->代码 并在下拉列表中选择“C"。“。

    //Initialization PMBus:
    PMBusRegs.PMBCTRL2.all = PMBCTRL2_HALF0_PEC_ENA
                            + pmbus_address
                            + PMBCTRL2_HALF0_SLAVE_ADDRESS_MASK_DISABLE
                            + PMBCTRL2_ALL_RX_BYTE_ACK_CNT
                            + PMBCTRL2_ALL_MAN_SLAVE_ACK;
    
    //pmbus_idle_handler:
    pmbst_shadow.all=PMBusRegs.PMBST.all;
    if((pmbst_shadow.bit.SLAVE_ADDR_READY == 1) && (pmbst_shadow.bit.DATA_READY == 0))
        {
        this_address = (PMBusRegs.PMBRXBUF.byte.BYTE0 & 0x7F);
        if(this_address == 0x58)
        {
            PMBusRegs.PMBACK.bit.ACK=1;
        }
        else
        {
            PMBusRegs.PMBACK.bit.ACK=0;
            MiscAnalogRegs.GLBIOVAL.bit.SYNC_IO_VALUE = !MiscAnalogRegs.GLBIOVAL.bit.SYNC_IO_VALUE;      //Debug pin
        }
        return ;
    }

    此致、

    Jonathan Wong

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

    您好 Tina、

    现在直接支持该 E2E。 我将关闭该主题。 为了澄清论坛上的其他人、0x7F PMBus 命令在 UCD3138 上保留、因此不应是与 UCD3138 交互时使用的 PMBus 命令。 如果可能、我们将讨论相关的解决方法。

    此致、

    Jonathan Wong