工具与软件:
1.使用 LP-MSPM0G3507 PMBus 时、我发现当 API 使用 PMB_BLOCK_WRITE 或 PMB_BLOCK_READ 进行读取/写入操作时、事务会遇到问题。 应如何解决该问题?
2.即使我对基础 API 事务进行了硬编码以使用 PMB_MFR_REVISION 命令进行测试、此命令仍然会出现错误。 应该如何解决这一问题?
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.
工具与软件:
1.使用 LP-MSPM0G3507 PMBus 时、我发现当 API 使用 PMB_BLOCK_WRITE 或 PMB_BLOCK_READ 进行读取/写入操作时、事务会遇到问题。 应如何解决该问题?
2.即使我对基础 API 事务进行了硬编码以使用 PMB_MFR_REVISION 命令进行测试、此命令仍然会出现错误。 应该如何解决这一问题?
尊敬的 Luke:
当您停止代码时、您是否正在等待某个位置?
` uint8_t `=(Bus_Commands、commandId]& 0x0F)存在问题;`、因此我们将其硬编码为`0x40 μ s、发生了以下情况。
使用代码时PMB_MFR_REVISION (9B)
、获得的状态为SMBus_State_Controller_NACK
、然后返回、-1
导致读取失败。
当您在示波器上查看这些线路时、您是否看到任何时钟信号?
我们目前仅打印消息、尚未连接示波器。 我们也不认为这是信号问题、尤其是因为将上述方法与命令9C 配合使用非常成功。
另一端的另一个器件是什么?
我们在同一电路板上连接了 I2C0和 I2C1。
是否提供了适当的上拉电阻?
由于 I2C 直接连接、因此我们只使用一组上拉电阻器。
尊敬的 OE j:
查看 PMBus.c 文件、PMB_BLOCK_READ 被定义为0x40 (第48行)、 我想这是一个拼写错误、块读取应该设置为0x04。
如果你看看库中的内容、所有读取命令都在下半字节中、而写入命令在上半字节中。 这样、在执行位操作时、它将屏蔽相应的命令。
因此、MFR_REVISION 命令将以0x50和0x40之间的 OR 运算结束、从而导致0x90。稍后、当这个被屏蔽时、您将以 PMB_RESERVED 作为读取、这会进入 PMBus 返回错误。
我将在下一个 SDK 版本中解决这个问题。
此致、
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