在嵌入式Linux设备中,USB设备驱动涉及主机控制器驱动(如UHCI、EHCI、XHCI)、主机(Host)与设备(Device)模式、OTG功能及带宽限制等核心内容,以下是具体详解:
UHCI(Universal Host Controller Interface)
定位:Intel设计的USB 1.1(低速/全速,1.5Mbps/12Mbps)主机控制器驱动。特点:硬件实现简单,但软件复杂度高(需处理大量底层事务)。应用场景:早期嵌入式设备或资源受限系统。EHCI(Enhanced Host Controller Interface)
定位:USB 2.0(高速,480Mbps)主机控制器驱动。特点:硬件加速事务处理,软件复杂度降低,性能优于UHCI。兼容性:通常与UHCI/OHCI(低速/全速)共存,形成分层架构。XHCI(eXtensible Host Controller Interface)
定位:USB 3.0/3.1/3.2(超速,5Gbps/10Gbps)主机控制器驱动。特点:统一支持所有速度模式,支持多设备并行传输,功耗优化。优势:成为现代嵌入式设备的主流选择,尤其需高速传输的场景(如摄像头、存储设备)。Host模式
角色:主动发起数据传输,管理总线资源(如PC、嵌入式开发板)。驱动架构: 主机控制器驱动(如UHCI/EHCI/XHCI):处理硬件层事务。设备驱动:通过USB核心层(USB Core)与硬件交互,实现具体功能(如U盘、鼠标驱动)。 数据传输:通过URB(USB Request Block)结构体提交传输请求。Device模式
角色:被动响应主机请求,如嵌入式设备模拟U盘(Gadget驱动)。驱动架构: UDC(USB Device Controller)驱动:控制硬件寄存器。Gadget Function驱动:实现具体功能(如大容量存储、串口转换)。 应用场景:设备间直接通信(如手机连接打印机)。功能
允许设备在Host和Device模式间动态切换,无需PC介入(如手机连接U盘)。关键协议: HNP(Host Negotiation Protocol):USB 2.0中协商主机角色。SRP(Session Request Protocol):唤醒休眠主机。硬件支持
ID引脚:通过电平高低判断默认角色(ID=0为Host,ID=1为Device)。双角色控制器:如嵌入式SoC集成OTG控制器,支持软件强制切换模式(通过
/sys/bus/platform/drivers/usb20_otg/force_usb_mode)。
理论带宽
USB 2.0:480Mbps(60MB/s),但实际受协议开销、传输类型影响。 控制传输:保留10%(低速/全速)或20%(高速)带宽,用于配置设备。批量传输:无保留带宽,仅在总线空闲时使用剩余资源(如U盘)。中断/同步传输:优先分配带宽(如鼠标、摄像头)。 USB 3.0+:5Gbps(超速),但多设备共享时需动态分配。USB Hub的影响
带宽共享:所有连接设备共享上行端口带宽。 USB 2.0 Hub:下行端口全速设备共享480Mbps,低速设备(1.5Mbps)影响较小。事务转换器(TT): STT(Single TT):4个下行端口共享1个TT,带宽竞争激烈。MTT(Multi TT):每个端口独立TT,带宽分配更均衡(如FE1.1芯片)。 SuperTT技术:USB 3.0 Hub突破限制,允许USB 2.0设备共享5Gbps带宽。 实际表现: 若多个高速设备(如摄像头、硬盘)连接同一Hub,可能因带宽不足导致性能下降。低速设备(如键盘)对高速设备带宽影响可忽略。
dmesg查看设备枚举信息,确认带宽分配是否合理。使用
usbip工具限制远程设备带宽,避免占用本地资源。
硬件选型:
选择集成XHCI控制器的SoC(如i.MX8M),支持多设备并行传输。选用支持USB 3.0的嵌入式开发板(如Raspberry Pi 4),提升外设兼容性。