USB‑C PD 充电系统完整解析(SC8886 + FUSB302)

# USB‑C PD 充电系统完整解析(SC8886 + FUSB302)

USB‑C PD(Power Delivery)已经成为 RK3568 / RK3588 / RK3576 等平台的主流供电方式。

在 Rockchip 官方方案中,PD 充电系统由三大核心组成:

  • FUSB302:Type‑C Port Controller(TCPC),负责 PD 协商
  • SC8886:充电 + 升降压 + PowerPath 管理
  • USB‑C Connector Class:Linux 系统的角色管理框架

本文将从硬件、软件、DTS、PD 协商、充电流程、OTG、调试方法等方面进行完整讲解。


# 1. 整体架构总览

USB‑C PD 电源系统由三部分组成:

模块 作用
FUSB302(TCPC) PD 协商、CC 侦测、角色切换
SC8886(充电/升降压 IC) 电源转换、充电、OTG、PowerPath
USB‑C Connector Class 系统角色管理(Host/Device、Source/Sink)

三者协同工作,实现完整的 USB‑C PD 功能。


# 2. SC8886:充电 + 升降压 + PowerPath 管理核心

SC8886 是一颗高度集成的电源管理 IC,功能包括:

① Buck(降压)

PD 输入 9V/12V → 降压到系统电压(5V/3.3V)

② Boost(升压)

电池 → 升压到 5V(OTG 输出)

③ Buck‑Boost(升降压)

输入电压波动时保持系统稳定供电

④ 电池充电

支持 1S/2S 锂电池

支持最大 6A 输入电流

支持最大 8.4V 充电电压(2S)

⑤ PowerPath(系统优先供电)

  • 系统优先供电
  • 电池作为备用
  • 自动切换,无需软件干预

⑥ PD 输入电压跟随

根据 FUSB302 的 PD 协商结果自动调整输入电压/电流。


# 3. FUSB302:PD 协商控制器

FUSB302 是一个 TCPC(Type‑C Port Controller),负责:

  • CC1/CC2 侦测
  • PD 协议收发
  • 方向检测(正反插)
  • 数据角色(Host/Device)
  • 电源角色(Source/Sink)

不负责电压转换,只负责"和充电器对话"。


# 4. USB‑C Connector Class:系统角色管理

Linux 的 USB‑C Connector Class 描述 USB‑C 口的能力:

dts 复制代码
usb_con: connector {
    compatible = "usb-c-connector";
    data-role = "dual";
    power-role = "dual";
    try-power-role = "sink";

它定义:

  • 数据角色(Host/Device)
  • 电源角色(Source/Sink)
  • 支持的电压(Sink PDO)
  • 支持的输出电压(Source PDO)
  • DP Alt Mode

# 5. Sink PDO:决定你能接受哪些电压

Sink PDO 是 你作为 Sink(从 PD 充电器取电)时能接受的电压列表

例如:

dts 复制代码
sink-pdos =
    <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)
     PDO_FIXED(9000, 2000, PDO_FIXED_USB_COMM)
     PDO_FIXED(12000, 1500, PDO_FIXED_USB_COMM)>;

表示:

  • 支持 5V 3A
  • 支持 9V 2A
  • 支持 12V 1.5A

# 6. TCPM 如何选择电压?(关键)

FUSB302 不决定电压,真正做决策的是 Linux 的 TCPM(Type‑C Port Manager)。

TCPM 的选择规则:

  1. 优先选择 最高电压(前提是电流满足要求)
  2. 如果不满足,选择次高电压
  3. 最后退回 5V

例如:

复制代码
5V / 9V / 12V

→ 充电器支持 12V → TCPM 自动选择 12V

如果你想优先 9V,可以把 9V 放在第一位:

复制代码
9V → 12V → 5V

顺序 = 优先级。


# 7. SC8886 的 DTS 配置详解

SC8886 使用 TI BQ25703 的兼容驱动:

