充电学习—8、Type-C TCPC TCPCI

  • TCPC是usb Type-C port controller; 通用串行总线C型端口控制器

  • TCPCI是tcpc控制器接口规范;

  • TCPC是个功能块,其中含有VBUS和VCONN的电源控制功能,CC信号的处理 逻辑,PD应用中的BMC物理层和协议层(PD信息的编码发送接收处理过程都在里面); 信息的生成不包含其中
    在这里插入图片描述

  • USB-IF制定了一个接口标准,通过i2c接口将TCPM(Type-C port manager)和TCPC连接起来,所有的TCPC产品都以此标准来进行设计;

  • 即TCPM看到的TCPC都是标准化的,他们内部有大量的寄存器挂在i2c接口上,这些寄存器地址和内容大部分相同,扩展部分才是厂家自定义的

  • 当厂家使用自定义的寄存器内容时,会在设计中明示出来

  • 所以,关注TCPC其实只要图中下半部分展示内容,其中小方块表示它含有的功能或是模块,下面与之连接的是实际中USB端口的 物理部分
    如图中RT1718S上边和左边连接部分:
    在这里插入图片描述

  • TCPC是图中上侧的VBUS VCONN等表现出来的USB实体设备端口,和右侧的对CC信号处理的协议规范
    TCPM在图中是位于右侧的MCU/EC中的一个组件或说是其一个功能,挂在i2c上,

  • TCPCI规范以需求的形式对TCPC要完成的工作进行了说明,

第一部分:对VBUS和VCONN的电源进行管控:
  • VBUS就是通过USB线传输的电源正极端,它的电压在USB诞生时就是5V,能传输的电流从500ma到现在C口的3A再到PD出现后带e-mark的5A,电压现在已经到了48V,所以通过VBUS可以传输240W的功率;
  • TCPCI对VBUS的电压转换不关新心,它提供的只是一个通道;
  • 实际是有关PD的协议在通过TCPC时是不会被解读的,他们通过TCPC进行传输,到了TCPM才会被处理,处理结果会反馈到VBUS电压变化上,而TCPC可以对VBUS电压进行监测,对VBUS通道进行开关控制,到了连接中断时还会对VBUS通道进行放电处理以确 保安全;
  • 根据USB设备角色的不同,TCPC中定义了很多寄存器对这些角色实现和转换进行控制,实际实施时需要TCPM根据不同角色和需要随时对TCPC的寄存器进行操作以实现其应用目标,这导致不同角色的TCPC需要完成不同的任务;
  • VCONN的作用和VBUS有点类似,生成位置也是供电端,但它的电路在线缆cable中,如Type-C线缆上的电子标签就需要它供电,其电压电流也需要可控,TCPC内部也有寄存器用于VCONN的生成和控制
第二部分:对CC信号的处理:

CC信号的处理,涉及角色判断、对CC线状态进行监测、根据需要使用Rd/Rp等;
PD协议使用之后,TCPC又新增了对PD协议信息的传输能力,其中就有MNC编解码、信息的存储和收发等内容,

第三部分:对TCPM的接口:

TCPM完全不需要去关心PD协议是如何传输的,它只管根据自己需要去生成和处理信息即可,传输上的事情都丢给TCPC了,TCPC和TCPM通信时处理的都是TCPC内部寄存器

diff --git a/pd_ext/pd_dpm_core.c b/pd_ext/pd_dpm_core.c index c1beed8c6..ed363492e 100755 --- a/pd_ext/pd_dpm_core.c +++ b/pd_ext/pd_dpm_core.c @@ -375,7 +375,10 @@ static bool dpm_build_request_info( for (i = 0; i < src_cap->nr; i++) DPM_INFO("SrcCap%d: 0x%08x\n", i+1, src_cap->pdos[i]); - +#ifdef OPLUS_FEATURE_CHG_BASIC + if (src_cap->pdos[0]) + tcpci_notify_sourcecap_done(tcpc, (struct power_caps *)src_cap); +#endif #ifdef CONFIG_USB_PD_REV30_PPS_SINK if ((charging_policy & DPM_CHARGING_POLICY_MASK) == DPM_CHARGING_POLICY_PPS) { @@ -519,11 +522,18 @@ int pd_dpm_update_tcp_request(struct pd_port *pd_port, uint8_t charging_policy = pd_port->dpm_charging_policy; struct pd_port_power_caps *src_cap = &pd_port->pe_data.remote_src_cap; struct tcpc_device __maybe_unused *tcpc = pd_port->tcpc; + int rc; + uint32_t chip_pid; memset(&req_info, 0, sizeof(struct dpm_rdo_info_t)); DPM_INFO("Policy=0x%X\n", charging_policy); + rc = tcpci_get_chip_pid(pd_port->tcpc, &chip_pid); + + if ((!rc && chip_pid == CPS_PID) && charging_policy == DPM_CHARGING_POLICY_MAX_POWER_LVIC) + return TCP_DPM_RET_DENIED_NOT_READY; + #ifdef CONFIG_USB_PD_REV30_PPS_SINK if ((charging_policy & DPM_CHARGING_POLICY_MASK) == DPM_CHARGING_POLICY_PPS) @@ -664,6 +674,8 @@ void pd_dpm_snk_standby_power(struct pd_port *pd_port) uint8_t type = 0; int ma = -1; + int rc; + uint32_t chip_pid; int standby_curr = 2500000 / max(pd_port->request_v, pd_port->request_v_new); @@ -703,14 +715,28 @@ void pd_dpm_snk_standby_power(struct pd_port *pd_port) /* Case8 Decreasing the Voltage and the Current*/ ma = standby_curr; type = TCP_VBUS_CTRL_STANDBY_DOWN; +#ifdef OPLUS_FEATURE_CHG_BASIC + } else if (pd_port->request_i == -1 || pd_port->request_i_new < pd_port->request_i) { + /* Case6 Decreasing the Current, t1 i = new */ + ma = standby_curr; + type = TCP_VBUS_CTRL_STANDBY; + } +#else } else if (pd_port->request_i_new < pd_port->request_i) { /* Case6 Decreasing the Current, t1 i = new */ ma = pd_port->request_i_new; type = TCP_VBUS_CTRL_STANDBY; } +#endif + + rc = tcpci_get_chip_pid(pd_port->tcpc, &chip_pid); + if ((!rc && chip_pid == HUSB311C_PID) && pd_port->request_v_new == pd_port->request_v) { + ma = standby_curr; + type = TCP_VBUS_CTRL_STANDBY; + } if (ma >= 0) - tcpci_sink_vbus(pd_port->tcpc, type, pd_port->request_v_new, ma); + tcpci_sink_vbus(pd_port->tcpc, type, pd_port->request_v_new, 0); #else #ifdef CONFIG_USB_PD_SNK_GOTOMIN tcpci_sink_vbus(pd_port->tcpc, TCP_VBUS_CTRL_REQUEST, 详细解析修改内容
最新发布
12-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值