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.

[参考译文] UCD3138:具有 ACK 和时钟拉伸功能的 PMBus 问题

Guru**** 2579645 points
Other Parts Discussed in Thread: UCD3138

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/895632/ucd3138-question-of-pmbus-with-ack-and-clock-stretching

器件型号:UCD3138

尊敬的 TI 专家:

我将 UCD3138测试 PMBus 写入与微芯片 PICkit 串行分析器配合使用。 UCD3138是从设备、微芯片 PICkit 串行分析器是主设备。 我发现 UCD3138是否在 ACK 前拉低时钟、ACK 时钟是否短。 这种情况只发生在每4个字节(不包括地址)。

请参阅下面的波形、

示例:写入数据 [S_][B6][48][D0][39][4D][2D][53][41][30][35][P_]

那么、我想实现 UCD3138在 ACK 前不要拉低时钟、我该怎么做?

我想 通过中断实现 PMBus、如何配置寄存器和固件?

谢谢!

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

    很难防止某些时钟拉伸。  这种拉伸是由硬件等待固件从接收缓冲区获取数据并进行 ACK 造成的。   

    如果需要、您只有半个 PMBus 时钟周期的响应时间。  我真的无法分辨您的时钟频率是多少-您能告诉我放大屏幕上的时间刻度是多少吗?

    在100kHz 时、您只有5微秒。  在400kHz 时、只有1.25微秒。  由于需要为其他事情提供快速中断、这意味着您实际上无法避免至少一些时钟拉伸。  

    大多数微控制器系统必须具有时钟扩展。   无论如何、这似乎不会导致通信出现任何问题。   

    我认为时钟短路是由 Microchip 处理时钟的方式引起的、因为 UCD 在从固件获取 ACK 时会释放时钟。  

    如果不知道 PMBus 时钟速度和 Microchip 要求、我很难判断短路时钟是否危险。   

    我建议使用一个大约为1.5千欧的上拉电阻器。  您的上升沿看起来可能有点慢。  我们发现、1.5kOhm 电阻器有助于保护 PMBus 免受噪声和其他问题的影响。   

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

    尊敬的 Ian:  

    感谢您的支持。 时钟为100KHz。  

    我想配置具有触发 DATA_RDY 的快速中断来从接收缓冲区获取数据以减少时钟拉伸、这种方法是否可行 ?

    谢谢!

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

    TINA、如果您只能将快速中断专用于 PMBus、则可能仍然无法完全避免时钟拉伸。  有时、您会减慢标准中断响应的速度、尤其是在 PMBus 函数调用的某些内容较为复杂的情况下。  不会写入 PMBus 函数以进入快速中断、因此将其放置在该中断相对较难。  要尝试使其足够快、您需要预先计算所有监控信息、并让快速中断返回预计算的值。  您可能还需要获取所有用于更改 UCD 中内容的命令、并将其代码置于后台状态机中、PMBus 快速中断只需设置一个位并存储信息即可告知后台执行什么操作。   

    如果您将快速中断用于其他操作、它将不可中断、因此在这种情况下、只要使用快速中断发生 PMBus、您仍将获得时钟扩展。   

    另请注意、我们的 PMBus 函数不能在中断时工作、因此如果您使用 PMBus 中断生成快速中断、可能会出现问题。

    此外、添加任何额外的中断函数会增加不同中断级别之间发生写入中断和其他异步冲突的可能性。  这些代码很难进行测试、也很难进行调试、因为它们仅在两级代码恰好在错误的时间点进行交互时才会发生。  当较低优先级的任务处于修改相同内容的中间时、必须发生中断。   

    除非时钟扩展存在实际问题、否则我们不建议使用中断驱动的 PMBus。  似乎没有真正的问题。

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

    尊敬的 Ian:

    我只在引导代码中使用 PMBus 中断、因此我不需要其他标准中断和其他快速中断。 我使用微芯片 PICkit 串行分析器来测试 PMBus wirte、因为 ACK 时钟很短、这会导致 SDA 超时。  

    请参阅下面的波形、

    CH1:主器件 SDA、CH2:主器件 SCL、CH3:UCD3138 SCL

    我知道、时钟较短是由 Microchip 处理时钟的方式引起的、但我需要使用 Microchip PICkit 串行分析 器来实现固件升级。

    我配置 PMBus 中断、但 它是不可中断的。 我应忽略哪里?

    什么寄存器是 PMBus 中断标志? 以及如何使用 PMBus 中断标志来启用和清除 PMBus 中断?

    谢谢!

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

    Tina、我不确定那里发生了什么。  您使用的 UCD 地址是什么。  请确保您不使用地址0xFF、这可能会在某些情况下导致问题、并且 PMBus 不允许使用该地址。   

    如果您确实想为 PMBus 使用中断、则需要在 PMBus 部分查看 UCD3138技术参考手册。   

    您将看到 PMBINTM 寄存器、您可以在其中启用中断。   

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

    尊敬的 Ian:

    我想在引导代码中使用快速中断、但无法实现。 我发现引导示例代码 load_64.asm 与 AP 代码不同。 我认为我无法在引导代码中实现快速中断、因为 load_64.asm 未配置快速中断。  

    如何配置引导代码?

    谢谢!

    e2e.ti.com/.../d1d4-boot-flash-001.zip

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

    load.asm 唯一做的就是将快速中断的矢量链接到快速中断函数。  但这对您来说将是一个问题。   

    因为引导闪存通常会将快速中断链接到主程序中的快速中断。   

    .sect ".vectors"
    .state32.
    b c_int00
    b VEC_2
    b VEC_3
    b VEC_4
    b VEC_5
    b VEC_6
    b VEC_7
    b VEC_8


    正常的 load.asm 直接链接到快速中断:

    .sect ".vectors"
    .state32.
    b c_int00
    b _undefined_instruction_exception
    b _software_interrupt
    b _abort_prefet_exception
    b _abort_data_fetch_exception
    b _abort_prefet_exception
    b _standard_interrupt
    b _FAST_INTERRUPT

    因此、您必须在引导矢量中将分支放置到快速中断。  这意味着快速中断也必须进入引导区域。  但您仍然需要支持主程序中的快速中断。  因此、您实际上需要向具有 RAM 矢量的位置发送矢量、您将加载该矢量以分支到引导闪存中的快速中断或向量8。  这将减慢您的快速中断速度。

    我知道您在时钟拉伸后看到了这个问题、但我仍然不相信这是根本原因。  我建议您在两个芯片之间的数据和时钟线路中放置一个低值电阻器、可能是100欧姆。  这样、您就可以判断哪个器件将线路下拉。  此外、请尝试使用1.5千欧的上拉电阻。  您现在使用的是哪个上拉电阻器?

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

    尊敬的 Ian:

    感谢您的支持。 上拉电阻为10千欧。 我尝试可以改进的4.75千欧。 但上拉电阻器10千欧由我们的客户定义、我无法更改上拉电阻器。

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

    TINA、UCD 肯定不会与10 K 欧姆电阻器一起工作。  我们建议至少低至1.5千欧。  在某些条件下、10K 可用于某些器件、但为了在所有条件下实现可靠运行、并且对于所有 UCD 器件、我们建议使用较低的值。  无法使用快速中断来解决它。   

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

    我将假设这已解决。