USB论坛
直播中

duke刘

11年用户 840经验值
擅长:可编程逻辑
私信 关注
[问答]

可以在哪里修改以更改非 PD 类型 C 中不同的 Rp 等级?

我正在使用 CCG3PA,我需要更改 C 型非 PD Rp 等级。

  • 在 C 型 PD 中我可以使用 " pd_typec_en_rp (); " 函数来更改 Rp 等级,但在 C 类型中不是 PD pd_typec_en_rp ();函数对 Rp 等级没有影响,那么我们可以在哪里修改以更改非 PD 类型 C 中不同的 Rp 等级?
  • 还建议一种在非 pd sink 连接到 ccg3pa 时更改 rp 的方法
  • 在那个 non_pd_type_C 文件中,我首先设置了那个 Rp 等级,然后在设置为 C 类型之后将其设置为非 PD 类型 c 它将变为默认 Rp 等级。
  • 对于 type_c_pd_src_SNK 它会使用不同的 Rp 等级

回帖(1)

时见栖鸦

2025-6-3 17:57:57

在 CCG3PA 控制器中修改非 PD Type-C 的 Rp 等级,需通过以下步骤调整固件代码:




1. 理解 Type-C Rp 的非 PD 配置逻辑



  • 非 PD 模式下,Rp 的值通过 CC 引脚的上拉电阻(1.5A/3A)直接配置,与 PD 协议无关。

  • CCG3PA 的固件通常会在 type_c.capp_typec.c 等文件中管理非 PD 的 Type-C 状态机。




2. 定位非 PD Rp 配置的代码位置




  • 默认 Rp 设置:在 app_port_config.happ_config.h 中查找类似 DEFAULT_RP 的宏定义,例如:


    #define DEFAULT_RP  CY_PD_TYPEC_RP_STD // 标准 1.5A
    // 或 CY_PD_TYPEC_RP_3A

    修改此处可直接改变初始化的默认 Rp 值。




  • 动态 Rp 配置:在 Type-C 状态机(如 app_typec.capp_typec_snk_entry 函数)中,当检测到非 PD Sink 连接时,调用硬件接口设置 Rp:


    cy_ccg3pd_set_port_config(port, CY_PD_TYPEC_RP_3A, CY_PD_TYPEC_RD_NONE);





3. 修改关键函数


在非 PD Sink 连接事件中,强制更新 Rp 值:


// 示例:在状态机中检测到非 PD 设备时设置 Rp
if (is_non_pd_sink_connected) {
    cy_ccg3pd_set_port_config(port, CY_PD_TYPEC_RP_3A, CY_PD_TYPEC_RD_NONE);
}



4. 使用硬件寄存器直接配置(备选)


如果固件未提供 API,可直接操作寄存器:



  • 查找 DmcTypeCRp 相关寄存器(参考 CCG3PA TRM),通过寄存器写入 Rp 值:
    uint8_t rp_value = 0x03; // 例如:0x03 对应 3A
    write_register(DmcTypeCRp_REG_ADDR, rp_value);




5. 注意事项



  • Type-C 规范兼容性:Rp 值需符合 Type-C 标准(1.5A/3A)。

  • 固件版本差异:不同版本的 SDK 可能代码结构不同,需根据实际代码调整。

  • 测试验证:用 USB-C 电压电流表或协议分析仪确认 Rp 实际生效。




总结步骤



  1. 修改默认 Rp 宏定义:在 app_config.h 中设置 DEFAULT_RP

  2. 在状态机中动态设置 Rp:在非 PD 连接事件中调用 cy_ccg3pd_set_port_config

  3. 寄存器级配置(可选):直接写入 Rp 寄存器值。


通过上述方法,可在非 PD Type-C 模式下动态控制 Rp 等级。建议参考 Cypress SDK 中的 app_typec.c 和硬件手册进一步调试。

举报

更多回帖

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