针对CYPD3171在Source模式下不广播任何协议的问题,结合您的硬件配置(SC8815)和固件修改,以下是系统性排查方案:
源角色配置错误
DRP(Dual Role Power)或强制SRC。若为纯SINK模式,则不会广播协议。DpmConfiguration 或 dpmConfig 结构体,确认:dpmConfig.role = DPM_ROLE_DRP; // 或 DPM_ROLE_SRCPDO(Power Data Object)未正确设置
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))。引脚重映射导致硬件控制失效
PWM_OUT、BUCK_BOOST_EN、DIR_CTRL_C)可能原本控制SC8815的使能或电源路径。若断开映射,VBUS无输出。BUCK_BOOST_EN 引脚电平:VBUS供电路径未激活
handle_pd_message() 事件中,检查收到 Request 消息后是否调用 VbusEnable(true)。app_vbus_enable() 函数中SC8815的控制逻辑(通过重映射的引脚控制)。PPS固件配置冲突
dpmConfig.ppsCfg.minVoltage = 5000; // PPS最小电压
dpmConfig.ppsCfg.maxVoltage = 12000; // PPS最大电压
dpmConfig.ppsCfg.maxCurrent = 3000; // PPS最大电流dpmConfig.features 中 PPS_SRC_ENABLE 位未置位)。基本协议广播测试
关键日志调试
app_pd_process_event() 中添加调试输出,监测事件流:case APP_PD_STATE_DR_SRC: // 源角色状态
UartPrint("Entering SRC mode, advertising PDOs...n");
break;寄存器检查
0x28(设备状态):[2:0] = 101 表示已进入Source模式。101,则角色配置错误。| 硬件信号测量 | 测试点 | 预期值(Source模式) | 异常处理 |
|---|---|---|---|
| CC1/CC2引脚电压 | 0.8V-1.7V(Rp广播电压) | 若电压为0,检查CC引脚上拉电阻配置 | |
| SC8815_EN引脚 | 高电平(>2V) | 检查固件是否设置GPIO输出高电平 | |
| VBUS输出 | 5V(收到Request后输出) | 未输出则检查SC8815供电与使能信号 |
恢复关键引脚功能
BUCK_BOOST_EN,将其重映射回可控GPIO(而非未使用引脚),并在固件中设置:GpioSetDir(BUCK_BOOST_EN_PIN, GPIO_OUTPUT);
GpioSetState(BUCK_BOOST_EN_PIN, GPIO_HIGH); // 使能SC8815强制进入Source模式
在初始化时硬编码角色(测试用):
void app_init(void) {
dpmConfig.role = DPM_ROLE_SRC; // 强制为Source
DPM_Init(&dpmConfig);
}简化配置模板
参考CY4531开发板示例, 仅保留核心Source功能(移除所有移动电源相关逻辑)。
最终定位点:优先检查 PDO数组配置 和 SC8815使能信号。协议广播需硬件(VBUS路径+CC上拉)和固件(PDO+角色)协同生效,任一环节失效均导致静默失败。通过分阶段测试(先角色+PDO,再硬件路径)可快速定位。
举报
更多回帖