关于接口描述符中bAlternateSetting的使用 | 重归混沌的BLOG

关于接口描述符中bAlternateSetting的使用

        今天看CY7C68013开发手册时,突然想起,在USB接口描述符中有一个bAlternateSetting字段一直没用过,花了一上午时间也没找到相关资料!就在快中午时突然看到一句话:“bAlternateSetting用于在同一个接口中的多个描述符中进行切换". 一下子感觉抓住要点了。经过百度及查阅USB specification2.0得出如下结论:
       在USB协议中同一个配置中的不同接口不能共用端点。
       同一个接口可以有多个接口描述符,用bAlternateSetting来识别.
       同一个接口的不同接口描述符,可以拥有相同的端点。
       同一个接口中的不同描述符可以像其他接口描述符一样写在配置描述符里
       例如:我们在有些情况下需要对某个接口描述符中的某个端点的传输类型进行更改,那么我们就需要使用这种方式来达到我们的要求!
       如果事实真的这样的,那么上位机驱动在查找接口描述符中必然 要有一个参数bAlternateSetting来识别相同接口的不同描述符,我们来看一下

VOID 

  UsbBuildSelectInterfaceRequest(

    IN PURB  Urb,
    IN USHORT  Length,

    IN USBD_CONFIGURATION_HANDLE  ConfigurationHandle,

    IN UCHAR  InterfaceNumber,

    IN UCHAR  AlternateSetting

    );

PUSB_INTERFACE_DESCRIPTOR
  USBD_ParseConfigurationDescriptorEx(
    IN PUSB_CONFIGURATION_DESCRIPTOR  ConfigurationDescriptor,
    IN PVOID  StartPosition,
    IN LONG  InterfaceNumber,
    IN LONG  AlternateSetting,
    IN LONG  InterfaceClass,
    IN LONG  InterfaceSubClass,
    IN LONG  InterfaceProtocol
    );
这两个函数中都有一个共同的参数:AlternateSetting!
至此,基本可以说明得出的结论是正确的!


      
        
      



发表评论