第八章 USB设备架构
USB设备可被划分三层:
·底层是传送和接收数据包的总线接口
·中间层处理总线接口与不同端点之间的数据路由端节点是数据的终结提供处或使用处,它可被看作数据源或数据接收端(Sink)
·最上层的功能由串行总线设备提供,比如鼠标,或ISDN接口。
本章描述的是USB设备中间层的通用属性与操作。这些属性与操作由设备的特定功能的部分用于通过总线接口最终与主机(host)的通信。
9.1 USB设备状态
USB设备有若干可能的状态,其中一些对于USB与主机(host)来说是外置的,而另外一些对USB设备来说是内置的,这一节描述的就是这些外置状态。
9.1.1 外置的设备状态
本小节描述的是外部可见的USB设备状态(见图8-1)。
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
8-1汇集这些外置设备状态之间的转化关系。
注意:USB设备会响应上行端口(upstream Port)传来一个复位(reset)信号进行复位操作。当reset信号完成的时候,USB设备业已复位。
连 接
加 电
缺 省
编 址
配 置
挂 起
说 明
不
__ __
__ __
__ __
__ __
__ __
设备尚未连接至接口.其他特性无关
是
不
__ __
__ __
__ __
__ __
设备已连接至接口,但未加电. 其他特性无关.
是
是
不
__ __
__ __
__ __
设备已连接至接口,并且已加电.但尚未被复位.
是
是
是
不
__ __
__ __
设备已连接至接口,已加电. 并被复位.
但尚未分配地址.设备在缺省地址处可寻址.
是
是
是
是
不
__ __
设备已连接至接口,已加电. 并被复位.且分配了唯一地址.
尚未被配置.
是
是
是
是
是
不
设备已连接至接口,已加电. 并被复位.且分配了唯一地址,并被配置.
设备功能可被使用.
是
是
__ __
__ __
__ __
是
设备在至少3毫秒以内探测不到总线活动,自动进如挂起.
设备功能不可用.
表8-1. 外置(可见)的设备状态
9.1.1.1 连接状态
USB设备可被连接到USB接口上或从接口断开,USB设备处在断开时的设备状态不包括在本篇说明之中。本说明中仅讨论那些处在连接状态的设备特性与操作。
9.1.1.2 加电状态(Powered)
USB设备的电源可来自外部电源,也可从USB接口的集线器而来。电源来自外部电源的USB设备被称作自给电源式的(self-powered)。尽管自给电源式的USB设备可能在连接上USB接口以前可能已经带电,但它们直到连线上USB接口后才能被看作是加电状态(Powered state)。而这时候VBUS已经对设备产生作用了。
一个设备可能有既支持自给电源的,同时也支持总线电源式的配置。有一些支持其中的一种,而另一些设备配置可能只有在自给电源下才能被使用。设备对电源支持的能力是通过配置描述表(configuration descriptor)来反映的。当前的电源供给形式被作为设备状态的一部分被反映出来。设备可在任何时候改变它们的供电来源,比如说:从自给式向总线式改变,如果一个配置同时支持两种模式,那此状态的最大电源需求就是指设备在两种模式下从VBUS上获取电能的最大值。设备必须以此最大电源作为参照,而究竟处于何状态是不考虑的。如果有一配置仅支持一种电源模式,那么电源模式的改变会使得设备失去当前配置与地址,返回加电状态。如果一个设备是自给电源式,并且当前配置需要大于100mA电流,那么如果此设备转到了总线电源式,它必须返回地址状态(Address state)。自给电源式集线器使用VBUS来为集线控制器(Hub controller)提供电源,因而可以仍然保持配置状态(Configured state),尽管自给电源停止提供电源。具体细节可参照11.14小节。
9.1.1.3 缺省状态
设备加电以后,在它从总线接收到复位信号之前不应对总线传输发生响应。在接收到复位信号之后,设备才在缺省地址处变得可寻址。
9.1.1.4 地址状态
所有的USB设备在加电复位以后都使用缺省地址。每一设备在连接或复位后由主机分配一个唯一的地址。当USB设备处于挂起状态时,它保持这个地址不变。
USB设备只对缺省通道(Pipe)请求发生响应,而不管设备是否已经被分配地址或在使用缺省地址。
9.1.1.5 Configured (配置状态)
在USB设备正常工作以前,设备必须被正确配置。从设备的角度来看,配置包括一个将非零值写入设备配置寄存器的操作。配置一个设备或改变一个可变的设备设置会使得与这个相关接口的终端结点的所有的状态与配置值被设成缺省值。这包括将正在使用(date toggle)的结点(end point)的 (Date toggle)被设置成DATAO。
9.1.1.6 中止状态
为节省电源,USB设备在探测不到总线传输时自动进入中止状态(参见第七章)。当中止时,USB设备保持本身的内部状态,包括它的地址及配置。
所有的设备在一段特定的时间内探测不到总线活动时必须进入中止态,这一特定的时间在第7章中进行了说明。不管设备是被分配了非缺省的地址或者是被配置了,已经连接的设备必须在任何加电的时刻随时准备中止。总线活动的中止可能是因为主机本身进入了中止状态。另外,USB设备必须在所连接的集线器端口失效时进入中止态。这就是所指的选择性中止(Selective suspend)。
USB设备在总线活动来到时结束中止态。USB设备也可以远程唤醒的电流信号来请求主机退出中止态或选择性中止态。具体设备具有的远程唤醒的能力是可选的,也就是说,如果一个设备有远程唤醒的能力,此设备必须能让主机控制此能力的有效与否。当设备复位时,远程唤醒能力必须被禁止。
9.1.2 Bus Enumeration总线标号
当USB设备接上或从USB设备移开的时候,主机启动一个被称作总线标识(bus enumeration)的进程,来标识并管理设备状态的改变,当USB设备接上一个加电端口时,系统当采取以下操作:
1.USB设备所连的集线器通过其通向主机的状态改变通道向主机,汇报本USB设备已连接上。(参照11.13.3节)。此时,USB设备处于加电状态,它所连接的端口是无效的。
2.主机通过寻问集线器决定此次状态改变的确切含义。
3.主机一旦得知新设备已连上以后,它至少等待100ms以使得插入操作的完成以及设备电源稳定工作。然后主机发出端口使能及复位命令给那个端口。具体这些事件发生的顺序及时间判定请参看7.1.7.1节及图7-19。
4.集线器将发向端口的复位信号持续10ms(见11.5.15节)。当复位信号撤消后,端口已经有效了。这时USB设备处于缺省状态,并且可从VBUS汲取小于100mA的电能,所有设备寄存器及状态已经被复位,设备可对缺省地址产生响应。
5.主机给设备分配一个唯一的地址,设备转向编址状态。(Address state)。
6.在USB设备接受设备地址之前,它的缺省控制通道(Default Control Pipe)在缺省地址处自然是可寻址的,主机通过读取设备描述表,判决设备缺省通道的实际净数据负载。
7.主机从设备读取配置信息要从配置0读到配置n-1,其中n为配置个数,此操作须花费几个毫秒。
8.基于从设备取来的配置信息及设备如何被使用的信息,主机给设备一个配置值,此刻,设备就处于配置状态(Configured state)并此配置有关的所有端节点,都按照配置各就各位,USB设备现在可以从VBUS得到描述中所要求的电量了。从设备的角度来讲,它已经准备就绪了。
当UBS设备被取走时,集线器同样会通知主机,断开一个设备连接会使得设备所连接的端口无效,一收到断开通知后,主机就会更新的拓扑信息。
9.2 通用USB设备操作(Generic USB Device Operations)
所有的USB设备支持通用的操作集,这一节主要描述的这些操作。
9.2.1 动态插接与拔开
USB设备必须在任意时刻允许被插接与拔开。提供连接点或端口的集线器应当负责汇报端口的状态改变情况。
当主机探测到连接操作后,会使得所连的集线器端口生效,设备也会因此而复位,一个被复位了的USB设备有如下特性:
·对缺省USB地址发生响应
·没有被配置
·初始状态不是挂起
当设备从一个集线器端口移去时,集线器会使得原来连接的端口失效,并且通知主机设备已移去。
9.2.2 地址分配
当USB设备连接以后,由主机负责给此设备分配一个唯一的地址,这个操作是在设备复位及端口使能操作以后。
9.2.3 配置
USB设备在正常被使用以前,必须被配置,由主机负责配置设备。主机一般会从USB设备获取配置信息后再准定此设备有哪些功能。
作为配置操作的一部分,主机会设置设备的配置值,并且,如果必要的话会选择合适的接口的备选设置。
只须一个简单配置,一个设备可能支持多重接口。一个接口是一组端结点集合,它们代表了设备向主机提供的单一的功能或特性,用来与这组相关端结点通信的协议以及接口内各端结点的目的可以作为一个设备类的一部分或者由厂商制定具体定义。
另外,一个配置中的结口可能有备选设置。这些备选设置会重定义相关端结点的数目或特性。如果是这样的话,设备必须支持GetInterface(接口请求)与Set Interface(接口设置)请求,来汇报及选择指定的接口的设备选设置。
在每个设备配置下,每个接口描述表可能包括用来标识接口的及备选设置的域,接口被从0~N-1编号。n为配置所支持的能同时使用的接口数目,类似的设置的编号也从0开始。当设备初始化配置后,缺省设置是备选设置0。
为了支持通用的设备驱动程序管理一组相关的BUS设备,设备与接口描述表中包含了类(Class),子类(Sub class),及协议(Protocol)域。这些域用来标识一个设备的功能及用于通信的协议。
一个类值被分配给一组按照特性划分成USB类说明一部分的设备。一个类的设备可进一步划分成子类,并且在一个类或子类中,一个协议代值可定义主机软件是怎样与设备通信的。
注意:类、子类、与协议值必须一致,但在本说明范围之外。
9.2.4 数据传送
数据可能以四种方式在USB设备端结点与主机之间传送。四种传送方式参见第五章。在不同设置下,一个终端结点可能被用于不同的传输方式,但一旦设置选定,传送方式就选定了。
9.2.5 电源管理
USB设备的电源管理包括以下说明部分的几条。
9.2.5.1 电源
USB总线电源是一个有限的资源,在设备标识(device enumeration)阶段,主机估测电源的需求。如果电源的需求量超过USB总线所能提供的电量,主机软件则不能选择那个配置。
USB设备应将电源需求量限制在一个单元以下,直到被配置。中止(挂起)的设备,不管是否已经配置过了,应将总线耗电降到第7章定义的
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
以下。视接到设备的端口电源负载能力而定,USB设备在配置了以后可从VBUS汲取达5个单元的电量。
9.2.5.2 远程唤醒
远程唤醒能力参许一个被挂起的USB设备发达信号给处于挂起状态的主机。这个信号会使得主机醒来,处理触发事件。USB设备通过配置描述来向主机汇报其远程唤醒的能力。USB设备的远程唤醒能力应能被禁止的。远程唤醒能力通过7.1.7.5节中电信号的方式来达到的。
9.2.6 请求处理
除SetAddress( )请求以外(见9.4.6节),在安装完成返回ACK信号以后,设备就开始处理请求。在某一状态成功结束以前,设备应当“完成”对请求的处理。许多请求费时较多,像这样的请求,该设备类应定义一个
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
而不是等待交换状态信息阶段(StatusStage)的结束来表示该操作已经完成。像这样的操作有:集线器端口的复位至少需10ms来完成。当端口复位产生时,SetPortFeature (PORT-RESET)(见11章)请求就结束了。当端口状态改变并表明此端口已经生效时,一个信号就会产生表明复位信号已经结束。这种技术可以防止当主机知道某一个请求费时较长的情况一直探测此请求是否已完成。
9.2.6.1 请求处理的定时处理
所有的设备应当及时处理请求,USB给定一个5秒的命令处理的时间上界。这个限制并不是对所有情况都适用的。这些限制在接下来的部分给予描述,应当说明的是,下面的限制包括实现的很大的范围。如果所有设备都采用最大的请求处理允许时间的话,用户是无法忍受的。应此,具体实现应当尽可能快地完成请求的处理。
9.2.6.2 复位/继续 恢复时间
当一个端口被复位或从中止态继续的时候,USB系统软件应当等待一个10ms的恢复时间才能确保端口对数据传输产生响应。
一旦恢复时间段结束(从reset信号结束,或resume信号结尾的EOP结束开始计时)设备必须在任意时刻都能对数据传输作出响应。
9.2.6.3 设置地址的处理
在reset/resume恢复时间段以后,如果设备收到SetAddress( )请求,设备必须能在50ms内完成请求的处理,并完成状态的转换,在SetAddress ( )的请求下,当设备发出O长度的状态数据包或设备收到状态数据包的响应信号ACK就表明状态转换结束了。
在状态转换结束后,设备有2ms的SetAddress ( )恢复时间。在这段时间结束以后,设备必须能在新地址处接受Setup数据包,并且,必须确保此时设备不对旧地址的信号产生响应。(当然,除非新旧地址是一样的)。
9.2.6.4 标准设备请求
对于不须传送数据标准的设备请求,一个设备必须在收到请求的50ms以内结束对请求的处理及状态的转换。
对于需要数据传输的标准设备请求,设备必须在收到请求的500ms以内返回第一个数据包。接下来的数据包必须在前一个数据包发送起的500ms以内开始发送。设备必须在最后一个数据包返回以后的50ms以内结束状态的转换。
对于需要数据传输的标准设备请求,5秒的限制就起作用了。这意味着设备必须能在主机以设备最大能接受的速率发送数据包的情况下接收所有的数据包并且完成状态切换,数据包之间时延是主机让设备完成请求处理而加入的。
9.2.6.5 与类有关的请求
除非在类文档中特别说明,所有的类有关的请求必须按照标准请求的时间限制。
类说明文档可能要求设备反应比这部分讲的要快。标准设备请求与与类有关的设备请求可被要求反应更快。
9.2.7 请求错误
如果一设备收到一个请求,它或是在设备中无定义,或是不适用于当前设置,或是数值不对,这时就会产生一个请求错误。设备在下一个数据传输阶段或状态交换阶段(Status stage)返回一个表明错误的STALL PID信号,一般在下一个数据传输返回更好,这样可减少不必要的总线活动。
9.3 USB设备请求
所有的USB设备在设备的缺省控制通道(Default Control Pipe)处对主机的请求发出响应。这些请求是通过使用控制传输来达到的,请求及请求的参数通过Setup包发向设备,由主机负责设置Setup包内的每个域的值。每个Setup包有8个字节。见表8-2。
偏移量
域
大小
值
描述
0
bmRequestType
1
位图
请求特征:
D7: 传输方向
0=主机至设备
1=设备至主机
D6..5: 种类
0=标准
1=类
2=厂商
3=保留
D4..0: 接受者
0=设备
1=接口
2=端点
3=其他
4..31=保留
1
bRequest
1
值
具体请求(参见表8-3)
2
wValue
2
值
字长域,根据不同的请求含义改变.
4
wIndex
2
索引或偏移
字长域,根据不同的请求含义改变.典型用于传送索引或偏移.
6
wLength
2
如有数据传送阶段,此为数据字节数.
表8-2 . Setup 数据包的格式
9.3.1 bmRequestType域
这个域表明此请求的特性。特别地,这个域表明了第二阶段控制传输方向。如果wLength域被设作0的话,表明没有数据传送阶段,那Direction位就会被忽略。
USB说明定义了一系列所有设备必须支持的标准请求。这些请求被例举在表8-3中。另外,一个设备类可定义更多的请求。设备厂商也可定义设备支持的请求。
请求可被导引到设备,设备接口,或某一个设备端结点(endpoint)上。这个请求域也指定了接收者。当指定的是接口或端结点(endpoint)时,wIndex域指出那个接口或端节点。
9.3.2 bRequest域
这个域标识特别的请求。bmRequestType域的Type啦可修改此域的含义。本说明仅定义Type 字位为0即标准设备请求时bRequest域值的含义。
9.3.3 wValue域
此域用来传送当前请求的参数,随请求不同而变。
9.3.4 wIndex域
wIndex域用来表明是哪一个接口或端结点,图8-2表明wIndex的格式(当标识端结点时)。Direction位在设为0时表示出结点,设为1时表示是入结点,Endpoint Number是结点号。图8-3表明wIndex用于标识接口时的格式。
D7
D6
D5
D4
D3
D2
D1
D0
方向
保留(为0)
端点号
D16
D15
D13
D12
D11
D10
D9
D8
保留(为0)
图8-2. 所指为端点时wIndex 格式
D7
D6
D5
D4
D3
D2
D1
D0
接口号
D16
D15
D13
D12
D11
D10
D9
D8
保留(为0)
图8-3. 所指为接口时WIndex 格式
9.3.5 wLength域
这个域表明第二阶段的数据传输长度。传输方向由bmRequstType域的Direction位指出。wLength域为0则表明无数据传输。在输入请求下,设备返回的数据长度不应多于wLength,但可以少于。在输出请求下,wLength指出主机发出的确切数据量。如果主机发送多于wLength的数据,设备做出的响应是无定义的。
9.4 标准设惫请求
这部分描述的所有USB设备都定义的标准设备请求,表8-3将它们列出,而表8-4、8-5分别结出了对应的标准请求码及描述表类型。
不管设备是否被分配了非缺省地址或设备当前是被配置了的,它们都应当对标准请求产生响应。
特性选择符被用来设置特性或使特性生效。比如说某个设备、接口、或结点的远程唤醒功能,特性选择符的值在表8-6中得到了说明。
对于非法请求的处理从前所述。但是非法请求并不会使得控制通道设置Halt特性。如果因为某种原因,设备因为一个错误状态不能通过缺省控制通道来与主机通信,设备必须被reset来清除错误状态并重启缺省通道。
bmRequestType
bRequest
wValue
Windex
wLength
Data
00000000B
00000001B
00000010B
CLEAR_FEATURE
特性选择符
零
接口号
端点号
零
无
10000000B
GET_CONFIGURATION
零
零
一
配置值
10000000B
GET_DESCRIPTOR
描述表种类和索引
零或语言标志
描述表长
描述表
10000001B
GET_INTERFACE
零
接口号
一
可选设置
10000000B
10000001B
10000010B
GET_STATUS
零
零
接口号
端点号
二
设备,
接口 ,或
端点状态
00000000B
SET_ADDRESS
设备地址
零
零
无
00000000B
SET_CONFIGURATION
配置值
零
零
无
00000000B
SET_DESCRIPTOR
描述表种类和索引
零或语言标志
描述表长
描述表
00000000B
00000001B
00000010B
SET_FEATURE
特性选择符
零
接口号
端点号
零
无
00000001B
SET_INTERFACE
可选设置
接口号
零
无
100000010B
SYNCH_FRAME
零
端点号
二
幀号
表8-3 标准设备请求
Brequest
Value
GET_STATUS
0
CLEAR_FEATURE
1
为将来保留
2
SET_FEATURE
3
为将来保留
4
SET_ADDRESS
5
GET_DESCRIPTOR
6
SET_DESCRIPTOR
7
GET_CONFIGURATION
8
SET_CONFIGURATION
9
GET_INTERFACE
10
SET_INTERFACE
11
SYNCH_FRAME
12
表8-4 标准请求码
描述表种类
值
DEVICE
1
CONFIGURATION
2
STRING
3
INTERFACE
4
ENDPOINT
5
表8-5 描述表种类
特性选择符
接受者
值
DEVICE_REMOTE_WAKEUP
设备
1
ENDPOINT_HALT
端点
0
表8-6 标准特性选择符
9.4.1 清除特性(ClearFeature())
这个请求是被用来清除一个指定的特性。
wValue中的特性选择符的值必须根据接收者来设定适当的值。接收者是设备要用设备特性选择符,是接口就必须用接口特性选择符,是端结点就要用端节点特性描述符。
参照表8-6来看选择符与接收者的对应关系。
一个ClearFeature( )请求所指的特性如果不能被清除,不存在或指的是不存在的接口或结点号,会产生RequestError错误。
如果wLength不为0,设备响应无定义。
缺省状态:当设备处于缺省状态时,对此请求的反应无定义。
地址状态:在设备处于地址状态时这个请求是合法的,但如果该请求指的是接口或是非零号端结点,会引起请求错误。
配置状态:在此状态下,该请求合法。
9.4.2 取得配置(GetConfiguration())
此请求返回当前设备配置值。
如果返回0值表明设备未配置。
如果wValue, wIndex, wLength的值与上面表中不同,设备响应无定义。
缺省状态:该请求响应无定义
地址状态:返回0值
配置状态:非0的 bConfigurationValue值被返回
9.4.3 取得描述符
这个请求返回存 在的描述符。
wValue域的高一字节标识描述表类型,低一字节表示描述表的索引(参见表8-5)。wIndex域标识字串描述表的语言(Language ID)如果是其它语言的话就设为0,wLength表示要返回多少字节。如果描述表长度大于wLength域值,那么只有描述表的初始部分被返回。如果描述表比wLength域值,没发送一个短包来标志传输的结束。一个短包被定义成一个长度短于最大负载长度或一个空(NULL)包。
这个标准请求包括三种描述符:设备、配置、及字串一个配置描述表的设备请求会一次返回配置描述表,所有的接口描述表和所有接口的端节点的描述表。第一个接口描述表紧跟着配置描述表,第一个接口的端节点的描述表随后。如果有其它的接口与端节点,它们的描述表欲跟在第一个接口与端节点描述表之后。与类有关的描述表,和/或厂商定义的描述表跟在标准描述表之后。
所有的设备必须提供一个设备描述表并且至少一个配置描述表,如果一个设备不支持一个请求的描述表,则返回请求错误。
缺省状态:此请求合法。
地址状态:此请求合法。
配置状态:此请求合法。
9.4.4 取得接口设置(GetInterface())
这个请求返回所指接口的选中的可选设置。
有些USB设备的接口配置有互斥的设置。这个请求使得主机决定当前设置。
如果wValue或wLength不依以上的表中设值,设备响应无定义。
如果所指的接口不存在,返回请求错误。
缺省状态:此状态下,设备对该请求响应无定义
地址状态:设备返回请求错误
配置状态:此请求合法
9.4.5 取得状态(GetStatus ( ))
这个请求返回所指接收者的状态。
bmRequestType域的Recipients位段表示出接收者。
如果wValue或wLength不是上表中值,或wIndex在取设备状态请求时非0则设备响应无定义。
缺省状态:设备响应无定义
地址状态:如果所指的是接口或是一个非0号端节点,设备响应返回请求出错。
配置状态:如果所指接口或端节点不存在,返回请求错误。
一个GetStatus()请求返回信息的格式如图8-4。
D7
D6
D5
D4
D3
D2
D1
D0
保留(为零)
远程唤醒
自给电源
D15
D14
D13
D12
D11
D10
D9
D8
保留(为零)
图8-4 GetStatus()发向设备时返回信息
其中Self Powered域表明设备当前是否是自给电源。如果Do为0设备是总线电源式。如果Do被设成1,设备是自给电源式的。此域不应当被SetFeature( )或ClearFeature ( )请求改变。
Remote Wakeup域表明此设备当前是否支持远程唤醒,支持远程唤醒能力的设备缺省值是无效的(disabled),如果D1被Reset成0,远程唤醒能力就被disabled。返之,设成1就是具有该功能,此域可被SetFeature( )和Clear Feature ( )使用DEVICE-REMOTE-WAKEUP特性选择符修改,设备复位时此域被设成0。
一个GetStatus ( )的接口请求返回如图8-5的信息。
D7
D6
D5
D4
D3
D2
D1
D0
保留(为零)
D15
D14
D13
D12
D11
D10
D9
D8
保留(为零)
图8-5 GetStatus()发向接口时返回信息
一个Get Statue( )的端节点请求返回如图8-6所示信息。
D7
D6
D5
D4
D3
D2
D1
D0
保留(为零)
停机
D15
D14
D13
D12
D11
D10
D9
D8
保留(为零)
图8-6 GetStatus()发向端点时返回信息
Halt特性应当在所有的中断及端结点中实现。如果端节点当前被halted了,那么这个Halt特性就设成1,否则为0。Halt特性可选择性地由Set Feature(ENDPOINT-HALT)请求来设置,一旦被SetFeature( )请求设置,设备的响应就会像这个域由硬件条件设置的一样,如果导止停机(halt)的条件去除了,用Clear Feature (ENDPOINT-HALT)请求清除halt特性会导致端节点再也不会返回STALL信号。对于使用 (Date toggle)的端节点,不管一个端节点的Halt特性是否已被设置,一个Clear Feature (ENDPOINT-HALT)总会导致 (date toggle)被重新初始化成DATAO Halt特性在收到SetConfiguration ( )或Set Interface( )请求后总会被复位成0。
Halt特性不要求也不
建议
关于小区增设电动车充电建议给教师的建议PDF智慧城市建议书pdf给教师的36条建议下载税则修订调整建议表下载
在缺省控制通道实现。然而,设备可设置缺省控制通道的Halt特性来反映一个功能出错的状态。如果这个特性被设了的话,设备将对除Getstatus( ),SetFeature( ),Clear Feature ( )之外的请求返回STALL信号,设备可不对类有关的及厂商定制的请求返回STALL信号。
9.4.6 设置地址(SetAddress ( ))
本请求为设备的将来存取设置地址
wValue指出所要设置成的地址值
像在另处所述,请求实际可分成三个阶段。在第一阶段,Setup包被送至设备,在第二个可有无的阶段,数据在设备与主机之间传送,在第三阶段,状态信息在主机与设备之间传送。数据与状态传送的方向要看是主机发数据给设备还是设备发数据给主机。状态的传送方向总是与数据传送方向是相反的,如果没有数据传输阶段则状态由设备传向主机的。
Setup包传送以后的两个阶段的地址保持与Setup包传送阶段的一致。USB设备只有在Status阶段过后才能改变设备地址。注意,在这方面此请求不同于其它请求。其它请求总是在状态传送阶段之前完成指定操作的。
如果所指的设备地址大于127或wIndex 或wLength非零,设备响应无定义。
设备对SetAddress(0)的响应无定义
缺省状态:如果地址值非0,那设备将进入地址状态,否则地址仍留在缺省态(此非出错状态)
地址状态:如果新地址值为0,进入缺省态,否则仍留在地址状态但使用新地址
配置状态:在此状态下设备对此请求的响应无定义。
9.4.7 设置配置值(SetConfiguration( ))
此请求设置设备配置值
wValue域的低字节指出配置,这个配置值必须为0或与配置描表中的一个配置相配。如果配置值为0,设备置地址状态。wValue的高字节保留。
如果wIndex, wLength或wValue的高字节非0,则设备对之的响应无定义。
缺省状态:设备响应无定义
地址状态:如果所指的配置为0,设备停留在地址状态。如果所指的配置与描述表中的一个值相匹配,那个配置就被选中,设备转到配置有。否则,返回请求错误
配置状态:如果配置值为0,设备进入电址状态。如果配置值非0并与描述表中的一个配置相匹配则设备仍留在配置态,但采用新的配置值,否则返回请求错误。
9.4.8 设置描述表(SetDescriptor ( ))
此请求用于更新或添加新的描述表。
wValue域的高字节指出了描述的类型,低字节指出了描述表索引(参风表8-5)。wIndex域指出了字串描述表的语言标识,对于其它描述表来说它为0。wLength指出从主机传向设备的字节数。
如果设备不支持该请求则设备返回一个请求错误
缺省状态:此状态下设备对该请求反应无定义
地址状态:如果设备支持请求,则为合法
配置状态:如果设备支持请求,则为合法
9.4.9 设置特性(SetFeature ( ))
这个请求被用来设置或使一个特性生效。
wValue域中的特性选择符必须跟接收者相配。
哪个选择符对应什么接收者的定义请参照表8-6
SetFeature ( )请求如果指出一个不存在的特性会使得设备在交换状态阶段返回STALL信号。
如果wLength为非0,设备响应无定义。
如果SetFeature ( )指的是一个不存在的接口或端节点,设备返回一个请求错误。
缺省状态:设备响应无定义。
地址状态:合法、除非请求错误。
配置状态:合法。
9.4.10 设置接口(SetInterface ( ))
此请求让主机为指定的接口选择一个设置。
如有USB设备接口配置中有互斥设置。此请求让主机选择所要的设置。如果设备的接口只支持缺省设置,在状态交换阶段设备返回STALL
如果所指接口或设置不存在,设备返回请求错误。
wLength为0,设备响应无定义
缺省状态:设备响应无定义
地址状态:设备返回请求错误
配置状态:合法
9.4.11 同步帧(SynchFrame ( ))
该请求用来设置或汇报一个结点的同步帧。
如果一个端节点支持同步传输,端节点可能会根据某一特点的模式来以变长方式传送每一帧。主机与端节点必须在什么时候出现重复模式的第一帧出现上达成一致。模式开始帧的序号由设备返回给主机。这个帧序号由模式首帧前的SOF信号传向端节点。设备还可以用此请求来使得帧模式重新开始。在这种情况下,设备应当保存每个SOF中的帧序号并在数据传送阶段返回这些值,并在数据传送阶段的每个 (IN)之后立即开始重新开始这个模式。
这个值仅用于隐式模式的同步数据传输。如果wValue非0或wLength非2,设备响应无定义。
如果所指的端节点不支持此请求,设备返回一个请求错误。
缺省状态:设备响应无定义
地址地址:设备返回请求错误
配置状态:此请求合法
9.5 描述表
USB设备通过描述表来反映他们的属性。描述表是有定义好的格式的数据结构,每一个描述表以一个字节打头表明本描述表的长度,紧跟其后是一个字节的描述表类信息。
使用描述表使得单个配置的特性存储变得简明,因为每个配置可能会重复使用其它有相同特性的配置描述表的部分或全部,用这种方法,描述表用一个关系数据库来表绘一个个的单独数据记录。
在适当的地方,描述表包括了指向字串描述表的引用。字串描述表提供了人能读懂的信息。字串描述表可有可无,但描述表中的字串指引域是不可少的。如果一个设备不支持字串描述表,该域就为0。
如果描述表值中的长度域值少于本说明的定义,此描述表非法,不能被主机接受。如果返回的描述表中的长义值大于本说明定义,则过长部分当被忽略,但下一个描述表的位置由返回长度而不是实际长度来决定。
设备可以两种方式返回类相关的或厂商定义的描述表。
1.如果这两种描述表的格式与标准格式相同(以长度字节打头,紧跟着类型字节)则它们可由GetDescriptor(Configuration)请求与标准描述一同返回。在这种情况下,类相关或厂商定义的描述表一般跟在被修改的或被扩展的描述之后。
2.如果这两种描述表使用的非标准格式。指定类相关的或厂商定义的描述表及索引的GetDescriptor( )请求可从设备返回这两种描述表。类或厂商说明会指出正确取出这两种描述表的途径。
9.6 标准描述表的定义
本说明中有关标准描述表的定义只能被本说明的校订本修改或扩展。
注意:一个对USB 1.0标准结点描述表的扩展已由《声音设备类说明修订本1.0》公布。仅此是除USB说明外被许可的,将来的USB说明的修订本会用此来对标准节点描述表进行扩展来避免与《声》的冲突。
9.6.1 设备
设备描述表给出了USB设备的一般信息。这包括对设备及所有设备配置起全程作用的信息。一个USB设备只能有一个设备描述表。
所有的USB设备都有缺省控制通道。缺省控制通道的最大包长在设备描述表中得到了说明。一个配置的端节点与接口定义在配置描述表中,一个配置和它的接口不包括节点描述表。除最大包长外,缺少通道的特性由本说明定义,并且对所有的USB设备都一样。
bNumberConfiguration s域表明此设备支持的配置数。表8-7为标准设备描述表。
偏移量
域
大小
值
描述
0
bLength
1
数字
此描述表的字节数
1
bDecriptorType
1
常量
描述表种类为设备
2
bcdUSB
2
BCD码
此设备与描述表兼容的USB设备说明版本号(BCD 码)
4
bDeviceClass
1
类
设备类码
如果此域的值为0则一个设置下每个接口指出它自己的类,并个接口各自独立工作。
如果此域的值处于1~FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了,这些接口集体的类定义。
如果此域设为FFH,则此设备的类由厂商定义。
5
bDeviceSubClass
1
子类
子类码
这些码值的具体含义根据bDeviceClass 域来看。
如bDeviceClass 域为零,此域也须为零
如bDeviceClass 域为FFH,此域的所有值保留。
6
bDevicePortocol
1
协议
协议码
这些码的值视bDeviceClass 和 bDeviceSubClass 的值而定。
如果设备支持设备基础上的类相关的协议,此码标志了设备类说明上的值。
如果此域的值为零,则此设备不在设备基础上支持设备类相关的协议。然而,它可能在接口基础上支持设备类相关的协议。
如果此域的值为FFH,此设备使用厂商定义的协议。
7
bMaxPacketSize0
1
数字
端点0的最大包大小(仅8,16,32,64
为合法值)
8
idVendor
2
ID
厂商标志(由USB标准付值)
10
idProduct
2
ID
产品标志(由厂商付值)
12
bcdDevice
2
BCD 码
设备发行号(BCD 码)
14
iManufacturer
1
索引
描述厂商信息的字串的索引。
15
iProduct
1
索引
描述产品信息的字串的索引。
16
iSerialNumber
1
索引
描述设备序列号信息的字串的索引。
17
bNumConfigurations
1
数字
可能的设置数
表8-7 标准设备描述表
9.6.2 配置
配置描述表给出了一设备配置的信息,描述表包括一个b Configuration Value域,在SetConfiguration( )请时被用作参数来设置所需配置。
此描述表给出了此配置下的接口数,每个接口可能独立操作。比如,一个ISDN设备可能配置有两个接口,每个都提供64KB/S的有独立数据源与数据接收者的双向通道在另一个配置下ISDN可能表现为单个接口,将两个通道合成一个128KB/S的双向通道。
当主机发出请求要得配置描述表时,所有相关接口与端节点的描述表都被返回。
一个USB设备有一个或多个配置。每个配置只有一个或多个接口。而每个接口又有0个或多个端节点。在一个配置下,一个端节不会在接口之间共享,除非端节点被同一个接口的不同设置使用。在不同配置端节点,可无此限制。
一个配置好后,设备可支持对配置的有限调整,如果一个接口有备选设置,在配置好后可选择不同设置。表8-8是标准配置描述表。
偏移量
域
大小
值
描述
0
bLength
1
数字
此描述表的字节数。
1
bDescriptorType
1
常量
配置描述表类型
2
wTotalLength
2
数字
此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述表)
4
bNumInterfaces
1
数字
此配置所支持的接口个数
5
bCongfigurationValue
1
数字
在SetConfiguration()请求中用作参数来选定此配置。
6
iConfiguration
1
索引
描述此配置的字串描述表索引
7
bmAttributes
1
位图
配置特性:
D7: 保留(设为一)
D6: 自给电源
D5: 远程唤醒
D4..0:保留(设为一)
一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取的电量。并设置D6为一。运行时期的实际电源模式可由GetStatus(DEVICE) 请求得到。
8
MaxPower
1
mA
在此配置下的总线电源耗费量。以 2mA 为一个单位。
表8-8 标准配置描述表
9.6.3 接口
此描述表在一个配置内给出一个接口的信息。如果一个配置支持不止一个接口,端节点的描述表会跟在接口描述表后被返回,接口描述表总是作为配置描述表的一部分被返回。接口描述不可直接用Set Description ( )和Get Descriptor ( )存取。
一个接口可能包含备选设置,以使得端节点或他们的特性在设备配置好以后能改变。一个接口的缺省设置总是可选设置。SetInterface ( )与GetInterface ( )用来选择与返回选择了的接口设置。
可选的接口设置使得部分的设备配置能在其它接口进行操作的情况下改变。如果一个配置对于它的一个或多个接口有备选设置,每一设置包括一个独立接口描述表和相关结点。
如果一个设备配置支持单个接口,并此接口有两个可选设置,配置描述表返回以后会紧跟着返回bInterfaceNumber与bAlternateSetting域皆为0的第一个设置的接口描述表及相关的结点描述表,而随之后是另一个设置接口描述表与结点描述表。第二个接口描述表的bInterfaceNumber域也应为0,但bAlternate Setting域应为1。
如果一个接口仅使用节点0,则接口描述表以后就不再返回节点描述表,并且此接口表示的是一个请求接口,它使用连在节点0上的缺省通道。在这种情况下bNumberEndpoints域应被设置成0。
一个接口描述表的节点个数不把结点0计在内。表8-9是标准节口描述表。
偏移量
域
大小
值
说明
0
bLength
1
数字
此表的字节数
1
bDescriptorType
1
常量
接口描述表类
2
bInterfaceNumber
1
数字
接口号,当前配置支持的接口数组索引(从零开始)
3
bAlternateSetting
1
数字
可选设置的索引值。
4
bNumEndpoints
1
数字
此接口用的端点数量,如果是零则说明此接口只用缺省控制管道。
5
bInterfaceClass
1
类
类值
零值为将来的标准保留。
如果此域的值设为FFH,则此接口类由厂商说明。
所有其它的值由USB 说明保留。
6
bInterfaceSubClass
1
子类
子类码
这些值的定义视bInterfaceClass域而定。
如果bInterfaceClass域的值为零则此域的值必须为零。
bInterfaceClass域不为FFH则所有值由USB 所保留。
7
bInterfaceProtocol
1
协议
协议码:bInterfaceClass 和bInterfaceSubClass 域的值而定.如果一个接口支持设备类相关的请求此域的值指出了设备类说明中所定义的协议.
8
iInterface
1
索引
描述此接口的字串描述表的索引值。
表8-9 标准接口描述表
9.6.4 节点
每个接口使用的结点都有自己的描述表,此描述表被主机用来决定每个节点的带宽需求。每个结点的描述表总是作为配置描述的一部分返回的,结点0无描述表。8-10为标准节点描述表。
偏移量
域
大小
值
说明
0
bLength
1
数字
此描述表的字节数
1
bDescriptorType
1
常量
端点描述表类
2
bEndpointAddress
1
端点
此描述表所描述的端点的地址。此地址的编码如下:
Bit 3..0 : 端点号.
Bit 6..4 : 保留,为零
Bit 7: 方向,如果控制端点则略。
0:出端点
1:入端点
3
bmAttributes
1
位图
此域的值描述的是在bConfigurationValue域所指的配置下端点的特性。
Bit 1..0 :传送类型
00=控制传送
01=同步传送
10=批传送
11=中断传送
所有其它的位都保留。
4
wMaxPacketSize
2
数字
当前配置下此端点能够接收或发送的最大数据包的大小。
对与同步传送此值用于为每幀的数据净负荷预留时间。而通道可能在实际运行时不需要预留的带宽。实际带宽可由设备通过一种非USB定义的机制汇报给主机.
对于中断传送,批传送,控制传送.端点可能发送较小的数据包。并且在结束传送后既有可能间隙时间来重启,也有可能不需要这段时间。具体请参照第五章。
6
bInterval
1
数字
轮寻数据传送端点的时间间隙。
此域的值对于批传送的端点及控制传送的端点忽略。对于同步传送的端点此域必需为1。对于中断传送的端点此域值的范围为1到255。
表8-10 标准端点描述表
9.6.5 字串
字串描述表是可有可无的。如前所述,如果一个设备无字串描述表,所有其它描述表中有关字串描述表的索引都必须为0。
字串描述表使用的是UNICODE编码,则《Unicode标准世界范围的字符编码》1.0版,第一和第二卷定义,字串描述表支持多语言编码。当请求字串描述表时,请求者用一个6位的语言标识指出语言,此语言ID由微软Windows定义(《开发Windows 95及Windows NT的国际化软件》,Nadine Kano,微软出版,华盛顿)。所有语言的0号字串索引返回一个字串描述表,该字串描述表为双字节的LANGID数组,表示设备支持的语言,表8-11表示了该LANGID数组。USB设备可删除所有的字串描述表。USB设备删了字串描述表后就不能返回LANGID码了。LANGID数组不是以NULL结尾的。它的大小为bLength-2。
偏移量
域
大小
值
描述
0
bLength
1
N+2
此描述表的字节数
1
bDescriptorType
1
常量
字串描述表类型
2
wLANGID[0]
2
数字
语言标识(LANGID)
码0
…
…
…
…
…
N
wLANGID[x]
2
数字
语言标识(LANGID)
码X
表8-11 体现设备所支持的语言的码字
UNICODE字串也不是NULL结尾的(见表8-12),字串长为bLength-2。
偏移量
域
大小
值
描述
0
bLength
1
数字
此描述表的字节数
1
bDescriptorType
1
常量
字串描述表类型
2
bString
N
数字
UNICODE 编码的字串
表8-12 UNICODE 字串描述表
9.7 设备类定义
所有的设备必须支持本章所讲的请求与描述表,多数设备还有设备特有的扩展的请求与描述表。另外,设备还会支持一组设备共有的服务。为了定义一个设备类,下面信息必须被提供出来,来定义此类设备的表现与行为。
9.7.1 描述表
如果此类须有对标准描述表特有的定义,则此定义必须在类说明中指出。另外,如果此类定义了标准的扩展描述表集合,它们必须在类中说明。扩展的描述表定义方法与标准描述表定义方法一致,比如说,所有描述表以表长打头。
9.7.2 接口与结点的使用
当一个设备类标准化以后,此类设备使用的接口以及结点们如何被使用必须在类定义中说明,设备类在满足基本的类定义以后还可扩展一些类特性。
9.7.3 请求
此类的所有请求必须被定义。
1
25