USB论坛
直播中

王平

8年用户 1428经验值
私信 关注
[问答]

求助,为什么在PdStack中检测到Attach和打开Vbus之间会有很长时间的延迟?

我的处理器是 PMG1-S2,我已经移植了 PdStack。
目前,我可以看到连接(CC 线路变化)和 Vbus 接通之间有400 毫秒的延迟。 我的理解是,400 毫秒的延迟违反了 USB-c 规范。  作为参考,其他产品的这一延迟小于 100 毫秒,而规格定义为 200 毫秒左右。 是什么导致了如此长的延迟?
谢谢,

回帖(1)

郭中

2025-5-28 17:39:32

在PMG1-S2处理器上移植PdStack后,Attach事件与Vbus开启之间存在400毫秒延迟的问题,可能由以下原因导致。需按以下步骤排查和优化:




1. 软件配置检查


1.1 去抖动时间(Debounce Time)设置



  • USB-C规范要求CC信号去抖动时间通常为 5-20ms。若PdStack中配置的去抖动时间过长(如100ms以上),会导致检测到Attach后的延迟。

  • 解决方法:检查并调整 CY_PD_DEBOUNCE_COUNTER 或类似参数,确保去抖动时间符合规范。


1.2 中断响应与任务优先级



  • 中断延迟:确认CC检测的GPIO中断配置为最高优先级,且中断服务程序(ISR)中仅标记事件,避免阻塞。

  • 任务调度延迟:若PdStack在低优先级任务中处理Attach事件,可能导致处理延迟。

  • 解决方法

    • 确保CC中断使用低延迟的嵌套向量中断控制器(NVIC)配置。

    • 在ISR中快速置位事件标志,由高优先级任务处理Vbus开启。



1.3 状态机处理流程



  • PdStack可能需经过多个状态(如UnattachedAttachWaitAttached)才会触发Vbus。

  • 解决方法

    • 检查状态机转换条件,确认是否存在冗余步骤。

    • 缩短 tPDDebouncetCCDebounce 相关定时器的超时值。





2. 硬件设计验证


2.1 Vbus控制电路延迟



  • 若Vbus通过MOSFET或负载开关控制,其开启时间(如tRISE)可能引入延迟。

  • 解决方法

    • 测量Vbus控制信号的上升时间,确认是否因硬件电路导致延迟。

    • 更换快速响应的MOSFET(如低栅极电荷型号)。



2.2 CC检测电路设计



  • CC引脚的上拉/下拉电阻和滤波电容可能导致信号响应变慢。

  • 解决方法

    • 检查RC时间常数,确保满足USB-C的 tCCDebounce 要求(典型值≤10ms)。

    • 减少滤波电容值(如从100nF降至10nF)。





3. 系统级优化


3.1 时钟配置



  • 确认PMG1-S2的系统时钟频率是否足够高(如48MHz以上),避免因时钟过慢导致处理延迟。

  • 解决方法:检查时钟树配置,确保内核和外设时钟符合PdStack要求。


3.2 Vbus开启代码路径



  • 确认Vbus开启操作是否直接由GPIO控制,而非通过慢速接口(如I2C)。

  • 解决方法

    • 使用GPIO直接控制Vbus开关,避免通信协议延迟。

    • 若必须通过I2C/SPI,优化通信速率和轮询间隔。





4. 调试与验证


4.1 测量关键信号



  • 使用示波器捕获以下信号时序:

    • CC线变化中断触发的时间。

    • 中断触发PdStack处理函数开始执行的时间。

    • Vbus控制信号的上升时间。


  • 通过测量定位延迟具体发生在软件还是硬件阶段。


4.2 启用PdStack调试日志



  • 检查PdStack内部状态转换和定时器事件,确认是否有警告或错误日志。

  • 示例关注点:

    • PD_STATE_ATTACH_WAIT 状态的停留时间。

    • PD_EVENT_CC_DETACHEDPD_EVENT_CC_ATTACHED 的事件处理顺序。





5. 参考优化方案


// 示例:调整去抖动时间和中断优先级
#define CY_PD_DEBOUNCE_COUNTER    (5u)    // 对应约5ms(根据时钟频率调整)

// 配置CC中断为最高优先级
cy_stc_sysint_t ccIntConfig = {
    .intrSrc = gpio_interrupt_IRQn,
    .intrPriority = 0u  // 最高优先级
};
Cy_SysInt_Init(&ccIntConfig, CC_Interrupt_Handler);



结论


通过优化软件配置(去抖动时间、中断优先级)、简化状态机流程,并验证硬件电路响应速度,可将延迟缩短至100ms以内。建议优先从软件去抖动和中断处理入手,再逐步排查硬件瓶颈。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分