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全部传输掉。