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.

[参考译文] TMS320F280037:当 TMS320F280037收到不受支持的 PMBus 命令时、如何生成 NACK?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1408499/tms320f280037-how-to-generate-the-nack-when-the-tms320f280037-receives-an-unsupported-pmbus-command

器件型号:TMS320F280037
主题中讨论的其他器件:C2000WARE

工具与软件:

您好!

No.45MUC_307Rev_1-2规范中的第10.9.2节描述了 Bus_Specification_Part_收到不受支持的命令时的操作。

典型的2字节 PMBus 读取协议:

START |从器件地址| WR | ACK |命令| ACK  | SR |从器件地址| WR | ACK |命令| Rd | ACK |字节#0 | ACK |字节#0  | ACK | PEC | NACK |停止   

我想否定确认不受支持的命令、以停止保留的读取过程。

START |从器件地址| WR | ACK |不受支持的命令 | NACK | SR |从器件地址| WR | ACK |命令| Rd | ACK |字节#0 |   ACK |字节#0 | ACK | PEC | NACK |停止

是否有 在这种情况下生成 NACK 的功能?

下面的例子中的定义如下

从 Bus_Specification_Part_ 454_Rev_1-2中截获

10.9.2.不受支持的命令代码

如果 PMBus 器件接收到它不支持的命令(包括标识为"保留"的命令代码)、则该器件应按如下方式响应:

  • 如果可能、请否定确认不受支持的命令代码和在下一个停止条件之前接收到的所有数据字节、
  • 清除或忽略接收到的命令代码和任何接收到的数据、
  • 设置 STATUS_BYTE 寄存器中的 CML 位、
  • 设置 STATUS_CML 寄存器(如果该寄存器受支持)、和中的"无效或不受支持的命令接收"位
  • 按照第10.2.2节中的说明通知主机。

祝你一切顺利

