USB有助于连接企业

通用串行总线(USB)是一种开放的行业标准,提供了一种简单而廉价的方法,可以将多达127个设备连接到单个计算机端口。有了USB,许多计算机外围设备,如键盘、鼠标、数码相机、数字扫描仪、条形码阅读器、调制解调器和专用打印机都可以同时运行。

通过比尔凯尔 二一年一月一日

通用串行总线(USB)是一种开放的行业标准,提供了一种简单而廉价的方法,可以将多达127个设备连接到单个计算机端口。有了USB,许多计算机外围设备,如键盘、鼠标、数码相机、数字扫描仪、条形码阅读器、调制解调器和专用打印机都可以同时运行。

USB是一种动态可重构的串行总线,基本数据速率为12mbps,基于现成的低成本微控制器技术。其模块化、分层的软件协议支持复杂的设备驱动程序和应用程序。

Win32驱动程序模型(WDM)平台上的USB驱动程序被称为客户端驱动程序。它是一个分层的驱动程序,这意味着它是在中心驱动程序之上分层的,并且不直接访问硬件。相反,客户端驱动程序向另一个驱动程序发出请求,该驱动程序执行请求。这种分层关系被称为驱动程序堆栈,是WDM驱动程序的通用架构。

Win32驱动程序模型上的USB驱动程序称为客户端驱动程序
这意味着它是在集线器驱动程序之上,而不是
直接访问硬件。

驱动程序、标准

在驱动程序堆栈的底部是控制USB集线器的驱动程序(见图)。这些集线器控制器驱动程序有两个标准:英特尔通用主机控制器接口(UHCI)和行业标准开放主机控制器

接口(OHCI)。大多数围绕英特尔设计的主板构建的机器使用UHCI控制器,而大多数外接卡和其他主板使用OHCI控制器。尽管集线器的操作方式存在差异,但这些差异对于客户端驱动程序并不重要。

微软编写的驱动程序栈组件中最重要的元素是USB总线驱动程序,usbd.sys,客户端驱动程序通过该程序执行所有通信。Usbd.sys为客户端驱动程序提供了一个接口,允许客户端执行USB传输,而不必知道特定集线器控制器的复杂性。

USB驱动检测设备

USB客户端驱动程序执行两个主要任务:设备枚举和设备操作。在设备枚举期间,客户端驱动程序从USB设备获取它需要的所有配置信息,包括相关的描述符,并执行其他任务,例如选择配置。在设备正常运行时,处理来自用户程序的请求,并与设备进行通信。

当设备插入时,总是会执行一系列不同的操作,设备正确处理这些操作是至关重要的。

当主机检测到一个新设备时,它执行的第一个操作是为默认控制端点上的设备描述符发送GET_DESCRIPTOR命令。设备将开始在默认端点上返回描述符,但重要的是要知道操作系统只会读取描述符的一个包。在接收到一个数据包后,显然是为了确认设备正在工作,然后发送一个零长度的OUT数据包来终止传输。如果设备没有正确处理描述符传输中止的情况,则设备将不会枚举。

主机在枚举期间执行的第二步是在默认端点上发送SET_ADDRESS请求。这是由操作系统自动执行的,设备只需要接受请求。

主机执行的下一步是为设备描述符发送另一个GET_DESCRIPTOR命令。然而,对于这个请求,主机将获得设备描述符的全部18个字节。操作系统将使用描述符中的信息来确定加载什么设备驱动程序。idVendor, idProduct和bDeviceClass字段都被操作系统用来加载驱动程序。在将控制权移交给设备驱动程序之前,主机执行的最后一步是获取配置描述符。此时,操作系统将加载它选择来控制新设备的设备驱动程序。

USB是一种支持大量外设的现代总线标准;然而,驱动程序的复杂性也同样增加了。商业上可用的设备驱动程序工具包(如bSquare的WinDK和USB Extension)使得驱动程序的开发比仅使用DDK更容易。

我们很快就会看到使用USB的新外设加速了总线进入主流的接受。

作者信息
比尔·凯尔,平台技术bSquare公司(华盛顿州贝尔维尤)市场总监