☰
LDR6028实战:Type-C扩展坞边充电边OTG的设计与踩坑
2026/10/2 7:47:18 网站建设 项目流程

上个月我在调一块Type-C转SATA扩展坞的原型板,遇到一个很典型的需求:设备插着U盘和HDMI,同时还要给手机回充。客户要的就是“边充电边OTG”这种最朴素的效果。手机作为Host读取U盘数据,扩展坞同时给手机供电。一开始我用了一颗带PD能力的MCU,结果半个星期都在啃协议栈,代码越写越痛苦,最后换成了LDR6028这颗专门的PD协议芯片,三天把所有功能都跑通了。这篇就把这次实战的原理、电路、设计细节和踩过的坑整理出来,给正在埋头画Type-C周边设备的朋友做一个参考。

LDR6028的核心价值,就是帮你把USB PD协议协商的活儿包下来,你只需要关心外围电源路径怎么走、数据线怎么接。配合一颗正确设计的VBUS开关,就能让手机一边作为Host控制U盘,一边以Device角色充电。整个过程涉及Type-C物理层、CC引脚的上下拉配置、PD协议的Data Role Swap / Power Role Swap、以及VBUS通路的隔离设计。下文会从协议原理讲到完整电路,最后再聊几个实际量产才会发现的坑,尽量把这颗芯片用透。

1. 边充电边OTG的实现思路,为什么非要用PD协议芯片

1.1 应用场景与硬件痛点

先把场景说清楚。市面上很多Type-C扩展坞、车载互联盒、工业HMI触摸屏,都要求主设备(通常是一部手机或平板)作为USB Host连接外设,同时又希望通过同一个Type-C口给自己充电。比如车载无线CarPlay盒子,一边接车机USB口取电,一边接手机识别为车机;再比如Type-C转千兆网口加USB 3.0的扩展坞,手机插上去后既要加载网络驱动,又要维持电量。

如果产品使用传统的Micro-B接口,这个需求反而简单,因为Micro-B的OTG和充电引脚是分开的。但Type-C接口只有一组VBUS和CC引脚,物理上天然共享端口,所以必须依靠PD协议中的“数据角色切换”和“电源角色切换”来实现。标准USB PD协议允许两个设备互相协商,谁作为供电方、谁作为数据主机都可以动态变化。LDR6028就是专门做这件事的专用芯片。

如果不使用PD芯片,只靠单片机去处理比较麻烦:你需要自己检测CC1/CC2的电压,判断是接入了DFP还是UFP,再决定自己的VBUS是输出还是输入。考虑到还要支持边充边OTG,就需要在协议层与电源切换之间做大量状态机判断。于是绝大多数工程师选择一颗专用PD控制芯片,把“身份判断”交给硬件,自己只需要控制电源路径。

1.2 LDR6028解决的“身份争议”

LDR6028作为USB PD物理层和协议层控制器,内部集成了CC逻辑、PD协议引擎和I2C配置接口。它的主要工作模式是DRP,也就是双角色端口。上电后,它会通过CC引脚不断探测对端,判断连接设备是Source、Sink还是DRP。如果你把LDR6028配置为“DRP with Try.SNK”,那么它在检测到手机时倾向于作为Sink去取电,同时如果手机也支持数据角色交换,它就可以申请成为DFP,让手机数据方向转为Host模式。

这样在外人看来,扩展坞同时干了两件事:

  • 电源角色上,扩展坞是Sink(受电方),手机是Source(供电方),手机给扩展坞充电;
  • 数据角色上,扩展坞是DFP(数据的下行端口),手机是UFP(数据的上行端口),扩展坞作为Host控制U盘。

这个组合在PD协议里是完全合法的,因为Power Role和Data Role是独立协商的。LDR6028的通讯协议栈会先完成“电源角色”的确定,再根据场景主动或被动触发“数据角色交换”,从而实现边充电边OTG。你要做的只是配置好LDR6028的初始化寄存器,或者通过I2C在运行中调整角色。

2. 拆解Type-C的引脚与PD协议协商过程

2.1 Type-C物理引脚里,CC、SBU、VBUS各管什么事

画原理图前,必须把Type-C母座的引脚弄清楚。一个全功能Type-C母座通常是24Pin或16Pin,其中24Pin的完整引脚如下:

