当前位置 博文首页 > dadalaohua的博客:【USB笔记】 标准设备请求Standard Device Re

    dadalaohua的博客:【USB笔记】 标准设备请求Standard Device Re

    作者:[db:作者] 时间:2021-07-27 11:49

    USB笔记 标准设备请求 Standard Device Requests

    这里主要列举出所有设备定义的标准设备请求。分别概述了标准设备请求(Standard Device Requests)和给出了标准请求代码(Standard Request Codes)和描述符类型(Descriptor Types)。概念部分主要从各种USB协议中整理,涵盖范围从USB 2.0到 USB 3.2协议。注意并不是所有协议都支持所有的标准设备请求,具体不同协议的差异可以参照附录。

    标准设备请求(Standard Device Requests),例如下图的Get Descriptor就是一个USB设备标准请求。
    Standard Device Requests

    对于标准设备请求,设备要求即使在尚未分配地址或尚未配置的时候,也应该响应标准设备请求。如果标准请求定义了一个可以修改的持久性参数,该参数的重置值或默认值为零,除非该参数另有规定。

    标准设备请求 Standard Device Requests

    下表是标准设备请求,概述了标准设备请求的基本情况。

    bmRequestTypebRequestwValuewIndexwLengthData
    00000000B
    00000001B
    00000010B
    CLEAR_FEATUREFeature SelectorZero
    Interface
    Endpoint
    ZeroNone
    10000000BGET_CONFIGURATIONZeroZeroOneConfiguration Value
    10000000BGET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    10000001BGET_INTERFACEZeroInterfaceOneAlternate Interface
    10000000B
    10000001B
    10000010B
    GET_STATUSZeroStatus TypeZero
    Interface
    Endpoint
    TwoDevice, Interface, or Endpoint Status
    00000000BSET_ADDRESSDevice AddressZeroZeroNone
    00000000BSET_CONFIGURATIONConfiguration ValueZeroZeroNone
    00000000BSET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    00000000B
    00000001B
    00000010B
    SET_FEATUREFeature SelectorOptionsZero
    Interface
    Endpoint
    ZeroNone
    00000001BSET_INTERFACEAlternate SettingInterfaceZeroNone
    00000000BSET_ISOCH_DELAYDelay in nsZeroZeroNone
    00000000BSET_SELZeroZeroSixExit Latency Values
    10000010BSYNCH_FRAMEZeroEndpointTwoFrame Number

    标准请求代码 Standard Request Codes

    下表是标准请求代码,对应着标准设备请求中的bRequest字段。

    bRequestValue
    GET_STATUS0
    CLEAR_FEATURE1
    Reserved for future use2
    SET_FEATURE3
    Reserved for future use4
    SET_ADDRESS5
    GET_DESCRIPTOR6
    SET_DESCRIPTOR7
    GET_CONFIGURATION8
    SET_CONFIGURATION9
    GET_INTERFACE10
    SET_INTERFACE11
    SYNCH_FRAME12
    SET_ENCRYPTION13
    GET_ENCRYPTION14
    SET_HANDSHAKE15
    GET_HANDSHAKE16
    SET_CONNECTION17
    SET_SECURITY_DATA18
    GET_SECURITY_DATA19
    SET_WUSB_DATA20
    LOOPBACK_DATA_WRITE21
    LOOPBACK_DATA_READ22
    SET_INTERFACE_DS23
    SET_SEL48
    SET_ISOCH_DELAY49

    描述符类型 Descriptor Types

    下表是描述符类型,对应着部分标准设备请求中的wValue字段中的Descriptor Type。

    Descriptor TypesValue
    DEVICE1
    CONFIGURATION2
    STRING3
    INTERFACE4
    ENDPOINT5
    Reserved6
    Reserved7
    INTERFACE_POWER8
    OTG9
    DEBUG10
    INTERFACE_ASSOCIATION11
    BOS15
    DEVICE CAPABILITY16
    SUPERSPEED_USB_ENDPOINT_COMPANION48
    SUPERSPEEDPLUS_ISOCHRONOUS_ENDPOINT_COMPANION49

    标准特性选择器 Standard Feature Selectors

    下表是标准特性选择器(feature selector),表中给出了feature selector的接收端(Recipient)和feature selector对应的数值(value),其中数值(value)就是对应着部分标准设备请求中的wValue字段中的Feature selector。

    特性选择器(feature selectors)用于启用或设置特定于设备(device)、接口(interface)或端点(endpoint)的特性(features)。例如远程唤醒(remote wakeup)功能。

    Feature SelectorRecipientValue
    ENDPOINT_HALTEndpoint0
    FUNCTION_SUSPENDInterface0
    DEVICE_REMOTE_WAKEUPDevice1
    TEST_MODEDevice2
    b_hnp_enableDevice3
    a_hnp_supportDevice4
    a_alt_hnp_supportDevice5
    WUSB_DEVICEDevice6
    U1_ENABLEDevice48
    U2_ENABLEDevice49
    LTM_ENABLEDevice50
    B3_NTF_HOST_RELDevice51
    B3_RSP_ENABLEDevice52
    LDM_ENABLEDevice53

    如果向设备发出了不支持或无效的请求(request),设备会在请求的数据阶段(Data stage)或状态阶段(Status stage)返回一个STALL事务包(STALL Transaction Packet)。如果设备在设置阶段(Setup stage)检测到错误,则设备最好在数据或状态阶段中较早的阶段返回一个STALL事务包。接收不支持或无效的请求不会导致控制管道(control pipe)上的停止特性(Halt feature)被设置。如果由于任何原因,设备因错误条件而无法通过其默认控制管道进行通信,则应重置设备以清除该条件并重新启动默认控制管道。


    附录

    USB2.0 Standard Device Requests

    USB2.0所支持的Standard Device Requests会比上面的少,如下表:

    USB2.0 Standard Device Requests

    bmRequestTypebRequestwValuewIndexwLengthData
    00000000B
    00000001B
    00000010B
    CLEAR_FEATUREFeature SelectorZero
    Interface
    Endpoint
    ZeroNone
    10000000BGET_CONFIGURATIONZeroZeroOneConfiguration Value
    10000000BGET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    10000001BGET_INTERFACEZeroInterfaceOneAlternate Interface
    10000000B
    10000001B
    10000010B
    GET_STATUSZeroZero
    Interface
    Endpoint
    TwoDevice, Interface, or Endpoint Status
    00000000BSET_ADDRESSDevice AddressZeroZeroNone
    00000000BSET_CONFIGURATIONConfiguration ValueZeroZeroNone
    00000000BSET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    00000000B
    00000001B
    00000010B
    SET_FEATUREFeature SelectorZero
    Interface
    Endpoint
    ZeroNone
    00000001BSET_INTERFACEAlternate SettingInterfaceZeroNone
    10000010BSYNCH_FRAMEZeroEndpointTwoFrame Number

    USB2.0 Standard Request Codes

    bRequestValue
    GET_STATUS0
    CLEAR_FEATURE1
    Reserved for future use2
    SET_FEATURE3
    Reserved for future use4
    SET_ADDRESS5
    GET_DESCRIPTOR6
    SET_DESCRIPTOR7
    GET_CONFIGURATION8
    SET_CONFIGURATION9
    GET_INTERFACE10
    SET_INTERFACE11
    SYNCH_FRAME12

    USB2.0 Descriptor Types

    Descriptor TypesValue
    DEVICE1
    CONFIGURATION2
    STRING3
    INTERFACE4
    ENDPOINT5
    DEVICE_QUALIFIER6
    OTHER_SPEED_CONFIGURATION7
    INTERFACE_POWER8

    USB2.0 Standard Feature Selectors

    Feature SelectorRecipientValue
    DEVICE_REMOTE_WAKEUPDevice1
    ENDPOINT_HALTEndpoint0
    TEST_MODEDevice2

    USB3.0 Standard Device Requests

    USB3.0 Standard Device Requests

    bmRequestTypebRequestwValuewIndexwLengthData
    00000000B
    00000001B
    00000010B
    CLEAR_FEATUREFeature SelectorZero
    Interface
    Endpoint
    ZeroNone
    10000000BGET_CONFIGURATIONZeroZeroOneConfiguration Value
    10000000BGET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    10000001BGET_INTERFACEZeroInterfaceOneAlternate Interface
    10000000B
    10000001B
    10000010B
    GET_STATUSZeroZero
    Interface
    Endpoint
    TwoDevice, Interface, or Endpoint Status
    00000000BSET_ADDRESSDevice AddressZeroZeroNone
    00000000BSET_CONFIGURATIONConfiguration ValueZeroZeroNone
    00000000BSET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    00000000B
    00000001B
    00000010B
    SET_FEATUREFeature SelectorZero
    Interface
    Endpoint
    Suspend OptionsZeroNone
    00000001BSET_INTERFACEAlternate SettingInterfaceZeroNone
    00000000BSET_ISOCH_DELAYDelay in nsZeroZeroNone
    00000000BSET_SELZeroZeroSixExit Latency Values
    10000010BSYNCH_FRAMEZeroEndpointTwoFrame Number

    USB3.0 Standard Request Codes

    bRequestValue
    GET_STATUS0
    CLEAR_FEATURE1
    Reserved for future use2
    SET_FEATURE3
    Reserved for future use4
    SET_ADDRESS5
    GET_DESCRIPTOR6
    SET_DESCRIPTOR7
    GET_CONFIGURATION8
    SET_CONFIGURATION9
    GET_INTERFACE10
    SET_INTERFACE11
    SYNCH_FRAME12
    SET_SEL48
    SET_ISOCH_DELAY49

    USB3.0 Descriptor Types

    Descriptor TypesValue
    DEVICE1
    CONFIGURATION2
    STRING3
    INTERFACE4
    ENDPOINT5
    Reserved6
    Reserved7
    INTERFACE_POWER8
    OTG9
    DEBUG10
    INTERFACE_ASSOCIATION11
    BOS15
    DEVICE CAPABILITY16
    SUPERSPEED_USB_ENDPOINT_COMPANION48

    USB3.0 Standard Feature Selectors

    Feature SelectorRecipientValue
    ENDPOINT_HALTEndpoint0
    FUNCTION_SUSPENDInterface0
    U1_ENABLEDevice48
    U2_ENABLEDevice49
    LTM_ENABLEDevice50

    USB3.1 & USB3.2 Standard Device Requests

    同正文部分。

    USB1.1 Standard Device Requests

    USB1.1 Standard Device Requests

    bmRequestTypebRequestwValuewIndexwLengthData
    00000000B
    00000001B
    00000010B
    CLEAR_FEATUREFeature SelectorZero
    Interface
    Endpoint
    ZeroNone
    10000000BGET_CONFIGURATIONZeroZeroOneConfiguration Value
    10000000BGET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    10000001BGET_INTERFACEZeroInterfaceOneAlternate Interface
    10000000B
    10000001B
    10000010B
    GET_STATUSZeroZero
    Interface
    Endpoint
    TwoDevice, Interface, or Endpoint Status
    00000000BSET_ADDRESSDevice AddressZeroZeroNone
    00000000BSET_CONFIGURATIONConfiguration ValueZeroZeroNone
    00000000BSET_DESCRIPTORDescriptor Type and Descriptor IndexZero or Language IDDescriptor LengthDescriptor
    00000000B
    00000001B
    00000010B
    SET_FEATUREFeature SelectorZero
    Interface
    Endpoint
    ZeroNone
    00000001BSET_INTERFACEAlternate SettingInterfaceZeroNone
    10000010BSYNCH_FRAMEZeroEndpointTwoFrame Number

    USB1.1 Standard Request Codes

    bRequestValue
    GET_STATUS0
    CLEAR_FEATURE1
    Reserved for future use2
    SET_FEATURE3
    Reserved for future use4
    SET_ADDRESS5
    GET_DESCRIPTOR6
    SET_DESCRIPTOR7
    GET_CONFIGURATION8
    SET_CONFIGURATION9
    GET_INTERFACE10
    SET_INTERFACE11
    SYNCH_FRAME12

    USB1.1 Descriptor Types

    Descriptor TypesValue
    DEVICE1
    CONFIGURATION2
    STRING3
    INTERFACE4
    ENDPOINT5

    USB1.1 Standard Feature Selectors

    Feature SelectorRecipientValue
    DEVICE_REMOTE_WAKEUPDevice1
    ENDPOINT_HALTEndpoint0

    [参考资料]

    Universal Serial Bus Specification Revision 1.1

    Universal Serial Bus Specification Revision 2.0

    Universal Serial Bus 3.0 Specification

    Universal Serial Bus 3.1 Specification

    Universal Serial Bus 3.2 Specification

    USB Complete, 5th Edition


    本文链接:https://blog.csdn.net/u012028275/article/details/114712631

    cs