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.

[参考译文] MSPM0G3507:LP-MSPM0G3507:使用 PMBus API 时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1419900/mspm0g3507-lp-mspm0g3507-issues-with-using-the-pmbus-api

器件型号:MSPM0G3507

工具与软件:

1.使用 LP-MSPM0G3507 PMBus 时、我发现当 API 使用 PMB_BLOCK_WRITE 或 PMB_BLOCK_READ 进行读取/写入操作时、事务会遇到问题。 应如何解决该问题?

2.即使我对基础 API 事务进行了硬编码以使用 PMB_MFR_REVISION 命令进行测试、此命令仍然会出现错误。 应该如何解决这一问题?

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

    尊敬的 OE J:

    • 您能说明一下这个问题吗?
      • 当您停止代码时、您是否正在等待某个位置?
      • 当您在示波器上查看这些线路时、您是否看到任何时钟信号?
    • 进行此 PMBus 交互时、我们是控制器还是目标?
      • 另一端的另一个器件是什么?
    • 是否提供了适当的上拉电阻?

    此致、
    Luke

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

    尊敬的 Luke:

    当您停止代码时、您是否正在等待某个位置?
    ` uint8_t `=(Bus_Commands、commandId]& 0x0F)存在问题;`、因此我们将其硬编码为`0x40 μ s、发生了以下情况。

    使用代码时PMB_MFR_REVISION (9B)、获得的状态为SMBus_State_Controller_NACK、然后返回、-1导致读取失败。

    当您在示波器上查看这些线路时、您是否看到任何时钟信号?
    我们目前仅打印消息、尚未连接示波器。 我们也不认为这是信号问题、尤其是因为将上述方法与命令9C 配合使用非常成功。

    另一端的另一个器件是什么?
    我们在同一电路板上连接了 I2C0和 I2C1。

    是否提供了适当的上拉电阻?
    由于 I2C 直接连接、因此我们只使用一组上拉电阻器。

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

    尊敬的 OE J:

    您可以调整通信线路的范围吗?

    可能会发生一些时钟扩展、在线路不应连接时保持不变。

    此致、
    Luke

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

    尊敬的 Luke:
    您需要波形图吗?
    `uint8_t`=(Bus_Commands、commandId]& 0x0F)存在问题;`、因此我们将其硬编码为` 0x40 、
    使用 PMBus 块读取来执行0x9B 命令会导致错误、并且信号确实没有发出。
    FC 可以正常使用。
     

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

    尊敬的 OE J:

    我将尝试在我这边复制这些、然后回复给您。

    在 uint8_t 事务中=(Bus_Commands [commandId]& 0x0F);。 按位运算将仅允许下半字节传递、而您将尝试发送0x40、它仅在上半字节中包含数据。

    此致、
    Luke

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

    尊敬的 Luke:

    如果未完成此操作、在事务后的9b PMB_BLOCK_READ 将与开关情况下的 PMB_BLOCK_READ 不匹配。
    如何解决该问题?
    还是使用不当?

    当我们使用此方法进行测试时、9C (命令)能够起作用。

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

    尊敬的 OE j:

    查看 PMBus.c 文件、PMB_BLOCK_READ 被定义为0x40 (第48行)、 我想这是一个拼写错误、块读取应该设置为0x04。

    如果你看看库中的内容、所有读取命令都在下半字节中、而写入命令在上半字节中。 这样、在执行位操作时、它将屏蔽相应的命令。

    因此、MFR_REVISION 命令将以0x50和0x40之间的 OR 运算结束、从而导致0x90。稍后、当这个被屏蔽时、您将以 PMB_RESERVED 作为读取、这会进入 PMBus 返回错误。

    我将在下一个 SDK 版本中解决这个问题。

    此致、
    Luke

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

    尊敬的 Luke:
    因此0x9B 的问题仍然没有得到解决。 即使在调整交易后、它仍然不起作用。
    它是否需要执行初始化步骤?
    此致、
    Joe

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

    尊敬的 OE J:

    你能否确认已经发生了针对 block_read 的更改? 您可以将断点设置为调用事务的位置、并检查  Bus_Commands 387[commandId]中的返回值。 该值应为0x54 (块写入+块读取)。

    示波器部分看起来会发送命令0x9B、因此一旦我们解决了0x40拼写错误、问题可能出在目标部分、而不是目标部分。

    此致、
    Luke

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


    尊敬的 Luke:
    以下是您的文本的英文翻译:

    "纠正0x40错误后、它可以操作。 我想`s、` SMBusTarget.NWK.txBuffPtr[0]= 0x08;`s和` SMBusTarget.NWk.txLen = 9; 之间的关系是什么?"

    案例0x9C://mfr 版本
    sSMBusTarget.Nwk.txBuffPtr[0]= 0x08;
    sSMBusTarget.Nwk.txBuffPtr[1]= 0x02;
    sSMBusTarget.Nwk.txBuffPtr[2]= 0x03;
    sSMBusTarget.Nwk.txBuffPtr[3]= 0x04;
    sSMBusTarget.Nwk.txBuffPtr[4]= 0x05;
    sSMBusTarget.Nwk.txBuffPtr[5]= 0x06;
    sSMBusTarget.Nwk.txBuffPtr[6]= 0x07;
    sSMBusTarget.Nwk.txBuffPtr[7]= 0x08;
    sSMBusTarget.Nwk.txBuffPtr[8]= 0x09;
    sSMBusTarget.Nwk.txLen = 9;
    休息;

    这是我在测试期间输入的值、

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

    尊敬的 OE J:

    SMBus 具有特定的数据包结构(SMBus 协议)

      

    目标给出的第一个数据将是块计数、它是发送的数据数。 因此、 sSMBusTarget.Nwk.txBuffPtr[0]= 0x08;与有8个数据字节出现相关。  sSMBusTarget.Nwk.txLen = 9、这是因为整个传输的字节计数+数据、因此整个事务的长度应等于字节计数+ 1。

    如果 sSMBusTarget.Nwk.txBuffPtr[0]= 0x0A、则 sSMBusTarget.Nwk.txLen = 11。

    此致、
    Luke

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

    如果其中一条命令块读取正常工作、则问题将出在目标(从器件)端的命令实现上。