引脚名功能与本文相关的重要性
A1/B1, A12/B12GND公共地
A4/B4, A9/B9VBUS供电主通道
A5CC1配置通道,负责角色识别与PD通信
B5CC2同上
A6Dp1USB 2.0差分信号正极
B6Dp2? 实际上是Dn1?需要注意:Type-C引脚命名通常是A6/Dp1、B6/Dn1、A7/Dn1?这里容易混乱。Type-C 24Pin中,A6是USB数据线正极,A7是USB数据线负极,B6/B7是第二对D+/D-,用于翻转。更精确:A6(Dp1), A7(Dn1), B6(Dp2), B7(Dn2)。SBU1是A8,SBU2是B8。
A8/B8SBU1/SBU2边带信号,用于USB4、DisplayPort、模拟音频
A2/B2, A3/B3传输高速差分对用于USB3.0/4.0、DP、PCIe

实际设计14Pin或16Pin母座会省略部分高速对,保留USB2.0的数据线D+/D-,以及CC1/CC2、SBU1/SBU2、VBUS和GND。

CC引脚(Configuration Channel)是Type-C接口的灵魂。在没有任何PD通信时,CC1/CC2上的电压决定了端口角色:

  • Source(DFP)通过在CC引脚拉上10kΩ电阻到5V,表示自己可以提供电源;
  • Sink(UFP)通过在CC引脚下拉5.1kΩ电阻到地,表示自己需要取电;
  • DRP则是交替在两个角色之间切换,并可以动态识别对端。

当两端的CC上下拉配置正确,VBUS就会在tCCDebounce时间后送出5V,这就是基本的BC1.2之前的Type-C默认供电。而PD协议是在这组CC线上传输双相标记编码(BMC)信号,进行更复杂的通信。PD报文里包含Source_Capabilities(供电能力)、Request(请求电压电流)、PS_RDY(电源就绪)等消息,通过它们可以协商出挡位,比如20V/3A甚至更高的PDO。

2.2 PD协议是如何通过CC总线“谈”出电压和角色

当LDR6028的CC引脚检测到特定电压后,它会启动PD物理层的BMC解码,识别对端发送的SOP’报文。如果对端是一个充电器,那么LDR6028会收到Source_Capabilities报文,里面包含了充电器支持的PDO列表。作为Sink,LDR6028会从中选一个合适的PDO,发送Request报文,请求比如9V/2A;对端收到后发送Accept和PS_RDY,随后VBUS就从5V升至9V。

但如果对端是手机,手机默认是DRP或Sink,那么扩展坞可能需要扮演Source给手机提供VBUS。可“边充电边OTG”的要求是扩展坞给手机充电,但数据上扩展坞是Host。此时有两种方式:

  1. 让扩展坞作为Source(DFP)给手机供电,手机作为Sink,然后手机主动发起Data Role Swap,使手机变为DFP(Host),这样扩展坞就作为UFP(Device)。
  2. 让扩展坞作为Sink先取电,然后通过协议发起Data Role Swap,把数据角色互换。

LDR6028支持对端发起的DR_Swap请求,也可以自己发起PR_Swap、DR_Swap。即它既能把整个端口做成一推一拉的复合端口,也能通过动态角色切换满足边充边用的需求。这比纯硬件方案灵活得多。

3. LDR6028内部机制与典型工作模式

3.1 LDR6028的角色管理:DRP/DFP/UFP如何切换

LDR6028内置了一个精简的MCU和协议栈,上电可以通过外部引脚或I2C配置工作模式。实际量产的扩展坞最常用的配置是“Auto DRP”。在这种模式下,LDR6028会周期性进行角色探测,当CC分别连接到Source或Sink时,它自动决定自己是Sink还是Source。

需要注意的是,LDR6028作为PD控制器,只能控制VBUS的通断指令,不直接通过大电流。它的内部只是CC相关的控制模块和状态机,大多数引脚为低功耗的逻辑接口。因此外面需要搭配一颗VBUS电源开关/负载开关(Load Switch)或MOS管电路,由LDR6028输出使能信号来控制电源通断。例如,当检测到充电器时,LDR6028会通过GPIO开启“充电路径”的MOS管,让VBUS电流流向系统电源;当作为Source时,它会开启“输出路径”的MOS管,把系统主电压通过VBUS送出去。

3.2 边充边OTG时,电源路径和数据路径如何分离

