我们知道,开发USB驱动程序有个选择是使用LibUsb,它为对不太熟悉驱动程序开发的人员提供了一个简便开发USB驱动的方法,可你知道吗,微软也提供了一个类似的工具WinUSB,这可是微软自家的东西哟,是不是很激动,下面来一窥WinUSB到底是什么! WinUSB简介 如果您正准备开发一款设备需要与PC通信,用USB接口是个不错的选择。每个USB设备在PC主机上都有对应的一个驱动程序,Windows操作系统为常用标准USB设备类型(如HID设备类、USB接口打印机、优盘等)提供了对应的驱动程序,但如果您开发的USB设备不是标准设备类,那么使用微软的WinUSB将是个不错的选择。 本文将介绍怎么使用WinUSB。注:WinUSB对环境的要求是Winxp - SP2 以上版本。 传输目的决定传输类型 每个USB传输发生在PC或其它USB主机与设备端点(endjpoint)之间,设备端点是一个收发数据的缓冲区,每个设备必须支持端点零(endpoint 0),端点零是双向的,设备还可以拥有端点1-15,它们是单向的(IN或OUT)。 即使从设备里的端点来看,USB协议还定义了端点的方向(针对PC和其它USB主机来说),输入端点(IN endpoint)是设备向PC(或主机)发数据的端点,输出端点(OUT endpoint)是PC向设备发数据的端点,在写设备端代码的时候很容易引起混淆,一定要注意。 USB是如此有用,一个理由是因为它支持四种传输模式,不同模式支持不同数据长度。WinUSB支持控制传输、批量传输和中断传输。控制传输用端点零,其它类型的传输使用1及1以上的端点。 控制传输提供了一个结构化的方法来发送请求和数据,接收应答和数据,只有控制传输是双向的。当USB设备插入主机后,主机通过控制端点来取得设备相关信息,这一过程叫做枚举。 WinUSB可以用控制传输在传输厂商定义的请求,比如你定义的收发开关状态的请求、发送设备操作指令以及读取传输器数据等。 控制传输有二到三个阶段。为了用于取得最新插入的USB设备设备,主机用控制传输请求设备标准描述符。在Setup阶段,主机发送请求,在Data阶段,设备向主机发送被请求的描述符,在Status阶段,主机分析收到的描述符。在Data阶段,主机也可以用控制传输向设备发送一些信息,接着设备在Status阶段分析这些信息。 USB主机为控制传输保留了一部分总线带宽,全速设备最低10%,高速设备最低20%。如果总线不是很忙,控制传输和以取得更多保留带宽,但是所有设备必须共享总线带宽 ,所以在一个繁忙的总线上,控制传输可能需要等待。 其它类型传输可传输任何目的的数据,传输过程也没有被划分成这么多的阶段。在一个空闲的总线上,批量传输(bulk transfers)是最快的,但批量传输不能保证固定带宽,所以如果是在一个比较忙的总线上,批量传输就会有等待。通常用使用批量传输的设备有打印机、扫描仪等,这类设备可以尽量取得最快的传输速度,但不必保证其传输速度固定。对于中断传输,主机对输入和输出端点都保证有个最大的时间间隔用来访问它们,通常使用中断端点的设备有鼠标、键盘等,它们的特点都是需要尽快地把用户的输入传入主机。 同步传输(Isochronous transfers)能保证一个固定的传输速率,但不同于其它向种传输模式,同步传输不使用确认机制,接收端收到有错误的数据后无法请求再次发送一次数据。通常使用同步传输的有声音和视频这类流媒体应用,这类应用的特点是用户不会注意或不会介意少量的数据错误或丢包。WinUSB不支持同步传输。
|