主题中讨论的其他器件: UCD3138
尊敬的 TI 专家:
当 UCD3138064 PMBus 地址设置为 0x58 且 SLAVE_MASK=0x7F 时、我尝试发送 0x7F 地址、但返回 ACK。

我想实现 SEND I2C 地址 0x7F RETURN NACK、如何设置 UCD3138064?
谢谢!
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.
尊敬的 TI 专家:
当 UCD3138064 PMBus 地址设置为 0x58 且 SLAVE_MASK=0x7F 时、我尝试发送 0x7F 地址、但返回 ACK。

我想实现 SEND I2C 地址 0x7F RETURN NACK、如何设置 UCD3138064?
谢谢!
您好 Tina、
您是否要设置一个自定义 I2C 场景、如果 I2C 命令为 0x7F、UCD3138064 将会发送 NACK? 因此、I2C 步骤如下:
问题在于 UCD3138064 的 ACK 响应并不一定意味着 UCD3138064 可以做任何事情。 这只是意味着 UCD3138064 确认该命令。 UCD3138064 故意返回 NACK 响应可能很难做到。 为什么要这样做?
此致、
Jonathan Wong
嗨、Jonathan
我想 I2C 主器件发送器件地址 0x7F、UCD3138064 以 NACK 进行响应。
我想这样做是因为客户 BMC 系统具有地址 0x7F 器件。 当 I2C 主器件将地址 0x7F 发送到 UCD3138064 时、UCD3138064 响应 ACK。 因此、BMC 系统和 UCD3138064 与地址 (0x7F) 冲突。
由于地址 (0x7F) 冲突问题、我想通过 UCD3138064 取消支持地址 0x7F。
谢谢!
嗨、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