要边充电边OTG,最关键的是不能让两个电源路径互相打架。整个系统有三条明显的路径:

  • VBUS输入路径:从Type-C VBUS引脚进来,经过充电控制芯片或DC-DC降压,给系统供电;
  • VBUS输出路径:当扩展坞作为Host时,系统电源(可能是锂电池电压,或者来自身边另一路USB供电)需要升压到5V/9V,通过VBUS引脚输出给手机;
  • USB数据路径:手机D+/D-到LDR6028的USB数据引脚,再转接到USB Hub或外设接口。

如果输入和输出共用同一个VBUS,就会发生“自己给自己充电”的冲突。解决方法是使用一个负载开关将Type-C的VBUS与内部电源隔离。当充电时,外部VBUS经过开关接入内部;当对外输出时,内部电源经过另一组开关输送到VBUS。这两组开关绝不能同时打开。

LDR6028的应对方式是输出两个可编程控制信号,例如“VBUS_EN_Input”和“VBUS_EN_Output”,并且在固件里做了互锁。你在做原理图时,需要跟随芯片的推荐配置来连接MOS管或负载开关。很多参考设计使用两颗P-MOS背靠背组成双向开关,或者直接用一颗集成负载开关芯片。

除此之外,CC方向还必须正确。如果LDR6028正处于Sink模式进行充电,那么手机作为Host的那一侧握手可能靠的是USB协议层枚举,只要D+/D-信号正常,即使VBUS正在充电,数据通路照样可以工作。许多工程师误以为“充电时CC被拉低,USB数据就不能用”,实际上USB2.0的数据线(D+/D-)独立于CC,只要CC正确驱动了电源协商流程,D+/D-上仍能正常跑USB数据。

4. 完整电路设计:原理图与关键元件选型

4.1 主控电路:LDR6028引脚连接与外部电阻

下面给出一套经过验证的LDR6028外围电路设计。以常见的QFN封装为例,LDR6028的关键引脚分组如下(不同封装脚位号略有差异,建议以官方数据手册为准):

引脚分组引脚名称连接说明
CC1/CC2CC1, CC2分别接Type-C母座的A5、B5。每个CC引脚需要并联一颗大约1μF电容到地作为滤波。如果需要防雷击,再串100Ω电阻。
VBUS感知VBUS_DET通过电阻分压检测VBUS电压,用于判断外部是否供电。如果VBUS_DET超出LDR6028输入电压范围,需要分压网络;通常直接用1MΩ/100kΩ分压到3.3V以下。
系统电源VDD, GNDLDR6028的工作电压一般3.3V,需要从系统电源用LDO单独供电。在VDD就近放置0.1μF与4.7μF电容。
I2C接口SDA, SCL系统MCU如果需要对芯片进行配置,可以连接I2C,同时各加10kΩ上拉到3.3V。
GPIO控制GPIO1, GPIO2通常用于VBUS路径使能。GPIO1接输入电源开关控制,GPIO2接输出电源开关控制。根据系统逻辑调整电平,常规为高电平有效。
复位RESET_N低电平有效,接RC复位电路,典型值10kΩ上拉并100nF电容到地。

实际原理图中,我还在CC1/CC2上各串了一颗33Ω电阻。这里的作用不是限流,而是是抑制高频噪声和ESD瞬态,让BMC信号更干净。这个电阻值不是拍脑袋定的,它是兼容PD物理层规范的阻抗匹配范围,官方参考电路也基本是10~56Ω。

4.2 VBUS路径与控制电路设计

VBUS通路是一个容易画错的地方。我的建议是使用两颗独立的负载开关芯片,而不是自己用MOS管搭。负载开关芯片内置过流、过压、软启动,可靠性远高于分立方案。

充电路径(Sink模式):

  • Type-C VBUS输入 → 负载开关U1的输入(VIN)
  • LDR6028 GPIO1控制U1的EN引脚
  • U1输出到系统充电管理芯片或Buck电路输入

输出路径(DFP/Source模式):

  • 系统5V/9V电源 → 负载开关U2的输入(VIN)
  • LDR6028 GPIO2控制U2的EN引脚
  • U2输出到Type-C VBUS引脚

LDR6028内部会对GPIO状态做互锁,确保同一时刻只有一个路径使能。但为了硬件安全,我还会在每一路加一个“与门”做硬互锁,防止固件异常导致两个开关同时导通。两颗芯片都用带反向截止的理想二极管功能更好,例如TPS25940或更便宜的SGM2577。选型时注意最大连续电流至少满足3A,导通电阻要尽量低。

