1. 项目概述与选型思路
前阵子有个朋友拿了一堆样品来找我,想给一台只留Type-C口的轻薄本做OTG扩展,方便外接U盘和键鼠。我翻了一圈市面上的OTG协议芯片方案,发现这里面的坑比想象中多:有人直接把CC脚拉两个电阻到地,有人非要上完整的PD协议栈,还有人把CH340这类USB转串口芯片接到Type-C口上,结果设备死活识别不了。这篇就把我做Type-C接口OTG协议芯片方案选型时积累的思路、电路要点和踩坑记录整理出来,给准备做Type-C外设、嵌入式扩展坞,或者只是想把OTG线原理搞明白的朋友,提供一个可以直接“抄作业”的参考清单。
1.1 一根OTG线为什么比数据线复杂
先说一个最容易被忽视的问题:普通USB数据线(Type-C转USB-A)和OTG线(Type-C转USB母口),外形上就差一个A口公母,但内部逻辑完全相反。
普通数据线的场景是电脑当主机,手机或U盘当从设备。线缆一端是Type-C公头,另一端是USB-A公头,插电脑A口的这一侧本身就是DFP主机口,所以线缆在Type-C端模拟出一个DFP的上拉网络,让手机或外设以为对面是主机。OTG线则反过来,Type-C公头要插到手机里,让手机临时变成主机去给U盘供电和通信。这时候如果还用普通数据线的上拉逻辑,手机就会以为对面是主机,自己老老实实待在从机模式,根本不会输出VBUS供电,U盘自然没反应。
所以OTG线必须在Type-C端的CC1/CC2上做角色反转,让手机检测到一个UFP从设备接入,从而主动切换到Host模式并输出5V。这就是为什么低价OTG线和普通数据线不能混用,也解释了为什么Type-C口上的设备识别如此依赖CC引脚的上拉下拉状态。
1.2 选方案前先把DRP/DFP/UFP和CC逻辑搞清楚
Type-C协议里,设备角色分为三类:DFP(Downstream Facing Port)是主机/供电方,负责输出VBUS;UFP(Upstream Facing Port)是从设备/受电方,通过Rd下拉告诉对面“我是设备”;DRP(Dual Role Port)则是动态角色,一会发DFP的上拉Rp,一会发UFP的下拉Rd,通过CC引脚的阻抗变化来协商。
CC1和CC2是Type-C口上最关键的引脚,没有之一。DFP端的Rp上拉电阻有三种常用值:56kΩ表示默认USB供电能力,22kΩ表示可提供1.5A,10kΩ表示可提供3A。UFP端则是5.1kΩ下拉电阻Rd。当两端CC网络接通,主机侧通过读到的电阻值判断设备接入以及供电能力。
很多硬件工程师习惯了老USB-A时代的ID引脚,误以为Type-C也有类似机制。实际上Type-C没有ID脚,角色判断完全靠CC逻辑。如果方案里没有协议芯片做动态切换,仅靠固定电阻实现OTG,就只能固定在某一种角色,无法真正实现DRP。用户在手机上插OTG线的时候,手机本身就是DRP,它需要不断尝试上拉和下拉来“试探”对端角色,这个过程必须由协议芯片参与才能稳定可靠。
1.3 按场景把方案分级:电阻模拟、GPIO、专用芯片、PD控制器
我一般把OTG方案分成四个层级,选型之前先对号入座:
| 场景 | 实现方式 | 典型器件 | 优点 | 缺点 |
|---|---|---|---|---|
| 低成本OTG线 | CC1/CC2直接各接5.1k下拉 | 两个电阻 | 便宜,几毛钱 | 无保护、无电流能力协商、兼容性差 |
| 简单角色切换 | GPIO控制上拉下拉 | TUSB320/TUSB321 | 逻辑简单,免写复杂协议 | 不支持USB PD,无法做快充反向供电 |
| 支持PD+角色切换 | 专用Type-C控制器+PD PHY | FUSB302 + MCU | 可做DFP/UFP/DRP,支持PD/PPS | 需要写协议代码,软件工作量较大 |
| 纯受电/诱骗取电 | Sink专用PD协议芯片 | STUSB4500、CH224K | 适合充电器诱骗固定电压 | 不能主动当主机,不是严格意义的OTG |
这个表基本就是我给朋友选方案的判断框架。先问清楚产品到底需要手机当主机去驱动U盘,还是笔记本的Type-C口要兼容各种外设,再决定是用纯电阻方案还是上协议芯片。千万别一开始就抄PD协议栈,很多项目根本用不到那么重的东西。
2. 主流OTG协议芯片方案对比与推荐
2.1 我一直用的几款协议芯片
做Type-C OTG这几年,我实际用过并愿意继续推荐的主要有四类芯片,各有侧重。
第一类:TUSB320/TUSB321系列。这是TI的Type-C CC逻辑芯片,本身不含USB PD协议栈,只负责识别CC引脚上的Rp/Rd并切换角色。它可以直接通过GPIO或者I2C告诉MCU当前是DFP还是UFP,内部集成了上拉下拉开关,外部不需要再挂电阻。如果你只是做一个USB2.0 OTG小设备,不要求PD快充,这颗芯片最省事,放心用。TUSB321相比TUSB320主要多了I2C中断通知能力,适合MCU低功耗场景。
第二类:FUSB302。这是onsemi的USB Type-C控制器,支持PD3.0/PPS,接口是I2C,能作为DFP、UFP、DRP工作。它本质上是CC逻辑+PD物理层,但协议栈需要自己写在MCU里。这颗芯片我有深切体会,灵活度极高,但同时意味着软件工作量明显增加。项目里如果既要手机当主机,又希望支持PD反向快充,FUSB302是绕不开的经典选择。
第三类:STUSB4500和CH224K这类Sink专用芯片。它们专门用来“取电”,比如从PD充电器那里诱骗出5V/9V/12V/20V固定电压,适合做充电产品或电池供电设备。但要注意,这类芯片只能当UFP从设备,不能让手机识别成“设备接入”从而切到Host模式,所以别拿它们当OTG主控用。我见过不少新手看到CH224K便宜,想直接做OTG线,最后发现插上手机根本没反应,就是这个原因。
第四类:国产方案。近几年南芯、天钰、英集芯等都有Type-C CC/PD相关芯片,性价比和供货都比进口芯片有优势。如果你量很大、成本敏感,可以评估国产型号。但我建议先手里留一款进口大厂芯片的样片做基准,方便对比调试,避免因为手册写得含糊而耽误进度。
下面是我常用的几款芯片横向对比表:
| 芯片 | 厂商 | PD支持 | 角色支持 | 控制接口 | 主要用途 |
|---|---|---|---|---|---|
| TUSB320/TUSB321 | TI | 不支持 | DFP/UFP/DRP | GPIO/I2C | USB2.0 OTG,简单扩展坞 |
| FUSB302 | onsemi | PD3.0/PPS | DFP/UFP/DRP | I2C | 全功能OTG、PD双向充放电 |
| STUSB4500 | ST | PD3.0 | 仅UFP/Sink | I2C | PD适配器诱骗取电 |
| CH224K | 南京沁恒 | PD3.0 | 仅UFP/Sink | I2C/GPIO | 低成本PD电压诱骗 |
| 国产CC逻辑芯片 | 各家 | 看型号 | 看型号 | 看型号 | 视具体功能选型 |
2.2 怎么读参数才能不踩坑
很多朋友选芯片只看“支持Type-C”和“支持PD”两个词,结果板子画完才发现功能对不上。我建议重点看五个参数。
第一,是否支持DRP。这是OTG方案的核心。如果芯片只能固定UFP或DFP,那就不叫OTG,只能叫“单方向连接”。DRP支持意味着它能在设备接入时自动切换成Host,在设备拔出时又回到从机/待机状态。
第二,CC逻辑是否内置了Rp/Rd。有些芯片只提供CC检测,但上拉下拉电阻需要外部自建。比如某些MCU集成的USB控制器,CC引脚还需要自己挂56kΩ或5.1kΩ。如果用了TUSB320、FUSB302这类专用芯片,外部通常不需要再挂了。这点一定要看手册里的推荐电路,别看着抄。
第三,VCONN驱动能力。Type-C线缆如果需要eMarker芯片识别,主机侧要给VCONN引脚供电。一般芯片内置VCONN开关,但电流能力可能只有几十毫安。如果你的产品要支持C to C线缆(尤其是雷电或USB4线),VCONN这路必须考虑清楚。
第四,I2C地址和中断输出。做嵌入式系统时,I2C地址可配置会让总线规划方便很多。中断输出能让MCU在低功耗睡眠时由芯片唤醒,不必轮询。FUSB302的I2C地址是0x54,可配其他地址;TUSB321也有不同地址版本,采购时要注意后缀。
第五,VBUS耐压和ESD能力。Type-C口很容易被热插拔浪涌和静电打坏。芯片的VBUS引脚耐压至少要有20V,CC/D+/D-引脚要外接保护器件。如果芯片本身集成度很低,就别指望省掉TVS。
2.3 低成本的“假OTG”和真方案差在哪
我拆过一根“9.9元包邮”的手机OTG线,打开一看确实就是一个Type-C公头转USB-A母口的壳子,里面CC1和CC2直接各接了一个5.1kΩ电阻到地,连过流保护都没有。这种“假OTG”能用吗?U盘插上去,手机大概率能识别,但性能和保护都堪忧。
问题出在三个方面。其一,手机侧输出电流能力没有正确协商,很多手机默认以标准USB供电能力输出,移动硬盘或大功率外设带不动。其二,线缆没有VBUS和过流保护,一旦后级短路,可能把手机的电源管理芯片烧掉。其三,没有角色切换握手,部分手机系统会误判,出现“间歇性识别”“插拔后死机”等兼容性问题。
而采用协议芯片的真OTG方案,角色切换由芯片完成,MCU可以读取当前状态,还能在接入异常时关闭VBUS输出。虽然成本多出几块钱,但产品可靠性完全是两个层次。如果你只是做一根转接线给自己用,电阻方案无所谓;如果做成产品出货,我强烈不建议省这一块钱。
3. 实操:Type-C OTG电路搭建与关键连接
3.1 最小系统接线示例
以TUSB320系列为例,一个最小OTG系统只需要把Type-C母座的CC1/CC2接到芯片对应引脚,芯片输出状态到MCU,同时控制一个VBUS负载开关即可。D+/D-则直接用USB2.0差分对连接MCU或SoC的USB PHY。
下面是参考接线方式,适用于USB2.0 OTG:
Type-C母口 TUSB320/TUSB321 MCU/SoC A4/A9 VBUS ---- VBUS_DET(监测) ---- ADC/ GPIO VBUS_EN ---- VBUS负载开关输出5V到设备 A5 CC1 ---- CC1 B5 CC2 ---- CC2 A6 D+ ---- (芯片不参与D+/D-) ---- USB_DP A7 D- ---- (芯片不参与D+/D-) ---- USB_DM GND 全部共地实际项目里,D+/D-建议各串联一个22Ω电阻再进MCU,这既是抑制信号过冲的常规做法,也是给ESD保护器件留出布局位置。VBUS负载开关建议用带软启动的MOS管或集成负载开关,比如SY6280、RT9742这类,避免热插拔瞬间拉低手机输出的VBUS电压。
调试时优先确认三个点:CC1/CC2到芯片是否短路,D+/D-对地阻值是否正常,VBUS_EN控制到的负载开关输出是否跟随角色切换。如果芯片检测到UFP设备接入,应该立刻输出高电平打开VBUS,这个时序不正常,后面一切免谈。
3.2 CH340接Type-C要不要串电阻
这个问题被问过很多次,尤其是做USB转串口工具的人。CH340这类USB转串口芯片本质上是USB从设备,它的D+/D-直接接Type-C母座,想让笔记本识别出设备,关键不是串电阻,而是CC引脚的5.1kΩ下拉电阻。
一个典型的Type-C转串口小板,Type-C母座CC1和CC2必须各接一个5.1kΩ电阻到地。否则笔记本的CC逻辑检测不到UFP设备接入,自然不枚举USB,CH340就算供电正常也没用。
至于“需要串电阻吗”,我的回答是:D+/D-上串电阻不是必须,但建议预留。常见取值是22Ω,位置放在CH340引脚和Type-C母座D+/D-之间。它解决的不是电平转换,而是抑制高速信号边沿过冲,同时降低USB线缆拔出瞬间的静电冲击影响。如果PCB走线很短,不串也能稳定工作;如果走线较长或者有插座,建议串上,成本不到两分钱。
千万别做的是在D+/D-上串100Ω以上电阻,那样会直接把USB信号幅度压掉,设备会反复枚举。CH340本身的I/O电平如果工作在3.3V,和USB2.0规定的3.6V上限完全兼容,不需要额外电平转换。
3.3 全Type-C接口笔记本失效排查实录
有朋友遇到过华为MateBook 13这类全Type-C接口的笔记本,Type-C口突然不识别U盘和移动硬盘,但充电功能正常。这种“接口失效”的问题,很多时候不是笔记本主板坏了,而是Type-C协议通道出了小问题。
我总结的排查顺序是:第一步,换一根标准Type-C转USB-A数据线,排除线材类型错误。全Type-C笔记本本身是DFP主机端,应该用普通数据线而不是OTG线。第二步,在不插任何设备时用万用表测Type-C母座CC引脚到地的电阻。正常主机端应该量到56kΩ、22kΩ或10kΩ的上拉电阻值,如果量到几十欧姆或者开路,说明CC通路已经坏了。第三步,插入一个自带供电的USB Hub,看是否能枚举设备。如果带电Hub能识别,说明接口的数据通道不一定有问题,而是笔记本侧USB供电输出被限制或保护了。第四步,检查是否静电打坏了CC保护器件,很多笔记本Type-C座旁边会有一颗TVS或放电管,被打短路后会表现为充电正常但数据不识别。
我自己修过几个案例,最后基本都归结为CC引脚保护器件失效和劣质OTG线浪涌损坏。这点也从侧面说明,做任何Type-C方案,CC保护比D+/D-保护更优先。
4. 常见问题与排查技巧实录
4.1 OTG线插上设备没反应
这个现象在自制OTG线或早期样板阶段非常常见,我遇到过不止一次。排查之前先做一个最基本的判断:插上手机后,U盘指示灯有没有亮?不亮说明VBUS根本没出来,问题在CC检测和角色切换;指示灯亮了但手机不识别,问题在D+/D-数据通路。
用万用表测自制OTG线时,把Type-C公头的CC1和CC2分别对地量。如果是让手机当主机的OTG线,C公头CC对地应该接近5.1kΩ,因为线缆要让手机识别成UFP。如果量出来是无穷大或者接近0,说明下拉电阻没接对。插上手机后,再量A母口的VBUS和GND之间是否有5V输出,有5V说明手机已经切换成Host模式。最后测D+/D-通断,两端对应关系要一致,OTG线里D+连D+、D-连D-,不能交叉。
整个过程我一般用一张表做快速判断:
| 症状 | 可能原因 | 检查方法 |
|---|---|---|
| U盘灯不亮 | CC下拉缺失 | 量CC对地阻值,应为5.1kΩ |
| U盘灯亮但不识别 | D+/D-不通或线序错 | 万用表蜂鸣档测D+/D-通断 |
| 偶尔能识别,一动就断 | 接触不良 | 重新焊接,检查Type-C母座引脚 |
| 大容量U盘/移动硬盘带不动 | 输出电流能力不足 | 换带供电Hub或改方案协商电流 |
4.2 USB识别不稳定、反复枚举
如果设备插入后能在系统里看到反复“叮咚”插拔声,大概率是供电不稳或信号质量差。USB设备枚举过程对电压波动很敏感,尤其移动硬盘启动瞬间电流可能到1A以上,手机OTG输出能力有限,会导致VBUS跌落。
解决方案分三层:硬件上给OTG板加一个较大容量的储能电容,比如VBUS对地并220μF钽电容或低ESR瓷片电容,吸收启动瞬间电流尖峰;信号上检查D+/D-串联电阻是否太大,我一般控制在22Ω以内,并且两条线尽量等长;系统上,如果笔记本或手机对外设供电能力确实不足,只能改用带外部供电的Hub中转。
还有一个容易被忽视的问题:芯片的I2C配置。FUSB302如果检测到VBUS电压低于某个阈值,会自动切断VBUS输出或报告错误状态。用示波器抓VBUS波形时,如果看到阶梯状反复爬升又跌落,多半是过流保护触发,不是信号线问题。
4.3 想同时快充和OTG,怎么办
很多人希望手机边OTG插U盘边快充,这个需求比想象中复杂。手机OTG模式下,Type-C口通常只有一个VBUS源,手机对外设供电的同时还想从充电器取电,两路电源要同时工作,涉及VBUS的角色切换和路径管理。
便宜方案做不到这一点,需要在Type-C控制器上支持DRP和PD,比如FUSB302配合MCU,既要通过CC逻辑检测UFP设备,又要在PD协议层协商作为Sink从充电器取电。硬件上要设计双向电源通路,由两个背靠背MOS管控制VBUS方向,MCU根据当前状态决定是让手机对外供电,还是让充电器给手机充电。
我在实际项目里实现过这种方案,软件复杂度提升很多,因为需要处理PD协商、角色切换和电源切换三者的时序配合。如果不是产品硬性要求,别轻易上双角色电源方案,成本和时间都会超预期。
4.4 Type-C保护电路不能省
Type-C接口的引脚间距小,非常靠近外壳边缘,静电放电比传统USB-A频繁得多。做OTG小板时如果省掉CC引脚的TVS,大概率在实验室里测不出来,但送到客户手上用几个月就会出现“接口失效”问题。
推荐在CC1、CC2、D+、D-四根线上都加低电容TVS或二极管阵列,比如TPD2E001这类器件。电容要低于5pF,最好1pF左右,否则高速信号受影响。TVS的摆放位置要尽可能靠近Type-C母座引脚,泄放路径越短越好。VBUS线上则加过压保护和过流保护,防止外部短路烧毁主机侧电源。
有一次我调试一个OTG小板,反复插拔几十次后设备彻底没反应,检查后发现是CC引脚的TVS被静电打成短路,把下拉电阻的电压拉没了。从那以后,所有样板只要涉及Type-C,保护电路一定加全,不加就是给自己挖坑。
5. 样板调试经验:CC测点、芯片丝印和第一块FUSB302
最后分享一个我自己的调试习惯。做OTG方案样板时,我会特意把CC1和CC2的测点引出来,用两排插针做成独立调试点,方便示波器探头直接夹。Type-C的角色切换过程只有几百毫秒,没有测点的话,只能焊一根飞线过去,既麻烦又容易接触不良。
另一个经验针芯片丝印:有次采购回来的TUSB320,外观一模一样,但丝印后缀比之前多了个字母。我没在意直接焊上去,结果设备死活枚举不了。后来一查才确认是不同版本,寄存器配置和中断行为有差异。从那以后,凡是Type-C控制器这类芯片,到货第一件事就是对丝印、查勘误表,或者内部写测试代码去读ID寄存器。
如果你打算用FUSB302做全功能OTG,初期别急着自己写PD协议栈,可以先买一块官方开发板,把芯片的CC、VBUS、VCONN时序抓下来,再对照手册把协议状态机移植到自己的MCU里。这块芯片的寄存器映射有点多,但社区资料丰富,照着跑通一遍之后,Type-C OTG的大多数困惑都会解开。PCBA阶段留好测试点、加全保护器件,这块的坑就踩不到你头上。