一、USB基础概念:从入门到实战
大家好,我是老张。做Android系统开发这些年,USB这块坑没少踩,经验也没少攒。今天咱们聊聊USB的基础概念。别小看这些基础,我见过太多工程师在USB问题上翻车,说白了就是基础没打牢。
1.1 USB协议发展史:从USB 1.0到USB4
USB协议从1996年诞生到现在,经历了将近30年的演进。我刚开始做嵌入式时,用的还是USB 1.1,那时候传个几百KB的文件都要等半天。
| 版本 | 发布时间 | 理论速率 | 个人评价 |
|---|---|---|---|
| USB 1.0 | 1996年 | 1.5 Mbps | 慢得让人抓狂 |
| USB 1.1 | 1998年 | 12 Mbps | 勉强能用 |
| USB 2.0 | 2000年 | 480 Mbps | 经典之作,至今仍在用 |
| USB 3.0 | 2008年 | 5 Gbps | 速度飞跃 |
| USB 3.1 | 2013年 | 10 Gbps | Gen2开始实用 |
| USB 3.2 | 2017年 | 20 Gbps | 双通道技术 |
| USB4 | 2019年 | 40 Gbps | 整合Thunderbolt |
核心要点:USB 2.0是分水岭。之前的速度基本只能应付键盘鼠标,之后才开始真正承载数据传输。我在项目中遇到最多的问题,就是USB 2.0设备插到3.0接口上,兼容性处理不当导致识别失败。
为什么会这样?因为USB 3.0在物理层上增加了额外的差分信号对,但协议层仍然兼容2.0。嗯,这里要注意:USB 3.0的插头内部有额外的引脚,但外观和2.0一样。很多新手以为插进去就行,结果发现只能跑2.0的速度。
1.2 USB物理接口类型:你见过几种?
接口类型这块,我建议你记住一句话:Type-C是未来,但老接口你躲不开。
Type-A
最常见的矩形接口。我记得第一次做Android平板项目时,客户非要保留Type-A口,说用户习惯。结果因为厚度问题,结构工程师跟我吵了三天。
Type-B
方方正正的,打印机上最常见。现在基本被Micro-USB取代了,但在一些工业设备上还能见到。
Micro-USB
Android手机的老朋友。说实话,这接口设计有缺陷——插拔寿命短,容易松动。我曾经统计过,某款手机返修中,30%是Micro-USB接口损坏。
Type-C
这才是正道。24个引脚,正反可插,支持快充、视频输出、高速数据传输。我个人习惯,新项目一律用Type-C,省心。
避坑指南:我曾经在选型时没注意Type-C的CC引脚配置,结果设备插上后无法触发PD协商,充电功率只有5W。后来查了三天规格书才发现是CC引脚上拉电阻值不对。
1.3 USB主机与设备角色
USB系统里,角色划分很清晰:主机(Host)和设备(Device)。主机负责管理总线、分配地址、发起传输。设备只能被动响应。
你想想看,手机连接电脑时,手机是设备,电脑是主机。但手机连接U盘时,手机就变成了主机。这就是OTG的由来。
关键点:Android设备默认是Device角色。要让它变成Host,需要硬件上把ID引脚拉低,软件上启用OTG功能。我见过不少方案,硬件上ID引脚没处理好,导致OTG死活不生效。
1.4 USB OTG概念:手机也能当主机
OTG全称是On-The-Go,说白了就是让设备能在Host和Device之间切换。Android从3.1开始原生支持OTG,但真正好用是从5.0以后。
OTG的核心机制:
- ID引脚检测:Micro-USB的ID引脚接地,设备进入Host模式;ID引脚悬空,设备进入Device模式
- VBUS供电:Host模式下,设备需要向外设提供5V电源
- 协议协商:通过SRP(会话请求协议)和HNP(主机协商协议)完成角色切换
注意:OTG模式下,手机作为Host供电,电流有限。我遇到过有人用OTG接移动硬盘,结果供电不足导致硬盘咔咔响。建议接U盘或键鼠,别接大功率设备。
知识体系总览
下面这张图,是我梳理的USB基础概念框架。你看一遍,心里就有谱了。
个人经验:做Android USB开发,最核心的就是搞清楚设备当前是什么角色。我习惯在代码里加个日志,每次角色切换都打印出来。调试时能省一半时间。
好了,USB基础概念就聊到这儿。这些内容看着简单,但真到项目里,每一个细节都可能让你加班到深夜。记住一句话:基础不牢,地动山摇。