Linux内核自带USB驱动,适配I.MX6ULL-ALPHA开发板完成USB主机、外设适配,不涉及全新USB设备的底层协议开发(该内容需单独系统学习)。
30.1 USB接口核心基础
1. USB本质与版本迭代
USB全称通用串行总线,由USB-IF制定标准,解决外设接口统一问题,核心版本特性如下:
- USB1.0/1.1:速率1.5Mbps、12Mbps,已逐步淘汰;
- USB2.0:I.MX6ULL核心版本,支持全速12Mbps、高速480Mbps(半双工),向下兼容旧版本,是嵌入式设备主流配置;
- USB3.0系列:原生5Gbps,全双工收发,后续统一命名为USB3.2 Gen1/Gen2/Gen2×2,速率覆盖5Gbps到20Gbps;
- USB4.0:基于雷电协议,速率40Gbps,支持100W供电,一线通多场景,暂未大规模普及。
2. 物理接口与电气特性
- 接口类型:主机侧常用USB-A,开发板调试用Mini USB,旧手机用Micro USB,主流设备用Type-C,ALPHA开发板配备Mini USB和3个USB-A主机口;
- 电气核心:采用差分信号D+/D-传输数据,抗干扰强,支持热插拔,供电分总线供电(USB2.0最大500mA)和自供电;
- Mini USB引脚:除VCC、D+、D-、GND外,额外含ID引脚,通过ID电平切换OTG模式,高电平为从机,低电平为主机,供电引脚物理设计先上电后通数据,保障插拔安全。
3. 拓扑与OTG机制
- 拓扑规则:严格一主多从,仅主机与从机可通信,单总线最多127个设备,通过USB HUB拓展接口数量,层级最大7层,通信以管道为载体,端点0为默认控制管道,用于设备枚举;
- OTG原理:借助ID引脚电平切换主从角色,ALPHA开发板通过分压电阻自动检测ID电平,插入Mini USB线为从机,拔掉后自动切换为主机,无需额外OTG线,使用需注意两接口不可同时启用,软件需配置ID引脚为下拉默认主机模式。
4. I.MX6ULL USB控制器
I.MX6ULL内置2个独立USB2.0 OTG控制器,支持HS/FS/LS三速率,具备OTG切换、DMA传输、休眠唤醒能力,工作分正常模式和低功耗模式,适配EHCI标准,高速设备由EHCI处理,全速/低速由OHCI/UHCI兼容处理,xHCI为USB3.0标准,暂不适用本芯片。
30.2 开发板硬件原理
1. USB HUB拓展电路
开发板采用GL850G芯片,将USB_OTG2拓展为4路HOST接口,其中1路供4G模块使用,剩余3路对外提供USB-A接口,仅支持主机模式,无法切换为从机。
2. 原生OTG电路
USB_OTG1配备Mini USB从机接口和独立USB-A主机接口,通过分压电阻自动切换ID电平,插入Mini USB线为从机,拔掉后为主机,硬件简化OTG操作,规避OTG线依赖,使用时需注意两个接口不可同时启用,软件需配置ID引脚为下拉默认主机状态。
30.3 USB协议核心:描述符
USB描述符是设备向主机上报属性的标准化数据,主机通过端点0读取描述符完成设备识别与驱动匹配,核心描述符如下:
- 设备描述符:18字节,记录设备全局信息,含USB版本、厂商ID、产品ID、序列号、端点0包长等,一个设备仅1个;
- 配置描述符:9字节,定义设备工作配置,含总长度、接口数量、供电属性、最大电流等,一个设备可含多个配置;
- 接口描述符:依附配置,定义独立功能模块,一个配置可含多个接口,对应不同功能;
- 端点描述符:除端点0外,定义通信端点的传输类型、方向、包长、访问间隔,适配控制、批量、中断、同步四种传输需求;
- 字符串描述符:可选,采用Unicode编码,展示厂商名、产品名、序列号等可读信息,通过索引被其他描述符引用。