USB论坛
直播中

甘满盛

8年用户 1360经验值
擅长:386660
私信 关注
[问答]

CYPD3171自定义应用程序在接收模式下工作,但在源模式下不通告任何协议是怎么回事?

我在自定义应用程序中结合使用 CYPD3171 芯片和 sc8815。基本上我只需要芯片协商电源角色、电压和电流,然后将该信息发送给 MCU。我修改了示例移动电源代码,禁用所有安全功能,禁用 USB A 端口、adc 调整、深度睡眠和电池充电,启用 PPS SRC 功能,并将 PWM OUT、BUCK_BOOST_EN 和 DIR_CTRL_C 引脚重新映射到未使用的引脚。当我连接支持 PD 的充电器时,芯片会触发快速充电,因此 SINK 模式可以工作,但是当我连接协议测试仪时,它不会检测到任何公布的协议,SOURCE 模式不起作用。因此硬件或软件中存在问题,您能否指出我应该检查代码中的什么内容以及您是否发现原理图有任何问题?

回帖(1)

贾熹

2025-7-25 18:14:05

针对CYPD3171在Source模式下不广播任何协议的问题,结合您的硬件配置(SC8815)和固件修改,以下是系统性排查方案:




关键原因分析




  1. 源角色配置错误  



    • 检查固件中设备角色是否设置为DRP(Dual Role Power)或强制SRC。若为纯SINK模式,则不会广播协议。

    • 检查点:搜索固件中的 DpmConfigurationdpmConfig 结构体,确认:
      dpmConfig.role = DPM_ROLE_DRP;  // 或 DPM_ROLE_SRC




  2. PDO(Power Data Object)未正确设置  



    • SRC模式需广播支持的电压/电流,若PDO数组为空或未启用,协议测试仪无法检测。

    • 检查点

      • 查找 DpmPdo 数组,确保包含有效的Source PDO(如5V/3A):
        const dpm_pdo_t DpmPdo[] = {
        {PDO_TYPE_FIXED, 5000, 1500},  // 5V, 1.5A
        {PDO_TYPE_PPS, 5000, 9000, 3000} // PPS支持(若启用)
        };

      • 确认 dpmConfig.numPdos 设置为PDO数量(例如 sizeof(DpmPdo)/sizeof(dpm_pdo_t))。





  3. 引脚重映射导致硬件控制失效  



    • 重映射的引脚(PWM_OUTBUCK_BOOST_ENDIR_CTRL_C)可能原本控制SC8815的使能或电源路径。若断开映射,VBUS无输出。

    • 排查步骤

      1. 原理图检查:确认重映射的引脚是否连接到了SC8815的关键控制信号(如EN使能、方向控制)。

      2. 示波器测量:连接协议测试仪时,检查 BUCK_BOOST_EN 引脚电平:

        • 作为SRC时,该引脚应为高电平(使能SC8815的升压输出)。

        • 若无信号,需在固件中重新映射回有效控制引脚。






  4. VBUS供电路径未激活  



    • CYPD3171需控制SC8815输出VBUS。若电源路径未开启,协议广播可能被抑制。

    • 关键固件函数

      • handle_pd_message() 事件中,检查收到 Request 消息后是否调用 VbusEnable(true)

      • 验证 app_vbus_enable() 函数中SC8815的控制逻辑(通过重映射的引脚控制)。





  5. PPS固件配置冲突  



    • 启用PPS SRC需额外配置:
      dpmConfig.ppsCfg.minVoltage = 5000;  // PPS最小电压
      dpmConfig.ppsCfg.maxVoltage = 12000; // PPS最大电压
      dpmConfig.ppsCfg.maxCurrent = 3000;  // PPS最大电流

    • 冲突点:若禁用其他功能时误关闭了PPS相关标志(例如 dpmConfig.featuresPPS_SRC_ENABLE 位未置位)。






快速验证步骤




  1. 基本协议广播测试  



    • 临时禁用PPS,仅保留固定5V PDO,观察是否广播基础PD协议(如5V/1.5A)。




  2. 关键日志调试  



    • app_pd_process_event() 中添加调试输出,监测事件流:
      case APP_PD_STATE_DR_SRC: // 源角色状态
      UartPrint("Entering SRC mode, advertising PDOs...n");
      break;




  3. 寄存器检查  



    • 通过I²C读取寄存器 0x28(设备状态):

      • Bit [2:0] = 101 表示已进入Source模式。

      • 若值非 101,则角色配置错误。































  4. 硬件信号测量 测试点 预期值(Source模式) 异常处理
    CC1/CC2引脚电压 0.8V-1.7V(Rp广播电压) 若电压为0,检查CC引脚上拉电阻配置
    SC8815_EN引脚 高电平(>2V) 检查固件是否设置GPIO输出高电平
    VBUS输出 5V(收到Request后输出) 未输出则检查SC8815供电与使能信号





修改建议




  1. 恢复关键引脚功能  



    • 若SC8815使能信号依赖 BUCK_BOOST_EN,将其重映射回可控GPIO(而非未使用引脚),并在固件中设置:
      GpioSetDir(BUCK_BOOST_EN_PIN, GPIO_OUTPUT);
      GpioSetState(BUCK_BOOST_EN_PIN, GPIO_HIGH); // 使能SC8815




  2. 强制进入Source模式

    在初始化时硬编码角色(测试用):


    void app_init(void) {
       dpmConfig.role = DPM_ROLE_SRC; // 强制为Source
       DPM_Init(&dpmConfig);
    }



  3. 简化配置模板

    参考CY4531开发板示例, 仅保留核心Source功能(移除所有移动电源相关逻辑)。






最终定位点:优先检查 PDO数组配置SC8815使能信号。协议广播需硬件(VBUS路径+CC上拉)和固件(PDO+角色)协同生效,任一环节失效均导致静默失败。通过分阶段测试(先角色+PDO,再硬件路径)可快速定位。

举报

更多回帖

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