ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TUSB320系列CC逻辑与端口控制器:原理、选型与调试全指南

TUSB320系列CC逻辑与端口控制器:原理、选型与调试全指南 做硬件的朋友应该都有这个体会USB Type-C接口彻底普及之后板子上留一个Type-C座子越来越常见但真正让这个接口“干活”的部分从来不是那24个引脚本身而是藏在CC引脚后面的那一整套检测逻辑。正反插方向怎么识别对端是主机还是设备线缆有没有连接要不要提供5V这些问题如果全部用分立器件自己搭不仅调试周期长还容易在量产时出各种玄学问题。这篇博文要聊的就是德州仪器TUSB320系列CC逻辑和端口控制器我会从CC引脚到底在做什么讲起拆清楚TUSB320内部怎么工作、三种型号怎么选然后直接给出一份能落地的原理图设计方法和寄存器配置流程最后把我实际调试中踩过的坑和排查思路全部列出来。无论你是正在做Type-C接口的嵌入式工程师还是想在自己DIY项目里加一个Type-C电源口的爱好者这篇内容都能让你少走不少弯路。1. 项目整体思路为什么USB Type-C需要专用CC逻辑芯片1.1 USB Type-C的“聪明”全在CC引脚很多人第一次拿到USB Type-C的原理图符号时会愣住CC1和CC2这两个引脚到底是干什么的Type-C区别于老式USB-B和Micro-USB的核心就在于它不再依赖机械结构来决定插头方向而是把“正反插识别”这件物理上已经解决的事变成了一种电气上的握手过程。USB Type-C连接器一共有两组完全对称的引脚正插和反插时主控看到的信号其实是“翻转”的。为了让设备知道自己到底插的是哪一面协议规定了几件事主机侧DFP下行端口需要给CC引脚提供上拉电流源设备侧UFP上行端口需要给CC引脚接下拉电阻Rd。当二者对接时哪一路CC引脚上的电压被拉低就说明这一路是对端设备所在的方向也就自然完成了正反插识别。同时CC引脚还承担了供电能力协商的任务。Type-C规范里定义了默认的USB电流、1.5A和3A三个档位这些电流能力也是通过CC引脚上的电气特征来传递的。所以在硬件层面CC引脚既要有模拟检测能力又要有状态切换能力还要能控制外部VBUS开关。1.2 方案对比自己搭模拟电路还是直接用CC逻辑控制器我见过不少工程师第一次接手Type-C项目时的第一反应是不就是两个引脚上各接一个5.1k下拉电阻吗自己搭不就行了。对于纯Sink只接收供电、不负责检测方向的简单场景这种方案确实勉强能跑。比如一个只吃5V供电的开发板直接把两个CC引脚对上拉或者下拉设备就能工作。但一旦涉及DFP、DRP、正反插状态上报、VBUS控制联动、电流能力切换这些需求分立方案就会迅速失控。自己搭CC逻辑通常需要以下电路两个方向的上拉电流源、两个下拉电阻、比较器用于检测电压阈值、逻辑门或者MCU去解析状态、GPIO去控制VBUS开关。这套东西做完PCB面积和工作量都上去了而且Type-C规范里对电流源的精度、压摆率、检测阈值都有要求用分立器件很难保证全温度范围内稳定。TUSB320这类专用CC逻辑芯片的价值就在于它把CC引脚上的模拟前端、检测比较器、状态机和I2C/GPIO控制接口全部集成在一起。你只需要把CC引脚连到连接器把I2C接上主控状态和方向就通过寄存器读出来了VBUS开关控制信号也是现成的。1.3 TUSB320系列定位CC逻辑加端口控制器TUSB320系列在TI的Type-C产品线里属于“纯CC逻辑控制器”它负责的是Type-C连接检测、方向检测、以及DFP/UFP/DRP三种角色切换。注意它不做USB PD协议解析不发送PD消息也不处理大功率供电协商。如果需要完整的PD协议栈通常要在外部MCU上跑PD协议或者选用TUSB422、TPS65987D这类更高阶的芯片。在明确了这一层边界之后TUSB320的定位就非常清晰了它解决的是“USB Type-C连接本身”的问题是Type-C端口最底层最基础的那一部分。项目里只要涉及Type-C连接器并希望系统能正确识别插拔、方向和角色TUSB320基本就是最省事的选择。2. TUSB320核心原理与系列差异2.1 内部是怎么工作的电流源、电阻和比较器TUSB320内部集成了CC检测所需的基本模拟模块。在不同工作模式下它会自动在内部把上拉电流源或下拉电阻切换到CC1/CC2上。举一个最典型的场景TUSB320工作为DFP相当于主机时芯片内部会用一个电流源去驱动CC引脚。这个电流源的标准值在180μA左右如果是3A供电能力模式电流源会切换为330μA。当对端设备通过线缆接上之后设备侧5.1kΩ的Rd电阻会把CC引脚电压拉到大约0.9V180μA乘5.1kΩ。TUSB320内部的比较器检测到这个电压落在有效区间内就会判定为“有设备连接”同时根据是哪一路CC引脚出现这个电平判断出线缆方向。反过来当TUSB320工作为UFP相当于设备时芯片内部会切换为5.1kΩ下拉电阻。对端主机的电流源流过这个电阻同样会在CC引脚上产生一个可检测的电压。两边一握手连接就建立了。这里有个容易忽略的点Type-C标准里还定义了一种叫Ra的电阻用来表示线缆带有eMarker芯片。TUSB320内部同样能识别Ra状态这就是它作为CC逻辑控制器的“专业”之处。如果是自己搭电路要同时兼容Rd、Ra、电流源三套检测复杂度会高很多。2.2 三种工作模式DFP、UFP、DRPTUSB320支持三种工作模式分别对应Type-C端口的三种角色DFP模式也就是Host/Source模式芯片主动提供上拉电流源用来探测是否有设备插入同时通过一些控制信号去控制VBUS输出开关。这个模式适合做主机板、HUB下行口、电源适配器这一类产品。UFP模式也就是Device/Sink模式芯片内部只提供Rd下拉等待主机拉高CC电压来“发现自己”。这个模式适合做各类终端设备、嵌入式开发板、移动电源的输入口。DRP模式最复杂也最实用。在这种模式下芯片会周期性地在上拉和下拉之间切换一会儿尝试扮演DFP一会儿尝试扮演UFP。谁先检测到对端谁就固定成对应的角色。这种模式适合做双角色端口的产品比如手机、笔记本电脑、开发板上的全功能Type-C口。在实际使用中角色并不是一成不变的。TUSB320可以配置成自动切换也可以由主控通过I2C主动改变模式。这给产品设计带来了很大灵活性比如同一个硬件既能当主机连U盘也能当设备连电脑下载固件。2.3 TUSB320 / TUSB320L / TUSB320HA怎么选TUSB320系列下有三个具体的型号封装都是8引脚的WSON优点是引脚完全兼容但内部和功能上略有差异选型时容易混淆。TUSB320和TUSB320L是基础款差异主要在于TUSB320有INT中断输出引脚TUSB320L没有其他寄存器配置基本一致。TUSB320HA则是最容易踩坑的版本它的I2C地址和前面两个不同TUSB320/TUSB320L默认从机地址是0x47TUSB320HA默认地址是0x67。很多工程师画板子时没注意型号差异结果代码里初始化的是0x47板子上贴的却是TUSB320HAI2C一扫描全是NACK这种问题排查起来特别容易让人怀疑人生。所以选型时我通常会建议如果系统里GPIO资源紧张、需要靠中断来降低轮询开销就选TUSB320如果I2C总线已经挂了多个设备想要减少I2C地址冲突可以考虑TUSB320HATUSB320L则适合那些GPIO够用、也不想动寄存器的极简场景。3. 实操把TUSB320接入你的系统3.1 最小系统原理图设计要点TUSB320虽然集成了大部分CC逻辑但外围电路依然有几个关键点需要注意。下面是我在实际项目中常用的最小系统设计思路。首先TUSB320的CC1、CC2引脚需要直接连接到Type-C连接器的CC1、CC2引脚上。这里不要串电阻不要加滤波电容至少不要加过大的电容因为CC引脚上有模拟检测容性负载会影响电压建立时间导致状态切换变慢。理想情况下这两条线直接走短线连接。其次VBUS_DET引脚需要经过分压网络接到VBUS上。因为TUSB320是低压芯片工作电压最高才5.5V而VBUS最高可能到20V所以必须分压。分压比例要根据系统最大VBUS电压来计算确保VBUS_DET引脚上的电压始终不超过芯片的额定范围。再次I2C总线的SCL和SDA需要加上拉电阻。上拉阻值取决于总线速度和线缆长度常见做法是4.7kΩ或者2.2kΩ。注意I2C地址线不需要额外处理TUSB320的地址是硬件固定的这点比很多带地址引脚的芯片省事。最后VBUS和VCONN的输出控制。TUSB320内部并不是一个大电流开关它的控制输出通常是逻辑信号用来驱动外部的负载开关芯片或者MOSFET。VBUS路径上的开关必须选能承受系统最大电流的比如PD 3A取电就要选5V/3A以上规格的负载开关。3.2 I2C寄存器配置实战在I2C模式下TUSB320的配置主要集中在几个关键寄存器上。数据手册里最重要的三个寄存器是DEVICE_STATUS、CONFIG和DEVICE_CTRL。DEVICE_STATUS是只读状态寄存器主控通过读取它来获取当前连接状态、方向以及电流能力信息。每次中断到来或者定时轮询时主控第一步就是读这个寄存器解析出到底是“无连接”“DFP连接”还是“UFP连接”以及正插还是反插。CONFIG寄存器用于设置端口的工作模式可以选择DFP、UFP或DRP。在DRP模式下还可以选择是否启用自动切换。DEVICE_CTRL寄存器则提供了软件控制能力。主控可以通过它强制芯片进入连接或断开状态也可以用来改变当前的角色。这在一些需要软件动态切换方向的场景里非常有用。下面是一段典型的初始化流程用的I2C地址是0x47#define TUSB320_I2C_ADDR 0x47 #define TUSB320_REG_STATUS 0x08 #define TUSB320_REG_CONFIG 0x09 #define TUSB320_REG_CTRL 0x0A // 1. 初始化I2C控制器 i2c_init(400000); // 400kHz // 2. 将芯片配置为DRP模式 i2c_write_byte(TUSB320_I2C_ADDR, TUSB320_REG_CONFIG, 0x10); // 3. 读取状态 uint8_t status i2c_read_byte(TUSB320_I2C_ADDR, TUSB320_REG_STATUS); uint8_t conn (status 5) 0x07; // 连接状态位 uint8_t dir (status 3) 0x03; // 方向位这里要注意不同型号和版本的手册里寄存器位的具体定义可能会有细节差异建议以最新版本数据手册为准。我在做产品时习惯把寄存器操作封装成read_status、get_connection_state这类函数方便后续在不同芯片型号之间移植。3.3 连接状态机与主控事件处理有了寄存器操作能力之后主控代码里真正重要的是一套处理插拔事件的软件状态机。典型流程是这样的主控初始化时设置DRP模式然后进入事件循环。每当INT引脚触发下降沿中断如果用了TUSB320/TUSB320HA主控就去读取DEVICE_STATUS寄存器。如果状态显示为DFP已连接说明有UFP设备插入此时主控应该打开VBUS开关并开始按Type-C协议供电如果状态显示为UFP连接说明对端是主机主控则切换到Sink模式等待主机供电。在没有INT引脚的场景下主控需要定期轮询状态寄存器。轮询间隔不建议太短一般10ms到20ms足够太频繁会增加I2C总线负载也会增加主控功耗。调试阶段我强烈建议把状态变化通过日志打出来。比如插入一瞬间状态寄存器的值从0x00变成0x30方向位从0变成1这些信息能帮助你确认硬件连接和寄存器配置是否匹配。3.4 从Mouser采购的落地建议在Mouser上搜TUSB320结果页面会同时列出TUSB320、TUSB320L、TUSB320HA以及不同包装规格。这里有几个采购层面的细节值得注意。封装上三个型号都是WSON-8底部有散热焊盘焊接时要注意焊盘开孔尺寸和钢网厚度避免虚焊。这颗芯片引脚间距不算大手工焊接有一定难度建议用热风枪或者回流焊。下单时确认型号丝印和包装数量。卷带包装和管装价格可能不同如果是小批量打样一卷可能太多可以考虑选择剪切带Cut Tape或者散装Mouser一般都有这种选项。货期方面TI的通用料库存相对稳定但最好在打样前确认库存避免临时缺料卡住整个项目。4. 常见问题与调试实录4.1 I2C地址对不上根本读不到设备这是我见过最多的一个问题。用I2C扫描脚本扫不到任何设备第一反应往往是芯片坏了或者焊接有问题。但很多时候问题出在型号本身。TUSB320和TUSB320L的地址是0x47TUSB320HA的地址是0x67。如果代码里默认写了0x47而板上贴的是TUSB320HA那就是典型的“芯片活着但你找不到它”。遇到读取不到设备的情况我建议按这个顺序排查先用万用表确认芯片供电正常VDD在3.3V左右再确认I2C上拉电阻已装好然后扫描地址列表把0x47到0x6F都扫一遍最后再用示波器看SCL和SDA上有没有正常的start和ack信号。4.2 状态寄存器不更新拔插都是0如果芯片读得到DEVICE_STATUS却一直是0x00插拔Type-C线毫无反应连状态都不变那就是CC链路本身的问题。先检查CC1/CC2到连接器之间是不是断线了或者中间加了莫名其妙的阻容元件。有些工程师为了“滤波”或者“ESD保护”在CC线路上加了ESD管这个没问题但要小心ESD管的结电容不能太大否则会影响电压建立。还有一种情况是连接器本身是纯线缆座不带任何电路而你对端设备是纯Sink比如一个只接了Rd的开发板。如果两边都只做Sink没有任何一个角色愿意当成Source去拉高CC电平那自然永远检测不到连接。Type-C连接的前提是至少有一侧承担DFP角色。4.3 正反插方向检测异常方向检测是TUSB320的强项但也可能出错。最常见的原因是PCB布局时CC1和CC2被画反了这时候TUSB320报告的方向和实际插头方向始终相反。这种问题排查起来非常直接插上标准Type-C线缆读寄存器里的方向位然后拔出翻转重插。如果两次读到的方向位恰好相反说明方向检测本身没问题如果两次都报同一个方向说明CC1和CC2在硬件上交换了。另一个容易被忽视的点是部分Type-C连接器本身内部就做好了翻转市面上也存在“跨接”类型的连接器。选型时如果不确认引脚定义就会出现实际方向翻转的问题。我习惯在原理图评审阶段就确认连接器的CC引脚排列并和TUSB320的CC1/CC2一一对应。4.4 布局布线和焊接那些坑TUSB320虽然是低速I2C芯片但CC引脚上的模拟信号对噪声有一定的敏感度。布局时CC线应该尽量短不要绕远路不要贴着开关电源的电感或者MOS管走。如果线上要走ESD防护尽量靠近连接器放置。WSON-8的散热焊盘设计也要注意。底部焊盘通常需要接地并且作为散热通道。手工焊接时如果底部焊盘没有完全接触芯片可能工作不稳定表现为时好时坏的I2C通信。用热风枪焊接时记得先把焊盘涂上适量锡膏放上芯片后加热看到底部焊盘有锡溢出即可。最后还有一点小经验TUSB320的INT引脚在状态变化时会产生脉冲但这个脉冲很短如果主控的GPIO不支持边沿中断可能漏掉事件。稳妥的做法是把INT接到支持唤醒功能的中断引脚上同时在软件里保留定期轮询作为兜底。5. 后续扩展从TUSB320到完整的Type-C方案TUSB320解决了Type-C连接检测这层问题但它不是万能的。它不处理PD协议不负责动态电压协商也不提供大功率开关。如果你的产品需要支持USB PD的快充协议比如5V/9V/12V/20V多档输出那还需要在TUSB320之上增加PD协议控制器或者干脆选择更高集成度的方案。在笔者做过的项目里TUSB320最适合的场景是“只需要Type-C接口但不需要复杂PD协商”的设备。比如带Type-C输入口的嵌入式控制板、只做角色切换的转接器、需要检测插拔和方向的测试治具。在这些场景下TUSB320用最少的代码量把Type-C最麻烦的物理层问题解决掉了非常划算。如果你想继续深入下一步可以研究USB PD协议栈用MCU实现PD消息的发送与接收让TUSB320负责底层检测MCU负责协议层这就是一套完整的全功能Type-C端口方案。再进一步可以关注TI的TPS65987D这类集成PD协议的芯片它们把Type-C检测和PD协商全都塞进一颗芯片里逻辑上更省事但成本和设计复杂度的平衡就需要你自己权衡了。
返回列表