13.3 USB设备信息

13.3.1 设备配置信息

  每个设备提供了不同级别的配置信息。每个设备具有一个或多个 配置,探测/连接期间从其中选定一个。配置提供功率和带宽要求。 每个配置中可以有多个接口。设备接口是端点的汇集(collection)。 例如,USB扬声器可以有一个音频接口(音频类),和对旋钮(knob)、 拨号盘(dial)和按钮的接口(HID类)。 一个配置中的所有接口可以同时有效,并可被不同的 驱动程序连接。每个接口可以有备用接口,以提供不同质量的服务参数。 例如,在照相机中,这用来提供不同的帧大小以及每秒帧数。

  每个接口中可以指定0或多个端点。端点是与设备进行通信的单向 访问点。它们提供缓冲区来临时存储从设备而来的,或外出到设备的数据。 每个端点在配置中有唯一地址,即端点号加上其方向。默认端点,即 端点0,不是任何接口的一部分,并且在所有配置中可用。它由服务层 管理,并且设备驱动程序不能直接使用。

  Level 0 Level 1 Level 2 Slot 0

  Slot 3 Slot 2 Slot 1

  (只显示了32个槽中的4个)

  这种层次化配置信息在设备中通过标准的一组描述符来描述(参看 USB规范[2]第9.6节)。它们可以通过Get Descriptor Request来请求。 服务层缓存这些描述符以避免在USB总线上进行不必要的传输。对这些 描述符的访问是通过函数调用来提供的。

  类说明(specification)可以添加它们自己的描述符类型,这些描述符 也可以通过GetDescriptor Request来获得。

  管道与设备上端点的通信,流经所谓的管道。驱动程序将到端点的 传输提交到管道,并提供传输(异步传输)失败或完成时调用的回调, 或等待完成(同步传输)。到端点的传输在管道中被串行化。传输或者完成, 或者失败,或者超时(如果设置了超时)。对于传输有两种类型的超时。 超时的发生可能由于USB总线上的超时(毫秒)。这些超时被视为失败, 可能是由于设备断开连接引起的。另一种超时在软件中实现,当传输没有 在指定的时间(秒)内完成时触发。这是由于设备对传输的包否定应答引起的。 其原因是由于设备还没有准备好接收数据,缓冲区欠载或超载,或协议错误。

  如果管道上的传输大于关联的端点描述符中指定的最大包大小,主 控器(OHCI)或HC驱动程序(UHCI)将按最大包大小分割传输,并且最后 一个包可能小于最大包的大小。

  有时候对设备来说返回少于所请求的数据并不是个问题。例如, 到调制解调器的大块in传输可能请求200字节的数据,但调制解调器 那时只有5个字节可用。驱动程序可以设置短包(SPD)标志。它允许主 控器即使在传输的数据量少于所请求的数据量的情况下也接受包。 这个标志只在in传输中有效,因为将要被发送到设备的数据量总是事先 知道的。如果传输过程中设备出现不可恢复的错误,管道会被停顿。 接受或发送更多数据以前,驱动程序需要确定停顿的原因,并通过在 默认管道上发送清除端点挂起设备请求(clear endpoint halt device request)来清除端点停顿条件。

  有四种不同类型的端点和对应的管道: -

  所需带宽的可用性在管道的创建期间被计算。传输在1毫秒的帧内 进行调度。帧中的带宽分配由USB规范的第5.6节规定。同步和中断传输被 允许消耗帧中多达90%的带宽。控制和大块传输的包在所有同步和中断包 之后进行调度,并将消耗所有剩余带宽。

  关于传输调度和带宽回收的更多信息可以在USB规范[2]的第5章, UHCI规范[3]的的第1.3节,OHCI规范[4]的3.4.2节中找到。

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.