Kang Hojoong

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

    嗨、 Hojoong:

    是的、使用 PMBus 时、如果有不受支持的命令(如 PMBus 规范中所示)、您可以在软件中使用手动 ACK/NACK 来生成 NACK。

    此致、

    Aishwarya.

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

    尊敬的 Aishwarya:

    非常感谢您提供的答案。

    有一种生成 NACK 的方法是很棒的。

    您能否提供示例代码来为不受支持的 PMBus 命令生成 NACK?

    谢谢!

    Kang Hojoong

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

    Hojoong

    我想澄清的是、当有不受支持的命令时、PMBus 不会自动 NACK、而是在软件中手动确认。 PMBus 一章在说明和寄存器中还介绍了手动确认/否定确认。 PMBus 示例可以在此处找到、我已经对此请求做了备注: C:\ti\c2000\C2000Ware_5_03_00_00\libraries\communications\PMBus\c28。  如果您有任何其他具体问题、我可以帮助回答。

    此致、

    Aishwarya.

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

    尊敬的 Aishwarya:

    非常感谢您提供参考代码。

    但是、我找不到一种方法可以为不受支持的命令生成 NACK 来停止剩余的读取过程。

    我想分享我这个问题的更多细节。

    目前、TMS320F280037配置为目标。

    START |从器件地址| WR | ACK | 不受支持的命令| NACK | SR |从器件地址| WR | ACK |命令| Rd | ACK |字节#0 | ACK |字节#0 | ACK | PEC | NACK |停止

    以下是我正在处理的用例(PMBUS_TRANSACTION_READWORD)。

    PMBus 主设备从读取2个字节 0xF6不受支持的命令。 (TI MCU 从器件地址为0xB0)

    为此、PMBus 主器件 发送0xB0、 0xF6、 之后的0xB1读取2字节数据和1字节 PEC。

    我希望在接收到0xF6后立即生成 NACK。

    这是我从参考代码中得到的理解。  

    PMBus_STACK_STATE_IDLE 状态下的 PMBusStack_targetIdleStateHandler ()函数 、在接收到0xB0之前要处理、  0xF6。

    并跳转至 PMBus_STACK_STATE_READ_WAIT_FOR_EOM 中的 PMBusStack_targetReadWaitForEOMStateHandler () 、以处理剩余的读取处理。

    要在0xF6不受支持的命令之后生成 NACK、NACK 生成代码需要位于  PMBusStack_targetIdleStateHandler () 函数中。

    但是、没有地方为 不受支持的命令生成 NACK。

    如果我误解了什么、请纠正我。

    谢谢!

    Hojiong Kang

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

    嗨、Hojoong:

    您的理解是正确的、因为无法自动否定确认不受支持的命令。 另外、也可以启用 MAN_CMD 以允许 SW 决定是否确认命令字节。 接收到命令代码后、会生成数据请求标志、并且固件需要发出 ACK 才能继续发送消息。 在 PMBus 模块中、您可以设置中断标志以包含数据请求、而当中断被触发时、您可以处理 ISR 内部的 NACK。

    此致、

    Aishwarya.

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

    尊敬的 Aishwarya:

    感谢您发送编修。

    首先、我想将先前的观察结果可视化。

    我想确认我是否了解您的观点。

    要手动生成 NACK 和 ACK、  

    1.设置 PMBSC 寄存器的 MAN_CMD 位来手动控制 NACK/ACK

    2.启用 PMBINTM 寄存器的 DATA_REQUEST 位 、以在收到命令的 ACK/NACK 之前启用中断。

    3.中断将 在收到命令后并在收到的 命令的 ACK/NACK 之前触发。

    4. PMBus 模块 将启动时钟延展、直到设置 PMBACK 寄存器的 ACK 位。

    5.在 时钟延展期间、ISR 函数(需要创建)会检查命令类型。

    如果  不支持接收到的命令、请将该 ACK 位设置为0以进行 NACK

    如果  支持接收到的命令、则将1设置为该 ACK 位以进行 ACK

    我是否理解正确?

    如果可以、 我对默认情况下的电源有一个问题。

    在  PMBACK 寄存器 ACK 位的默认值上电为0。

      PMBus 模块是否  通过向  PMBACK 寄存器的 ACK 位写入0来释放时钟延展(不支持的命令情况)?

    或者、它在时钟延展超时后是否释放时钟延展?

    谢谢!

    Kang Hojoong

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

    Hojoong

    [报价 userid="613090" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1408499/tms320f280037-how-to-generate-the-nack-when-the-tms320f280037-receives-an-unsupported-pmbus-command/5404103 #5404103"]

      PMBus 模块是否  通过向  PMBACK 寄存器的 ACK 位写入0来释放时钟延展(不支持的命令情况)?

    或者、它在时钟延展超时后是否释放时钟延展?

    [报价]

    除非首先触发时钟低电平超时、否则在 ACK/NACK 之后会释放时钟延展。 此时、PMBus 模块将自动复位、以确保在正确的时间内完成任何辅助控制。

    此致、

    Aishwarya.  

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

    尊敬的 Aishwarya:

    感谢您发送编修。

    我们需要对其进行多次测试。  

    该解决方案似乎是中断持续触发所有传入的 PMBus 数据、并且软件会检查每个命令。

    也可能会带来更多的互操作性问题。

    是否还有其他客户在使用此解决方案?

    谢谢!

    Kang Hojoong

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

    Hojoong

    听起来不错。 如果您有关于实施的其他问题、请告诉我。

    此致、

    Aishwarya.

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

    Hojoong

    检查此问题是否已解决和/或是否有任何待解决问题?

    此致、

    Aishwarya.

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

    尊敬的  Aishwarya:

    很抱歉迟到了响应。

    对于使用 ISR 的不受支持的命令、我们在 NACK 方面存在问题。

    此解决方案会消耗大量 MCU 资源。  

    因此、我们决定此解决方案不适合我们的产品。

    配置 PMBus 硬件以使用 ACK 进行响应、然后对不受支持的命令配置虚拟数据、而不是使用 NACK 进行响应。

    这会 将 不受 支持的命令视为受支持的命令。

    如果 TI 芯片能够在收到支持的命令后用 NACK 进行响应、那将会很棒。

    以下是我对未来产品的建议。

    • 添加8个不受支持的命令控制寄存器。
    • 每个位字段显示命令地址。
    • 通过设置1、这会使自动回复 NACK

    谢谢!

    Kang Hojoong

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

    Hojoong

    很高兴看到问题得到解决。 感谢您的反馈、已记下。  
     此致、

    Aishwarya.