USB论坛
直播中

贾虎世

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

EZ-PD CCG5 type-c反接的时候无法识别usb2.0、usb3.0,怎么解决?

type-c正接的时候可以正常识别usb2.0、usb3.0。
APP_EVT_TYPEC_ATTACH_WAIT->APP_EVT_TYPEC_ATTACH->APP_EVT_CONNECT->APP_EVT_SRC_CAP_TRIED_WITH_NO_RESPONSE

type-c反接的时候有提示USB插入,但在读取USB信息的时候出错。
APP_EVT_TYPEC_ATTACH_WAIT->APP_EVT_TYPEC_ATTACH->APP_EVT_CONNECT->APP_EVT_SRC_CAP_TRIED_WITH_NO_RESPONSE->APP_EVT_PE_DISABLED

出错的时候,报了一个APP_EVT_PE_DISABLED,这个问题是必现的,换其它的usb设备也是同样情况。
以上为抓取到的log,是否还需要抓取其它log?请帮忙分析下什么原因。

回帖(1)

张国厚

2025-6-6 17:30:59

针对EZ-PD CCG5在Type-C反接时无法识别USB 2.0/3.0的问题,结合您提供的日志(APP_EVT_SRC_CAP_TRIED_WITH_NO_RESPONSE -> APP_EVT_PE_DISABLED),以下是系统性分析和解决方案:




问题根因分析




  1. CC引脚角色配置错误(关键原因)



    • Type-C正接时通过CC1通信,反接时通过CC2通信。

    • 反接时固件未正确切换CC引脚角色,导致协议引擎(PD PHY)无法正确通信,表现为SRC_CAP_TRIED_WITH_NO_RESPONSE(PD协商无响应)。




  2. VBUS或数据路径切换失败



    • 反接时USB数据通道(SSRX/SSTX, D+/D-)需通过电子开关切换。

    • 若VBUS供电控制或数据开关未正确激活,设备无法识别。




  3. PD协商超时导致PE禁用



    • PD通信失败后触发APP_EVT_PE_DISABLED,协议引擎被强制关闭,USB通信中断。






解决方案步骤


1. 检查CC引脚硬件配置



  • 确认原理图中CC1/CC2引脚是否连接到CCG5的CC1/CC2引脚(无交叉或短路)。

  • 测量反接时CC2电压(正常为0.4V~2.5V Rd电压,取决于Source端Rp)。


2. 修改固件CC引脚处理逻辑



  • APP_EVT_TYPEC_ATTACH事件中动态检测CC引脚角色
     void handle_attach_event(void) {
         uint8_t cc_used = get_active_cc_pin(); // 获取当前激活的CC引脚(CC1或CC2)
         pd_set_rx_path(cc_used);              // 设置PD PHY使用对应CC引脚
         usb_data_switch_config(cc_used);      // 切换USB数据通道
    }

  • 参考Cypress SDK中的cy_pdstack_cc_status API检测激活的CC引脚。


3. 优化VBUS控制逻辑



  • 在反接时确保VBUS使能信号被正确触发:
     if (cc_orientation == CC_ORIENTATION_FLIPPED) {
         vbus_control_enable(CC2_VBUS_EN_PIN); // 使能反接VBUS控制
    }


4. 避免PD引擎被错误禁用



  • APP_EVT_SRC_CAP_TRIED_WITH_NO_RESPONSE事件中重试PD协商而非直接禁用PE:
     case APP_EVT_SRC_CAP_TRIED_WITH_NO_RESPONSE:
         pd_retry_negotiation(); // 增加重试机制
         break;

  • 调整PD超时时间(增加PD_T_RESPONSE_TIMEOUT值)。


5. 验证数据通道切换



  • 调试USB电子开关控制信号(如SBU1_SEL, SBU2_SEL),确保反接时信号电平翻转:
     正接: SBU1_SEL=High, SBU2_SEL=Low
    反接: SBU1_SEL=Low,  SBU2_SEL=High




关键日志增强


为进一步定位,请增加以下日志:



  1. CC引脚状态
    LOG("Active CC: %d", cy_pd_get_active_cc_pin());

  2. VBUS监测值
    LOG("VBUS Status: %dmV", measure_vbus_voltage());

  3. USB开关控制状态
    LOG("USB Switch: SSTX=%d, SSRX=%d", get_switch_sstx(), get_switch_ssrx());




最终验证步骤



  1. 刷写修正固件后,反接Type-C测试USB枚举。

  2. 示波器/逻辑分析仪抓取

    • CC1/CC2引脚波形(是否出现PD通信尝试)

    • VBUS上升时间(是否稳定)

    • USB数据线D+/D-差分信号(有无SE0复位信号)




经验提示:反接失败常见于未动态切换CC引脚和VBUS控制逻辑。Cypress SDK案例(如usbpd_sink示例)中通常包含方向检测函数Cy_PD_CheckPortOrientation(),请参考其实现。



若仍存在问题,请提供增强后的日志及硬件原理图CC部分,我将进一步分析其物理层配置问题。

举报

更多回帖

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