10.5 USBD
10.5 USBD
USBD提供了供操作系统组件特别是设备驱动程序访问设备的一组接口。这些操作系统组件只能通过USBD来访问USB。USBD的具体实现基于不同的操作系统。下面的讨论将以USBD的实现系统所必须提供的基本功能为中心展开。对于在具体某一特定的操作系统环境下的USBD细节请参考相关的操作系统手册。一个USBD可以访问一个或多个HCD,而一个HCD可能与一个或多个主机控制器相连。某些操作系统可能允许对USBD的初始化进行一些设置。从客户的观点来看,与客户进行通信的USBD管理着所有连接着的USB设备。
10.5.1 USB概况
USBD的客户直接命令设备或从通道直接输入和输出数据流。USBD为客户提供两组工具。命令工具和通道工具。
命令工具允许客户配置和控制USBD操作同时配置及控制USB设备。命令工具提供了对设备标准通道的所有访问。
通道工具允许USBD客户管理特定设备的数据和控制数据的传输。通道工具不允客户直接访问设备的标准通道。
图10-5给出了USBD的总体框架。
10.5.1.1 USBD初始化
具体的USBD初始化工作是与操作系统有关的。当USB系统初始化时,USB的管理信息被创建,其中包括缺省地址(default address device)设备及它的标准通道。
当一个设备连上USB时,它响应特殊的缺省地址(参见第9章)直到他的唯一地址由主机给出。为了让USB系统能与新的设备进行通信,设备在刚连上总线时,设备的却省地址必须是可用的。在设备的初始化期间,设备的缺省地址被修改成一个唯一的地址。
10.5.1.2 USBD通道使用
通道是设备与主机的逻辑连结。一个通道由且仅由一个客户所拥有。虽然通道的基本属性不因通道的拥有者而改变,但在两类不同客户所拥有的通道之间还存在一定的差异:
虽然标准通道经常用于完成一些客户通过命令接口所传递的请求,但是它们不能由客户直接访问的。
10.5.1.2.1 标准通道
USBD有义务分配及管理恰当的缓冲区以支持对客户不可见的标准通道上的数据传输。比如设置设备的地址等。对于一些客户可见的传输,比如像传送厂商定义或有关设备类的命令,或者读取设备的描述符,客户提供必须的数据缓冲区。
10.5.1.2.2 客户通道
所有不是被USBD拥有及管理的通道都可由客户拥有及管理。从USBD的观点看,一个单独的客户拥有该通道。实际上可以是一组用户管理通道,只要该组用户在使用通道时表现出单个客户的行为。
客户有义务根据它所能取得的服务间隙内的数据提供一个足够大小的数据缓冲区。额外的工作缓冲区由USB系统给出。
10.5.1.3 USBD服务功能(Service Capabilities)
BD提供如下种类的服务:
10.5.2 USBD命令工具功能
USBD命令工具允许客户访问设备。通常,这些命令允许客户以读写形式访问某个设备数据及控制部份。客户要做的仅是提供设备的标识码和相关数据缓冲区或空缓冲区指针。
USBD命令传输时并不需要USB设备是已被配置好。USBD提供的设备配置设施大部分使用是用命令传输。
下面的是有关命令工具提供的功能。
10.5.2.1 接口状态控制
USBD客户必须能够设置具体的接口。接口状态的改变使得所有与该接口相连的通道都进入新的状态。另外接口的所有通道都能够被重新设置或废弃。
10.5.2.2 通道状态控制
USBD通道状态由两部份组成
通道状态值总是包含上述两部份。USBD的客户管理由USBD报告通道状态,且客户能够与端口交互以改变它状态。
一个USBD可以处于如下的状态之一
只要设备已被配置且通道及设备相关端口没有被挂起,相应通道及端口就可被认为是处于活跃态。客户可以通过如下的几种方式来操纵通道状态。
10.5.2.3 获取描述码
USBD提供取得标准设备描述符,设备配置描述符,字串描述符和设备类或者厂商定义的描述符的功能。
10.5.2.4 取得当前配置参数
USBD提供取得任何设备当前配置参数的描述符的功能。如果设备没有被配置,则不返回描述符。当客户请求为设备设置特定的参数时也返回当前配置的描述符。返回的配置信息中包括如下一些内容:
另外,对于任一通道,USBDI必须提供返回该通道的当前正使用的最大包长的值的机制。
10.2.5.5 增加设备
USBDI必须提供某种机制以便于当增加新的设备的时候,集成器驱动器能通知USBD并能取得该新USB设备的USBD标识。USBD的任务包括分配设备地址并且为设备准备使用的标准通道。
10.5.2.6 设备断开
USBDI必须提供某种机制以便于集线器控制器通知USBD特定的设备已断开。
10.5.2.7 管理状态
USBDI必须提供取得和清除设备或接口或通道上与设备有关的状态的功能。
10.5.2.8 向设备发送与设备类有关的命令
USBD的客户,特别是特定类的和自适应的驱动器使用USBD提供的该种机制向设备送出一个或多个设备类命令。
10.5.2.9 向设备发送特殊的厂商定义的命令
客户使用USBDI提供的该种机制向设备送出一到多个厂商定义的命令。
10.5.2.10 更改接口配置
USBDI必须提供更改特定接口配置的机制。修改了配置后,接口的新通道句柄替换了旧的通道句柄。在上述的请求执行的过程中,接口必须是空闲的。
10.5.2.11 创建设备配置
配置软件向USBD提出进行设备配置的请求时提供一个包含配置信息的数据缓冲区。USBD根据提供的配置信息为设备端口请求资源。如果所有的资源请求都得到满足,USBD设置设备配置参数,并且返回当前设备所有活跃态接口句柄和与该接口中的某一端口相连的通道句柄。接口的设置可使用缺省参数。
注:进行配置的接口可能要求明确指明其配置参数。
10.5.2.12 设置描述符
对于支持该项行为的设备,USBDI允许升级设备上的描述符或者增加新的描述符。
10.5.3 USBD通道设施
USBD的通道设施使客户与设备之间高速的低附加信息的数据传输成为可能。数据传输的高性能是通过将USBD的一部份通道管理任务转交给客户来实现的。所以通道设施比USBD命令设施所提供的数据传输服务更直接。通道设施不允许访问设备的标准通道。
只有在USB及设备的配置都顺利完成后,客户才有可能进行USBD的通道传输。当设备被配置的时候USBD根据配置参数为设备的所有通道请求资源。当特定的接口或通道空闲的时候,客户可以更改配置。
客户为输出的通道提供一个满的数据缓冲区,并且在请求完成以后取得传输状态信息。客户可以根据返回的状态信息判断传输是否顺利完成。
客户为输入通道提供空的数据缓冲区,并且在请求完成以后得到一个具有数据的缓冲区及传输的状态信息。客户可根据该状态信息判断传输数据的数量及质量。
10.5.3.1 支持的通道类型
根据所支持的数据传输类型,共有四种通道类型。
10.5.3.1.1 同步数据传送
所有排队等待某同步传输通道进行传输的数据缓冲区都被被看作是一个样本流。像所有其它的通道一样,客户为同步通道提供一个通道使用策略,包括客户的服务间隙。当在输入过程中丢失字节或在输出过程中发现有传输问题时,客户都将被告知。
开始数据流的传输前,客户先提供第一个数据缓冲区,,为了维持同步传输的连续性,客户在当前的缓冲区还没有被允满或取空时就提供第二个数据缓冲区。
USBD应能够将客户的数据流看作是一个样本流,也就是说,在数据传输过程中实际的打包解包过程对客户隐敝了。另外,一次传输事务经常局限于客户的某数据缓冲区。
对于一个输出通道,客户提供一个满的数据缓冲区。USBD使用客户提供的同步方法,将在服务间隙中要传输的数据分配到在各帧中。
对于一个输入通道,客户必须提供一个足够大的空的缓冲区,以容纳下在服务间隙时间中所传输的最大数据量。当丢失数据或得到无效字节的时候,USBD必须在该字节应该放置的缓冲区位置上留下一个空缺,并且将错误消息发给客户。不使用同步方法的一个后果就是保留的空间被认为就是最大的包长。缓冲区结束的通知信息在IRP结束的时候产生、注意,当输入缓冲区返回给客户的时候,它不一定是满的。
USBD可能提供看待同步数据流的其它方法(除了以样本流的方式看待同步数据流),USBD同时也必须能将用户的数据流看作是包的流(Packet Stream)。
10.5.1.2 中断传送
中断数据输出是从USBD的客户输出到USB的设备。中断数据输入是由USB的设备输入到USBD的客户。USB系统保证中断传输能满足设备端口描述符所规定的最长延迟时间的限制。
客户提供一个足够大的数据缓冲区保存中断传输的数据(通常一次USB传输)。当所有的数据传输完毕,或是错误太多,超出了客许的最多错误次数,IRP被返回给用户。
10.5.3.1.3 块传送
块传输可以始于客户,也可以始于设备,它没有规定的延迟时间限制和周期。当所有的数据传输完或是由于错误太多IRP被返回给客户。
10.5.3.1.4 控制传送
所有的消息通道支持双向传输数据。在所有的情况下,客户先与设备进行SETUP阶段的通信。数据阶段的通信是可有可无的,或是输入,或是输出。最后状态返回主机。关于控制传送协议的具体情况参照第八章。
客户准备缓冲区,且根据需要提供一个空的或是满的数据缓冲区,然后开始SETUP 阶段的第一步(一阶段由几步(phrase)完成组成)。当控制传输的所有步骤都已完成以后,客户接到一个传送结束的消息,或是出现错误的而接到一条错误指示消息。
10.5.3.2 USBD通道设施功能
下面是所提供的通道设施功能。
10.5.3.2.1 废弃IRPS
USBDI允许等待在某一个特定通道传输的IRP被废弃。
10.5.3.2.2 管理通道策略
USBD应能允许客户清除或者设置特定通道或整个接口的使用策略。在成功设置通道使用策略之前的所有IRP都将被USBD拒绝。
10.5.3.3.3 IPRS排队等待
USBDI应能允许客户向特定的通道提出IRPs请求。在当前的IRPS请求还没有完成的时候,客户可以提出新的IRPS请求,多个IRPS请求排队等待。当IRPs返回给客户的时候,请求状态同时也被返回。USBD提供了一种机制以指定一组同步传输的IRPs使它们的首次转送事务出现在同一帧内。
10.5.3.2.4 申请成为USB系统的主客户
主客户可以对每一帧时间作出微小的调整,从而使USB设备比如ISDN口与主机同步。请求成为主客户的客户必须说明自己正在控制的设备接口句柄。
USBDI允许客户请求成为该USB系统的主客户,并且当客户不需要的时候,使之放弃该项功能。USBD只能将主客户的地位给予一个客户。当当前的主客户没有放弃控制权的时候,所有请求成为主客户的请求都被忽略。主客户可能显式的放弃控制。或者是由于主客户的设备被复位或断开,主客户自动地放弃其主控地位。
10.5.4 通过USBD设施管理USB
使用提供的USBD功能设施,USB系统通常支持下面的基本功能。
10.5.4.1 配置服务(Configuration Server)
配置服务基于每个设备。配置软件告诉USBD何时配置设备。一个集线器驱动器在设备管理中扮演特殊的角色,它至少支持如下的功能。
USBD还提供如下的配置功能,可由集线器驱动程序所使用或由其它的配置软件使用。
当集线器驱动器通知USBD有新的设备连接,USBD为新的设备创建标准通道。
10.5.4.1.1 配置管理服务
配置管理服务主要通过提供一组在标准通道上产生数据传送事务的接口命令来实现。值得注意的一个例外是集线器使用另外的中断通道直接将它的状态传递给集线器驱动器。
任何一个集线器在它的某一口的状态发生改变的时候初始化一次中断传输。通常,集线器口的状态改变是由于USB设备的连接或断开(详情请参考11章)
10.5.4.1.2 设备初始配置
设备配置过程在设备连上集线器的某一口时开始,集线器通过它的状态改变通道报告自己某一口的状态的改变。
配置管理服务允许配置软件从USB设备的一串可选配置中选择其中的一个作为设备的配置。USBD在真正设置配置信息之前检查是否能提供足够的能量(power)并且检查数据的传输速率是否超出了USB的当前能力范围。
10.5.4.1.3 修改设备的配置
配置管理服务允许配置软件更改设备的配置。当USB能提供足够的能量,且数据传输速率也在USB的能力范围之内,USB便完成更改配置的操作。如果新的配置被拒绝,则设备保留原先的配置。
配置管理服务允许配置软件将设备的状态返回到没有被配置的状态。
10.5.4.1.4 设备断开
当集线器通过它的状态改变通道报告设备断开时,错误恢复或者设备断开处理过程便开始了。
10.5.4.2 总线及设备管理
总线及设备管理服务允许客户成为USB的主客户,并且作为USB的主客户,可以调节总线上传输的每一帧的时间。一个主客户可能为当前传输的帧增加一bit 或削减一bit的时间。
10.5.4.3 能量控制
对USB来说,有紧密接合的两个层次的能量控制:总线层及设备层的能量控制。这种具体化提供更有效管理USB总线能量的设施。设备类可能定义与特定类有关的能量控制功能。
所有的设备都支持挂起状态(参见第9章)通过控制设备所连到的集线器口可以使设备处于挂起(suspend)状态。在挂起状态下,普通的设备操作都中止了,然而,如果设备支持远程唤醒且已经使能响应唤醒信号的话,它可以在外部事件的激励下产生恢复(resume)信号。
能量管理系统可能将设备置于挂起的状态或者干脆切断设备的能源以达到节能的目的。当设备在挂起和恢复的转换过程中,USB并不提供保存和恢复设备状态的机制和功能。设备的类可能定义特定类的状态保存及恢复功能。
USB系统协调设备的交互而不管设备是处于加电状态还是处于挂起状态。
10.5.4.4 事件通知
USBD客户可以从不同的源接到不同的通知消息,其中有可能的事件源有如下几种:
10.5.4.5 状态报告及错误恢复功能
USBD的命令设施及通道设施都提供状态报告及错误恢复的功能。
另外,USBD的客户可以通过命令设施取得USB设备的状态。
USBD允许通道被重设置或废弃以提供客户通道错误恢复的功能。
10.5.4.6 管理远程唤醒的设备
USB系统应使挂起的USB系统在恢复过程中消耗的能量最小。为了达到该目的,USB系统显式的使能某些具备远程唤醒功能的设备,控制恢复信号在树型拓扑中的传播,有选择的唤醒挂起某些设备。
在某些错误恢复场合,USB系统可能重新遍历子树,子树可能完全或部份被挂起。在错误恢复的过程中,USB系统必须避免在设备恢复的过程中,向设备所连接的集线器口驱动RESET信号。通过管理设备的远程唤醒特征及集线器的口特征可以避免以上情况的发生,规则如下:
10.5.5 将操作系统起动前USB的控制交给操作系统
只有一个软件驱动程序拥有主机控制器。如果主机系统在操作系统被加载之前实现USB服务,主机控制器必须提供一种机制,使得操作系统起动前的软件对主机控制器的访问无效,且将控制转交给操作系统。一旦操作系统取得控制权,它必须设置好总线。如果操作系统提供一种机制,将控制转再转交给系统起动前的环境,总线将处于一种不确定状态。操作系统起动前的软件可以认为这是一种加电状态(Powerup)。
USB开源项目
百合电子工作室曾在2009年推出了一个USB开源项目:Easy USB 51 Programer,此项目以开源的形式展示了USB通信的基础性内容、USB HID设备类固件程序开发及PC端应用程序开发、自定义USB设备类固件程序开发及PC端驱动程...
|
USB产品
EASY USB D12 是原EASY USB 51 PROGRAMER的升级版,是百合电子工作室历时一年精心设计的一款USB学习板/开发板,与老款相比,其实例更丰富,技术文档更详尽,更重要的是此款USB学习板还提供技术支持。......
|