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.

[参考译文] LAUNCHXL-F28P55X:F28P55X

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1367153/launchxl-f28p55x-f28p55x

器件型号:LAUNCHXL-F28P55X
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

我正在尝试否定确认 PMBus 帧(写入字节)。 我将使用 PMBus 示例代码[C2000Ware_5_02_00_00\libraries\communications\PMBus\c28]、更改如下所示、

我对帧(写入字节)的观察结果如下:

第一个写入字节(器件发送 ACK)

a)第一帧:[预期 NACK、但收到来自器件的 ACK)

b)第二帧:[似乎器件在此处发送了 NACK]

请提供帮助吗?

谢谢、hari

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

    基本上,时钟 strech 是看不到的软件发送 NACK ...

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

    嗨、Hari、

    NACK 通常用于专门检测 PMBus 硬件内的错误消息。  为了 NACK、PMBACK 必须向其写入一个0、并且只能在模块等待确认时完成。 如果该位在任何其它时间被写入、则 NACK 将出现下一条消息。 读取 PMBSTS 时。 NACK、何时设置该位? 那么 PMBus 应该在什么情况下 发送 NACK?

    如果您 想进行时钟延展、请 查看 PMBSTS。 DATA_Request/DATA_READY 寄存器值。 PMBus 模块已经负责在发出 ACK 之前延展时钟、因此在这种情况下、您似乎需要添加某种延迟来保持时钟低电平。  

    此致、

    Aishwarya.

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

    尊敬的 Aishwarya:

    感谢您的答复。 我的方案是在收到具有无效数据位字段的命令时实现 NACK。 是的、我正在写入 PMBACK 寄存器。

    实际上、代码与 C2000WARE 中的示例代码相同- C2000Ware_5_02_00_00\libraries\communications\PMBus\c28\examples\28p55x_PMBus_target。

    我所做的就是采用 PMBus_stack_handler_target_idle.c 并进行更改  

    //
    //调用 SENDBYTE 事务的处理程序
    //
    (void) handle->
    TransactionHandle[PMBUS_TRANSACTION_SENDBYTE](handle);

    //
    //确认整个事务
    //
    PMBus_ NACK Transaction(base );<--我将其更改为 NACK

    在编译和测试时,没有看到 NACK ;事实上,每一个其他帧都是 NACK。 i2c 分析器的快照在我的上一条消息中。  

    您认为我需要使用 GPIO 探测 PMBACK 吗? ACK 时隙丢失并发送到下一条消息??

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

    Hari、

    如果您 改为使用 PMBus_ackTransaction (),会出现什么情况? PMBus 负责硬件中的 NACK、因此即使您尝试确认错误的事务、也应该返回 NACK。 请参考这些线程作为起点、我将在平均时间内进行一些挖掘:  

    (+) TMS320F280039C:PMBus 模块问题的从器件地址的手动确认/ NACK

    (+) TMS320F280025C:PMBus 在重新启动命令时未发送 ACK?

    此致、

    Aishwarya.

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

    Aishwarya,

    使用 PMBus_ackTransaction ()时,我看到一个 ACK。 这里、在下面的 SNAP 中、我先切换了 GPIO、当接收到第二个 IRQ 时)、当 ACK PMBACK 被写入 NACK 时。 如您所见、IRQ 只在 ACK 时隙之后出现。 如果是这种情况,如何否定应答,为什么设备不时钟串行直到固件写入 PMBACK 寄存器?

    我的初始值如下所示、

    void myPMBUS0_init (){
    uint32_t moduleFreq = 0u;
    PMBUS_disableModule (myPMBUS0_BASE);
    PMBus_disableI2CMode (myPMBUS0_BASE);
    PMBUS_disableZeroHoldTime (myPMBUS0_BASE);
    PMBus_deassertAlertLine (myPMBUS0_BASE);
    PMBUS_setOwnAddress (myPMBUS0_BASE、myPMBUS0_own_address);
    moduleFreq = PMBus_configModuleClock (myPMBUS0_BASE、myPMBUS0_BAUDRATE、DEVICE_SYSCLK_FREQ);
    PMBUS_configBusClock (myPMBUS0_BASE、myPMBUS0_CLOCKMODE、moduleFreq);

    PMBUS_initTargetMode (myPMBUS0_BASE、myPMBUS0_TARGET_ADDRESS、myPMBUS0_TARGET_MASK);
    PMBUS_configTarget (myPMBUS0_BASE、/* PMBUS_TARGET_AUTO_ACK_4_BYTES |*/ PMBUS_TARGET_ENABLE_PEC_processing);
    PMBUS_disableInterrupt (myPMBUS0_BASE、PMBUS_INT_DATA_READY | PMBUS_INT_DATA_REQUEST | PMBUS_INT_EOM);
    PMBUS_enableInterrupt (myPMBUS0_BASE、PMBUS_INT_DATA_READY | PMBUS_INT_DATA_REQUEST | PMBUS_INT_EOM);
    PMBus_enableModule (myPMBUS0_BASE);
    }

    我如何使器件时钟延展直到 ACK/NACK 被写入 PMBACK 寄存器?

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

    Hari、

    根据您随附的图像、在 ACK 之后、模块将拉 低数据线并释放与您的代码一致且正确的时钟。 您是否正在使用写入字/字节函数? 请参阅此图、尤其是突出显示的部分。

    此外、向 PMBACK 位写入0仅在模块等待确认时发送 NACK。 否则、NACK 将在下一条消息 FYI 期间发送  

    如果您有兴趣、还请参阅 I2C 自动时钟延展部分(类似原理适用于 PMBus)以了解一般概念。  

    此致、

    Aishwarya.  

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

    Hari、

    您是否能够解决此问题? 如果没有其他问题了、我将继续并关闭该主题  

    此致、

    Aishwarya.  

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

    Aishwarya,

    我不能再想了。"

    我知道必须在 ACK 时隙提供 ACK、但器件固件的中断是在停止位。  当在 STOP 位上发送中断本身时、我应该如何在 ACK/NACK 时隙期间写入 PMBACK 位?  

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

    Hari、

    我认为现在的情况是、由于  启用了每4个字节后自动确认的选项、PMBus 硬件将根据默认的 PMBus 确认/确认规则 (可在 TRM 中找到的信息)处理确认/确认。 当您在第一个传输结束时 NACK 时、您将 NACK 所有以下命令、因为设置第一个传输的 NACK 的机会 已结束、这将打破已设置的自动确认设置。 这与 I2C 是一致的 、因为它们确实共享同一个基本设计层。

    您想要做的是使用手动 ACK/NACK、这样就会在发送 x 个数据字节后和 ACK/NACK 时隙之前触发中断。  

    此致、

    Aishwarya.