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 |
CLEAR_FEATURE |
特性选择符 |
零 |
零 |
无 |
Get_Configuration |
10000000B |
GET_CONFIGURATION |
零 |
零 |
一 |
配置值 |
Get_Descriptor |
10000000B |
GET_DESCRIPTOR |
描述表种类(高字节,见表5)和索引(低字节) |
零或语言标志 |
描述表长 |
描述表 |
Get_Interface |
10000001B |
GET_INTERFACE |
零 |
接口号 |
一 |
可选设置 |
Get_Status |
10000000B |
GET_STATUS |
零 |
零(返回设备状态) |
二 |
设备, |
Set_Address |
00000000B |
SET_ADDRESS |
设备地址 |
零 |
零 |
无 |
Set_Configuration |
00000000B |
SET_CONFIGURATION |
配置值(高字节为0,低字节表示要设置的配置值) |
零 |
零 |
无 |
Set_Descriptor |
00000000B |
SET_DESCRIPTOR |
描述表种类(高字节,见表5)和索引(低字节) |
零或语言标志 |
描述表长 |
描述表 |
Set_Feature |
00000000B |
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全部传输掉。