USB启动过程

来源:互联网 发布:MySQL完美封装函数 编辑:程序博客网 时间:2024/04/27 17:55

作者:qsycn

转自:http://blog.csdn.net/qsycn/article/details/7672940


1. 从USB中断进入sudav_function。

2. 进入Read_UsbSetupToken_Function,读取8个字节的request到setup_token_buffer.

3. 读取request完毕后,进入UsbEP0_Request_Function。

4. 在这里根据token_buffer和标准命令进入。

下表列出了USB的11种标准命令

表2、USB的11种标准命令命令

bmRequestType

bRequest

wValue

wIndex

wLength

Data

Clear_Feature

00000000B
00000001B
00000010B

CLEAR_FEATURE

特性选择符

零 
接口号 
端点号

Get_Configuration

10000000B

GET_CONFIGURATION

配置值

Get_Descriptor

10000000B

GET_DESCRIPTOR

描述表种类(高字节,见表5)和索引(低字节)

零或语言标志

描述表长

描述表

Get_Interface

10000001B

GET_INTERFACE

接口号

可选设置

Get_Status

10000000B
10000001B
10000010B

GET_STATUS

零(返回设备状态)
接口号(对像时接口时)
端点号(对象是端点时)

设备,
接口 ,或 
端点状态

Set_Address

00000000B

SET_ADDRESS

设备地址

Set_Configuration

00000000B

SET_CONFIGURATION

配置值(高字节为0,低字节表示要设置的配置值)

Set_Descriptor

00000000B

SET_DESCRIPTOR

描述表种类(高字节,见表5)和索引(低字节)

零或语言标志

描述表长

描述表

Set_Feature

00000000B
00000001B
00000010B

SET_FEATURE

特性选择符(1表示设备,0表示端点)

零 
接口号 
端点号

Set_Interface

00000001B

SET_INTERFACE

可选设置

接口号

Synch_Frame

100000010B

SYNCH_FRAME

端点号

帧号

其中bRequest为命令编码值,含意见表3:

表3、USB标准命令的编码值

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

5. 第一次进入读取setup_buffer:0x0680,由于在USB中先传送低位,所以正确排列为0x8006.

那么对于0x80为10000000b,0x06表示为get_descriptror.进入GetDescriptor_function.

6. 在GetDescriptor_function中,读取SetupToken_Buffer+wValue的值,如果是0x0100,则进入UR_GetDescriptor_Device;如果是0x0200,则进入UR_GetDescriptor_Configuration;如果是0x0300,则进入UR_GetDescriptor_String。

7. 同理,进入UR_GetStatus_Function。分别得到UR_GetStatus_Devcie,UR_GetStatus_Interface,UR_GetStatus_Endpoint。

8. 同理,进入UR_ClearFeature_Function。分别得到UR_ClearFeature_Devcie,UR_ClearFeature_Interface,UR_ClearFeature_Endpoint。

9. 同理,进入UR_SetFeature_Function。分别得到UR_SetFeature_Devcie,UR_SetFeature_Interface,UR_SetFeature_Endpoint。

10. 进入UR_SetAddr_Function,设置地址。

11. 进入UR_GetConfiguration_Function,将Configuration通过Send_UsbEP0InToken_One_Function传给host.

12. 进入UR_SetConfiguration_Function, 通过setup_token设置Configuration.

13. 进入UR_SetInterface_Function,注意根据interface的数目来设置.

另外:

USB各版本区别版本最大传输速率速率称号最大输出电流协议推出时间:   

USB1.0:1.5Mbps(192KB/s)   低速(Low-Speed)    500mA……1996年1月

USB1.1:12Mbps(1.5MB/s)    全速(Full-Speed)    500mA……1998年9月   

USB2.0:480Mbps(60MB/s)   高速(High-Speed)   500mA……2000年4月   

USB3.0:5Gbps(640MB/s)     超速(Super-Speed)  900mA……2008年11月

USB Audio Class 规定3种数据传输格式,分别是同步,异步和自适应。

同步方式指的是数据传输速率和USB总线的时钟同步,数据发送与接收方都在USB总线时钟的指挥下同步工作。

异步方式指的是数据接收方工作在一个与USB总线时钟不相干的单独时钟下,通过反馈机制告诉发送方快一点或者慢一点。

自适应方式指的是数据传送速率完全取决于数据的发送方,接收方要自动适应发送方发送数据的速率。

wMaxPacketSize的设置:

1,当endpoint4的speci指定其fifo为32bytes,此时意味着在1msUSB帧内最多传输32bytes数据。

2,所以当设置wMaxPacketSize为32bytes即0x0020,此时正好1ms传输32bytes.

3,假如设置wMaxPacketSize为0x00c0,即192bytes,那么需要5ms才能将192bytes全部传输掉。


原创粉丝点击