浅谈USB驱动架构

去年,老师让我分析基于HD3系统芯片的WindowsCE USB驱动的可行性。USB驱动很是庞大,多个软件层次相互交错,以及各类协议,USB系统对于通常人很难理解,我对其也只是理解一个大概,下面,我对USB驱动架构的认识作一个总结。架构

USB系统能够分为两个系统:(1)主机系统HOST;(2)设备系统(Device)。ui

USB主机系统Host

USB主机系统中,USB主机控制器是一块核心的处理芯片,主机控制器经过根集线器(Root Hub)与外部USB从机设备相连。USB主机控制器包含硬件、软件、固件等部分。spa

USB设备系统Device

USB设备按功能可分为两部分:集线器Hub、功能部件。以下图所示,主机经过根集线器链接到各类外围设备(集线器、功能部件)。.net

USB驱动架构

下图所示是典型的USB驱动架构。3d


USB core

USB Core包含Host Core Driver、Hub Driver,简称USBD module,独立于硬件的协议栈,支持USB Host协议、USB Hub功能。orm

HCD(Host Controller Driver)

硬件之上运行的是HCD,USB HCD包含三种USB接口规范:blog

(1)UHCI:通用主机控制接口,USB1.0/1.1;接口

(2)OHCI:开放主机控制接口,USB1.0/1.1;ci

(3)EHCI:加强主机控制接口,USB2.0;get

HCD的内部结构以下图所示:


其中,HCD包含了Platform Device Driver、Host Controller Driver、Root Hub Driver。

USB Core和HCD构成了USB驱动的核心部分,在上层就是用各类USB设备的厂商提供相应的驱动程序。

以以下一个带OTG技术的WindowsCE USB驱动架构为例,能够将USB驱动从上到下分为3层:

(1)应用层:Client(USB Device Driver);

(2)总线层:USBD;

(3)硬件层:USB HCD;


USB Host的应用协议支持4种应用:RNDIS、Print、Mass Storage、HID;其中HID(Human Interface Device)是一种通讯协议。

USB OTG控制器的上层是USB OTG控制器的驱动,USB OTG Core Driver是协议层(总线层),若是作Host,它会使用USB Host协议栈;若是作Device,它会使用USB Device协议栈。

USB设备工做流程

当设备功能驱动但愿向某个管道发出读写请求时,首先构造请求(USB Request Block,URB)发给USB总线驱动(USBD中的Hub Driver),USB总线驱动解释该请求,并转换请求发往USB主机控制器端口驱动(usbport.sys,应该属于HCD),进而经过小端口驱动(usbohci.sys等,应该属于USB HCD)与设备进行通讯。具体以下图所示:


参考文献

http://blog.csdn.net/arnoldlu/article/details/25386603

http://blog.csdn.net/myarrow/article/details/8500155

http://blog.csdn.net/nanjianhui/article/details/4438599

http://jazka.blog.51cto.com/809003/737486

http://blog.csdn.net/henry000/article/details/7183423

http://bbs.csdn.net/topics/310195515

http://blog.csdn.net/LoongEmbedded/article/details/7519808