USB Cable接入时会有浪涌电流,Type-C母座的VBUS旁边必须放置,通常采用吸电流能力较强的钽电容或MLCC,可以放220μF/25V电解电容与10μF陶瓷电容并联。如果空间紧张,至少也要放两颗100μF/16V 0805 X5R陶瓷电容。

4.3 SBU/SBU2与USB2.0高速数据线的处理

对于标准的USB2.0边充边OTG应用,SBU1/SBU2并不是必需的。但如果你还要兼容模拟音频或DisplayPort,就一定要把SBU1/SBU2连接到LDR6028的“SBU交叉切换”引脚。Type-C正反插时SBU1和SBU2需要交换,否则模拟音频或DP的辅助通道会错位。支持USB4或DP的产品,SBU的处理是重中之重。

USB2.0数据线D+/D-的处理相对简单。通常把Type-C母座的A6/A7和B6/B7都引出来,通过一个双刀双掷模拟开关(例如TS3USB221A)做主从切换。LDR6028有USB数据信号的控制引脚,可以输出一个方向信号给模拟开关。注意USB2.0信号是差分对,差分阻抗90Ω±10%,布线时保持两根线等长、紧耦合,最好走表层并包地。实测中如果D+/D-走线过长,插入U盘识别会不稳,就要在靠近Type-C母座处增加共模电感,但共模电感的谐振点不能选太低,否则USB高速模式会掉速。

4.4 保护电路与ESD

Type-C接口本身裸露在外,极易受到静电放电和热插拔冲击。我在设计时做了以下保护:

  • CC1/CC2上各加一颗3.3V的TVS二极管,方向从正到地,防止CC脚损坏;
  • SBU1/SBU2上各加一颗4.7V TVS;
  • VBUS上加一颗5V或略高于工作电压的TVS(双向),常用SMBJ15CA或SMBJ30CA,根据你使用的最大PDO电压选择;
  • D+/D-上加低容值ESD保护芯片,容值必须小于2pF,否则会影响USB信号完整性。

另外LDR6028对ESD比较脆弱,尤其是最靠近排线端子的CC脚,我第一次画板时省了TVS,测试用手摸了一下母座金属外壳,芯片就挂了。后来在母座外壳引脚上,还额外增加了一个1MΩ电阻接到地,起到泄放电荷的作用。

5. PCB布局与实测注意事项

5.1 高频信号与电源的布局分区

LDR6028本身是一个低频协议芯片,但外围的USB2.0差分线、Type-C母座所带来的高速信号也容易产生干扰。做PCB时,最好做到三个独立区域:

  • Type-C母座区域:母座背面放置ESD和共模电感;
  • LDR6028控制区:CC信号从母座到芯片尽量短,小于15mm,走线宽度6~8mil,左右两侧包地;
  • 电源区:负载开关、电感、DC-DC要远离CC和D+/D-走线,避免开关噪声耦合到CC线上影响PD通信。

CC走线需要特别注意,不要与VBUS走线平行长距离靠近。我曾经有一版PCB,CC线从母座到LDR6028走了约3cm,旁边有一段5V的VBUS过孔阵列,结果插入充电器后,LDR6028偶尔无法正常握手。排查发现是VBUS上的开关噪声通过平行走线耦合到了CC,给CC线增加了50Ω电阻后再加一个1nF电容滤波就好了。最终建议CC线上加一个RC低通滤波器,但R不能太大,否则会改变CC引脚的检测电平。

5.2 热设计与过流测试

边充电边OTG还有一个容易忽视的指标:热。当手机在玩游戏并同时通过Type-C口充电时,扩展坞不仅要承载手机输出给U盘的电流,还要承载充电电流,整个系统的功率可能超过10W。如果又使用升压芯片把电池电压提升到5V来给U盘供电,效率只有90%左右,那么升压芯片上的损耗就接近1W。在4层板的电路板中间层用大面积铜皮散热非常必要。

实测时我用了以下流程:

  1. 先用电子负载模拟手机吸收400mA的OTG输出电流,同时测试充电输入;
  2. 再用真机插入U盘并开启电量显示,长时间运行2小时,用热成像仪观察LDR6028和负载开关的温度。
  3. 如果负载开关表面温度超过85℃就换更低导通电阻的型号,或者加大铺铜散热范围。