dts 复制代码
sc8886: sc8886@6b {
    compatible = "ti,bq25703";
    reg = <0x6b>;

① PD 输入电压/电流限制

dts 复制代码
ti,max-input-voltage = <20000000>; // 20V
ti,max-input-current = <6000000>;  // 6A

② 充电电压/电流

dts 复制代码
ti,charge-current = <2000000>;     // 2A 充电
ti,max-charge-voltage = <8400000>; // 8.4V(2S)

③ 系统最低电压

dts 复制代码
ti,minimum-sys-voltage = <6144000>;

低于此电压 → 自动从电池升压供电。

④ OTG 升压输出

dts 复制代码
ti,otg-voltage = <5000000>;
otg-mode-en-gpios = <&gpio4 RK_PC0 GPIO_ACTIVE_HIGH>;

# 8. PD 协商 → 电源转换 → 系统供电(完整流程)

① 插入 PD 充电器

FUSB302 侦测 CC → 判断为 Sink。

② FUSB302 读取充电器的 Source PDO

例如:

  • 5V 3A
  • 9V 2A
  • 12V 1.5A

③ TCPM 匹配 Sink PDO

根据 DTS:

复制代码
5V / 9V / 12V

TCPM 自动选择 12V

④ FUSB302 发送 RDO(Request Data Object)

充电器切换到 12V。

⑤ SC8886 读取 PD 协商结果

通过:

复制代码
ti,usb-charger-detection = <&usbc0>;

SC8886 自动:

  • 降压到系统电压(5V/3.3V)
  • 给电池充电
  • 管理 PowerPath

⑥ 系统正常供电


# 9. OTG(反向供电)流程

当系统需要从电池升压输出 5V:

dts 复制代码
otg-mode-en-gpios = <&gpio4 RK_PC0 GPIO_ACTIVE_HIGH>;

驱动拉高 GPIO → SC8886 进入 Boost 模式 → 输出 5V 到 Type‑C。


# 10. 常见问题与调试方法

① PD 不升压

检查:

  • DTS 是否写了 9V/12V Sink PDO
  • FUSB302 是否正常工作
  • TCPM 日志是否有 RDO 发送
  • SC8886 是否收到 PD 电压变化

② 只能 5V 充电

原因:

  • Sink PDO 只有 5V
  • PD 充电器不支持高压
  • TCPM 选择失败

③ OTG 不输出 5V

检查:

  • otg-mode-en-gpios 是否拉高
  • SC8886 是否进入 Boost 模式
  • Type‑C 角色是否切换为 Source

# 11. 总结(最重要的 5 点)

关键点 说明
FUSB302 不决定电压 PD 电压由 TCPM 决定
TCPM 默认选择最高电压 除非你调整 Sink PDO 顺序
SC8886 负责电源转换 Buck / Boost / 充电 / OTG
Sink PDO 决定你能接受哪些电压 写 5V 就永远不会升压
DTS 是整个 PD 系统的核心配置 决定 PD 行为、充电行为、OTG 行为

相关推荐
feng_you_ying_li3 小时前
linux开发工具的介绍(5)
linux·运维·centos
Lugas Luo3 小时前
Kernel 5.10 SD卡专属探测、上电与注册流程分析 (Detect -> Power Up -> Add)
linux·嵌入式硬件
艾莉丝努力练剑3 小时前
【Linux信号】Linux进程信号(下):可重入函数、Volatile关键字、SIGCHLD信号
linux·运维·服务器·c++·人工智能·后端·学习
si莉亚3 小时前
2026.3.31成功安装Ubuntu22.04+ROS2记录
linux·c++·开源
RrEeSsEeTt3 小时前
【HackTheBox】- Monteverde 靶机学习
linux·网络安全·渗透测试·kali·红队·hackthebox·ad域
美式请加冰3 小时前
Linux权限的概念
linux·运维·服务器
两年半的个人练习生^_^3 小时前
List集合的使用和源码
linux·windows·list
蓝天居士4 小时前
认识libcurl(2)
linux·libcurl
Jonathan Star4 小时前
在 Claude Code 中重新加载插件,最常用的是 **`/reload-plugins` 热重载**,也
linux·运维·服务器
A.A呐4 小时前
【Linux第二十一章】http
linux·运维·http