控制器驱动接口(Host Controller Driver Interface HCDI)。这层接口不能被客户直接访问,所以也不是由USB具体来完成的。一个典型的HCDI是由支撑各种不同主机控制器的操作系统来定义的。 USBD提供I/O请求包(I/O Request Packets)形式的数据传输,以某一特定通道来传输数据。另外,USBD为它的客户提供一个容易被支配及配置的抽象的设备。作为这种抽象的一部份,USBD拥有标准通道对设备进行一些标准的控制。这标准通道实现了USBD与抽象设备之间的逻辑通信。(见图2-5)
在有些操作系统中,提供了额外的非USB系统软件以支持设备的配置及设备驱动程序的加载。在这样的操作系统中,设备驱动程序应使用提供的主机软件接口而不是直接访问USBDI。
客户层描述的是直接与USB设备进行交互所需要的软件包。当所有的设备都已连上系统时,这些客户就可以直接通设备进行通信。一个客户不能直接访问设备的硬件。 总而言之,主机可提供如下的功能: ·检测USB设备的连接与断开。 ·管理主机与设备之间的标准控制流。 ·管理主机与设备之间的数据流。 ·收集状态及一些活动的统计数字。
·控制主机控制器与USB设备的电气接口,包括提供有限的能源。
2.2.2 USB驱动(USBD)
USBD提供了供操作系统组件特别是设备驱动程序访问设备的一组接口。这些操作系统组件只能通过USBD来访问USB。USBD的具体实现基于不同的操作系统。一个USBD可以访
问一个或多个HCD,而一个HCD可能与一个或多个主机控制器相连。某些操作系统可能允许对USBD的初始化进行一些设置。从客户的观点来看,与客户进行通信的USBD管理着所有连接着的USB设备。 1. USBD概况
USBD的客户直接命令设备或从通道直接输入和输出数据流。USBD为客户提供两组工具。命令工具和通道工具。
命令工具允许客户配置和控制USBD操作同时配置及控制USB设备。命令工具提供了对设备标准通道的所有访问。
通道工具允许USBD客户管理特定设备的数据和控制数据的传输。通道工具不允客户直接访问设备的标准通道。
图2-6给出了USBD的总体框架。
信息和流通道配置管理问设备数据访理总线设备管能量控制 通道接口 服务 (1) USBD初始化
具体的USBD初始化工作是与操作系统有关的。当USB系统初始化时,USB的管理信息被创建,其中包括缺省地址设备及它的标准通道。
当一个设备连上USB时,它响应特殊的缺省地址,直到他的唯一地址由主机给出。为了让USB系统能与新的设备进行通信,设备在刚连上总线时,设备的却省地址必须是可用的。在设备的初始化期间,设备的缺省地址被修改成一个唯一的地址。 (2) USBD通道使用
通道是设备与主机的逻辑连结。一个通道由且仅由一个客户所拥有。虽然通道的基本属性不因通道的拥有者而改变,但在两类不同客户所拥有的通道之间还存在一定的差异:
命令接口 主机控制器驱动 主机控制器 主机控制器驱动 主机控制器 图2-6 USB 驱动结构
·标准通道 他们由USBD拥有和管理。
·其他的通道 它们由USBD的客户拥有和管理。
虽然标准通道经常用于完成一些客户通过命令接口所传递的请求,但是它们不能由客户直接访问的。 (3) USBD服务功能
USBD提供如下种类的服务: ·通过命令工具配置设备
·通过命令工具及通道工具提供传输服务 ·事件通知
·状态报告及错误恢复 2. USBD命令工具功能
USBD命令工具允许客户访问设备。通常,这些命令允许客户以读写形式访问某个设备数据及控制部份。客户要做的仅是提供设备的标识码和相关数据缓冲区或空缓冲区指针。 USBD命令传输时并不需要USB设备是已被配置好。USBD提供的设备配置设施大部分使用是用命令传输。
下面的是有关命令工具提供的功能: (1)接口状态控制
USBD客户必须能够设置具体的接口。接口状态的改变使得所有与该接口相连的通道都进入新的状态。另外接口的所有通道都能够被重新设置或废弃。 (2)通道状态控制
USBD通道状态由两部份组成 ·主机状态。
·反映的端口状态。
通道状态值总是包含上述两部份。USBD的客户管理由USBD报告通道状态,且客户能够与端口交互以改变它状态。 (3)获取描述码
USBD提供取得标准设备描述符,设备配置描述符,字串描述符和设备类或者厂商定义的描述符的功能。
(4)取得当前配置参数
USBD提供取得任何设备当前配置参数的描述符的功能。如果设备没有被配置,则不返回描述符。当客户请求为设备设置特定的参数时也返回当前配置的描述符。返回的配置信息中包括如下一些内容:
·所有存放在设备上的配置描述符,包括接口的所有其他可替换配置。 ·返回接口的当前的配置的描述符。
·接口当前配置中的某一端口(一个接口可能具有多个端口)的通道句柄。
·接口当前配置中的某一端口的最大允许包长。
另外,对于任一通道,USBDI必须提供返回该通道的当前正使用的最大包长的值的机制。 (5)增加设备
USBDI必须提供某种机制以便于当增加新的设备的时候,集成器驱动器能通知USBD并能取得该新USB设备的USBD标识。USBD的任务包括分配设备地址并且为设备准备使用的标准通道。
(6)设备断开
USBDI必须提供某种机制以便于集线器控制器通知USBD特定的设备已断开。 (7)管理状态
USBDI必须提供取得和清除设备或接口或通道上与设备有关的状态的功能。 (8)向设备发送与设备类有关的命令
USBD的客户,特别是特定类的和自适应的驱动器使用USBD提供的该种机制向设备送出一个或多个设备类命令。
(9)向设备发送特殊的厂商定义的命令
客户使用USBDI提供的该种机制向设备送出一到多个厂商定义的命令。 (10)更改接口配置
USBDI必须提供更改特定接口配置的机制。修改了配置后,接口的新通道句柄替换了旧的通道句柄。在上述的请求执行的过程中,接口必须是空闲的。 (11)创建设备配置
配置软件向USBD提出进行设备配置的请求时提供一个包含配置信息的数据缓冲区。USBD根据提供的配置信息为设备端口请求资源。如果所有的资源请求都得到满足,USBD设置设备配置参数,并且返回当前设备所有活跃态接口句柄和与该接口中的某一端口相连的通道句柄。接口的设置可使用缺省参数。 (12)设置描述符
对于支持该项行为的设备,USBDI允许升级设备上的描述符或者增加新的描述符。 3. USBD通道设施
USBD的通道设施使客户与设备之间高速的低附加信息的数据传输成为可能。数据传输的高性能是通过将USBD的一部份通道管理任务转交给客户来实现的。所以通道设施比USBD命令设施所提供的数据传输服务更直接。通道设施不允许访问设备的标准通道。 只有在USB及设备的配置都顺利完成后,客户才有可能进行USBD的通道传输。当设备被配置的时候USBD根据配置参数为设备的所有通道请求资源。当特定的接口或通道空闲的时候,客户可以更改配置。
客户为输出的通道提供一个满的数据缓冲区,并且在请求完成以后取得传输状态信息。客户可以根据返回的状态信息判断传输是否顺利完成。
客户为输入通道提供空的数据缓冲区,并且在请求完成以后得到一个具有数据的缓冲区及传输的状态信息。客户可根据该状态信息判断传输数据的数量及质量。根据所支持的数据传输类型,USBD共有四种通道类型:控制传输、同步数据传输、中断传输、块传输。
2.3 USB设备
USB设备可被划分三层:
·底层是传送和接收数据包的总线接口
·中间层处理总线接口与不同端点之间的数据路由端节点是数据的终结提供处或使用处,它可被看作数据源或数据接收端(Sink)
·最上层的功能由串行总线设备提供,比如鼠标,或ISDN接口。
2.3.1 USB设备状态
USB设备有若干可能的状态,其中一些对于USB与主机(host)来说是外置的,而另外一些对USB设备来说是内置的,表2-1描述的就是这些外置状态之间的转化关系。
表2-1外呈(可见)的设备状态 连接 不 是 加电 _ 不 缺省 __ _ 编址 __ _ 配置 __ __ 挂起 __ __ 说 明 设备尚未连接至接口.其他特性无关 设备已连接至接口,但未加电. 其他特性无关. 是 是 不 __ _ __ 设备已连接至接口,并且已加电.但尚未被复位. 是 是 是 不 __ __ 设备已连接至接口,已加电. 并被复位. 但尚未分配地址.设备在缺省地址处可寻址. 是 是 是 是 不 _ 设备已连接至接口,已加电. 并被复位.且分配了唯一地址.尚未被配置. 是 是 是 是 是 不 设备已连接至接口,已加电. 并被复位.且分配了唯一地址,并被配置.设备功能可被使用. 是 是 __ __ __ 是 设备在至少3毫秒以内探测不到总线活动,自动进如挂起.设备功能不可用. 2.3.2 通用USB设备操作
所有的USB 设备支持通用的操作集,下面简要地描述这些操
1. 动态插接与拔开
USB设备必须在任意时刻允许被插接与拔开。提供连接点或端口的集线器应当负责汇报端口的状态改变情况。
当主机探测到连接操作后,会使得所连的集线器端口生效,设备也会因此而复位,一个被复位了的USB设备有如下特性: ·对缺省USB地址发生响应
·没有被配置 ·初始状态不是挂起
当设备从一个集线器端口移去时,集线器会使得原来连接的端口失效,并且通知主机设备已移去。 2. 地址分配
当USB设备连接以后,由主机负责给此设备分配一个唯一的地址,这个操作是在设备复位及端口使能操作以后。 3. 配置
USB设备在正常被使用以前,必须被配置,由主机负责配置设备。主机一般会从USB设备获取配置信息后再准定此设备有哪些功能。