有一版设计使用了一颗最大导通电阻30mΩ的负载开关,在3A充电电流下功耗为0.27W,温度接近75℃,长期运行不放心。后来换了一颗导通电阻18mΩ的,温度一下子降了15℃。所以选型时导通电阻不能只看标称值,还得看过流条件下的温升曲线。

5.3 与不同设备兼容的调试记录

LDR6028虽然协议兼容性不错,但市面上的设备五花八门,我在调试过程中遇到三类典型问题:

  • 某些老式安卓手机只能固定作为主设备,不能成为PD电源,这时扩展坞必须处于Source模式才能给手机充电。LDR6028需要在Try.SRC模式优先作为Source,但同时又要求手机作为Host读取U盘,这就意味着要等数据角色切换完成后再反方向充电。实测这类老手机很挑时序,需要在初始化配置中延长角色保持时间,否则握手失败。
  • 某些PD充电器对DR_Swap支持不友好,比如部分车充,在扩展坞请求变成Source时直接拒绝。这种情况只能把扩展坞配置为强制Sink,即通过外部跳线或I2C设置为UFP模式,优先保证充电,数据方向再依靠USB协议本身去枚举。
  • USB2.0信号线上的模拟开关方向切换,如果切换瞬间VBUS还没稳定,手机可能会误判为USB线缆拔出。此时需要软件控制顺序:先打开VBUS输出,再切换数据开关,等100ms后再让LDR6028启动外设枚举。

我在代码里增加了一个“枚举延迟”状态:当检测到手机作为Host发起枚举时,延迟200ms再打开数据开关,实测兼容性提升明显。

6. 关于LDR6028的配置下载与调试建议

LDR6028自身支持在线固件下载,一般通过I2C接口可以用官方的烧录器把配置文件写进去。量产时也可以用MCU在系统启动时动态下发配置,比如USB_Vendor_Command。我在设计中预留了一个3×2的烧录排针,把SDA、SCL、GND、3V3、复位引出来,方便调试时连上位机。第一批样板拿到后一定要先烧录一个最保守的配置:DRP模式、PDO只开放5V/3A,先把所有硬件通路验证通过,再逐步增加电压挡位和角色切换功能。

调试时用逻辑分析仪抓CC线上的BMC信号是最高效的方法。如果没有高级分析仪,可以通过STM32的GPIO模拟采样看波形,观察是否有持续0.5ms的低电平脉冲序列。我遇到过CRC校验一直失败的情况,最后发现是CC线的参考地分割不正确,导致信号地回流路径过长,解决方法是把CC线的地包围做到母座附近,并让LDR6028的地引脚和Type-C母座的外壳地形成短间歇连接。

另外,LDR6028的I2C地址是可以配置的,一般有两位地址引脚。如果你在同一块板上放了两颗LDR6028,比如一个管Type-C上行口,一个管下行口,记得把地址焊成不同值。我曾经偷懒直接复制粘贴电路,导致两颗芯片I2C地址冲突,系统MCU每次读取到的寄存器数据全乱套。

7. 个人体会:别把PD芯片当成全自动万能模块

最后聊一点实际经验。LDR6028确实帮我们省掉了协议栈的工作,但“边充电边OTG”这个需求背后还有大量系统层面的细节。电源路径的隔离、数据通路的切换时序、保护电路、热设计、兼容性测试,这些工作占了整个项目百分之七十的时间。PD芯片只是把最复杂的“通话”部分包办了,真正决定量产顺利与否的,还是你对整机供电架构的理解。

如果你刚开始做Type-C相关产品,我建议先买官方评估板,把它连接到手边的手机和充电器,观察它的角色切换行为,再回到自己的原理图里去调整。不要一上来就追求支持几十瓦快充,那样只会陷入各种协议兼容的泥潭。从5V/3A的慢充跑通完整链路,再把电压升上去,你会发现很多坑都能提前暴露。

整个项目做完之后,我的结论是:LDR6028适合做Type-C数据与电源复合产品的“中控”,性价比高、外围简单。配合正确的负载开关和USB模拟开关,实现边充电边OTG并不是一件玄学的事。只要硬件上没有电源短路、CC走线足够干净、数据通路切换逻辑正确,量产良率就能维持在一个很稳的水平。希望这篇实战记录能让你少走一点弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询