3. OTG硬件引脚定义:ID引脚、VBUS、D+/D-的作用与检测机制
你在调USB OTG的时候,有没有遇到过插上设备完全没反应?或者明明插对了,主机却认成从机?
我早年做一款嵌入式平板,就栽在这个坑里——硬件工程师把ID引脚悬空了,结果设备插上去永远是Device模式。查了三天,最后拿万用表一量,才明白硬件引脚才是整个角色识别的基石。
这一节,我们就从最底层的引脚定义讲起。你只有看懂了ID、VBUS和D+/D-在物理层面是怎么工作的,才能真正理解为什么有时候软件改了也没用。
3.1 ID引脚:Host/Device的“身份证”
OTG标准在传统USB的4根线上加了一根——ID引脚。说白了,这根线就是用来告诉设备:“你该当主机,还是该当外设?”
- ID接地(GND):设备把自己识别为A设备(Host)。典型场景是手机接U盘,手机内部把ID拉低,手机变成主机。
- ID悬空(浮空或高阻):设备识别为B设备(Peripheral)。比如U盘插到电脑上,U盘侧的ID悬空,它就知道自己是从机。
我个人习惯在原理图上把ID引脚标为“ID_GND”和“ID_FLOAT”。PCB Layout时,ID走线尽量不要跟D+/D-平行太长,否则串扰会让你偶尔认错角色。我吃过这个亏。
3.2 VBUS:供电与连接检测
VBUS不只是供电线,它还是硬件检测“有没有设备插进来”的关键信号。OTG规范里,VBUS有几条硬规矩:
| VBUS状态 | 电压范围(典型) | 含义 |
|---|---|---|
| 浮空 | < 0.8 V | 无连接,设备处于Idle |
| 有效 | 4.4 V ~ 5.25 V | 正常供电,连接建立 |
| 欠压 | 2.0 V ~ 4.0 V | 线缆压降过大,可能触发重枚举 |
| 过压 | > 5.5 V | 保护电路应关断,否则危险 |
你想想看,如果VBUS上电压从0跳到5V,硬件立刻触发中断——这叫“VBUS Valid”检测。我在项目中见过有人把VBUS检测漏了,只靠软件轮询,结果设备插拔总是延迟半秒才反应。嗯,千万别省这个硬件检测脚。
注意:OTG Host侧必须提供至少8mA的VBUS供电能力,而传统Host是100mA/500mA。如果你做的是便携式OTG,VBUS限流开关要选好,否则插个大功率U盘直接就把电压拉垮了。
3.3 D+/D-:数据传输与速度协商
D+/D-的功能大家都知道是传差分信号。但OTG里,它们还有一个额外任务——在连接初期做速度协商和角色确认。
USB 2.0的速度协商靠D+或D-上的上拉电阻:
- 全速(12 Mbps):D+上拉1.5kΩ到3.3V
- 低速(1.5 Mbps):D-上拉1.5kΩ到3.3V
- 高速(480 Mbps):先全速握手,再切高速,D+上拉变为电流源
但OTG加了ID引脚后,D+/D-的上拉/下拉策略变得复杂。举个例子:当ID接地(Host模式)时,D+/D-上的下拉电阻必须使能,等待外设上拉。而当ID悬空(Device模式)时,上拉电阻使能,等待Host来检测。
我曾经遇到过一个诡异问题:一块板子做Host时总认不到U盘,示波器一抓发现D+根本没上拉到3.3V。查了半天,原来是D+/D-的ESD保护管漏电,把上拉电压拉到了2.8V以下。换了个低漏电的TVS管就好了。
3.4 检测机制:从硬件电平到软件确认
整个硬件层角色识别,可以归纳为以下流程:
- VBUS检测:上升沿触发,设备唤醒
- ID检测:读取ID引脚电平,区分A设备或B设备
- D+/D-状态机:Host侧检测D+或D-上的上拉,确定连接速度和设备类型
- 软件确认:枚举前通过USB控制传输获取设备描述符,最终确认角色
注意:步骤2和3是同时进行的。硬件会在VBUS有效后100ms内完成ID采样和D+/D-线态检测。如果超时,会直接断开VBUS并报错。
避坑指南:我曾经在某国产MCU上遇到ID引脚内部无上拉,必须外接100kΩ上拉到3.3V,否则ID悬空时电平不确定。结果硬件没加,导致同一批板子有的认成Host有的认成Device。解决方案是:ID引脚必须按照芯片手册明确配置上拉或下拉,不要依赖内部浮空状态。
3.5 硬件层角色识别总结
一张表把四个引脚的角色讲清楚:
| 引脚 | Host(A设备)状态 | Device(B设备)状态 | 检测方式 |
|---|---|---|---|
| ID | 接地(GND) | 悬空(高阻) | GPIO读取电平 |
| VBUS | 输出5V | 输入5V | ADC或比较器检测阈值 |
| D+ | 下拉15kΩ | 上拉1.5kΩ(全速/高速) | 检测线态(SE0/J/K) |
| D- | 下拉15kΩ | 上拉1.5kΩ(低速) | 同上 |
做PCB布局时,我建议把ID、VBUS、D+/D-这四根线用不同的颜色标注在原理图上。调试时用示波器同时抓ID和VBUS,看它们的变化顺序是否符合预期。我曾经靠这个方法,五分钟就定位了一颗OTG芯片的ID滤波电容焊错位置的问题。
理解了硬件层,你就能明白:为什么某些组合线缆(比如带弹片的Micro-USB转接头)会莫名其妙让设备角色反转?因为弹片接触不良导致ID引脚等效于悬空,设备当然就以为自己是B设备了。下次遇到这类问题,先量一下ID引脚对地电阻——这个思路,比改一百行驱动代码都管用。