精华内容
下载资源
问答
  • 2021-04-16 08:49:26

    设备描述符:

    /* USB Standard Device Descriptor */
    const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
      {
        0x12,   /* bLength 该描述符总长度*/
        USB_DEVICE_DESCRIPTOR_TYPE,     /* bDescriptorType 设备描述符类型,这里是设备描述符为0x01*/
        0x00,
        0x02,   /* bcdUSB = 2.00 USB协议版本*/
        0x02,   /* bDeviceClass: CDC这个在下面有详解 */
        0x00,   /* bDeviceSubClass */
        0x00,   /* bDeviceProtocol协议代码由USB-IF分配 */
        0x40,   /* bMaxPacketSize0 端点0的最大包长*/
        0x83,
        0x04,   /* idVendor = 0x0483 厂商ID号由USB-IF分配*/
        0x40,
        0x57,   /* idProduct = 0x7540产品ID号,由厂商自己定义 */
        0x00,
        0x02,   /* bcdDevice = 2.00 */
        1,              /* Index of string descriptor describing manufacturer */
        2,              /* Index of string descriptor describing product */
        3,              /* Index of string descriptor describing the device's serial number */
        0x01    /* bNumConfigurations */
      };
    

    在这里插入图片描述
    在这里插入图片描述
    bDeviceClass这里为什么是0x02(通信设备类的类代码),如果这里不指定为通信类设备,会由于在配置集合中有两个接口,而被系统认为是一个USB复合设备,从而导致设备工作不正常。而且当指定了设备类型为通信设备类后,子类和所使用的协议都必须指定为0,既bDeviceSubClass和bDeviceProtocol为0;

    usb defined class codes部分截图如下:
    在这里插入图片描述
    在这里插入图片描述
    描述符集合:
    代码如下:

    const uint8_t Virtual_Com_Port_ConfigDescriptor[] =
      {
        /*Configuration Descriptor*/
        0x09,   /* bLength: Configuration Descriptor size 配置描述符长度*/
        USB_CONFIGURATION_DESCRIPTOR_TYPE,      /* bDescriptorType: Configuration描述符类型 */
        VIRTUAL_COM_PORT_SIZ_CONFIG_DESC,       /* wTotalLength:no of returned bytes整个配置描述符的总长度 的低字节*/
        0x00, /* wTotalLength:no of returned bytes整个配置描述符的总长度 的高字节*/
        0x02,   /* bNumInterfaces: 2 interface 接口数量*/
        0x01,   /* bConfigurationValue:该配置值,USB支持多个配置,设置配置请求时会发送一个配置值,或与这个配置值相同,表示该配置被激活 */
        0x00,   /* iConfiguration: 该配置的字符串的索引值,为0表示没有字符串 */
        0xC0,   /* bmAttributes: 7bit保留位必须为1,6bit为1表示设备自供电为0设备是总线供电的,5bit表示是否支持远程唤醒,1支持远程唤醒。4bit~0bit保留设置为0 */
        0x32,   /* MaxPower 0 mA 表示设备需要从总线获取的最大电流量,单位为2ma,0x32 * 2ma = 100ma*/
        /*Interface Descriptor*/
        0x09,   /* bLength: Interface Descriptor size */
        USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: 接口描述符类型0x04 */
        /* Interface descriptor type */
        0x00,   /* bInterfaceNumber: 该接口的编号,当一个配置有多个接口时,每个编号都不相同,从0开始依次递增 */
        0x00,   /* bAlternateSetting: 该接口的备用编号,编号规则与 bInterfaceNumber一样,很少用,设置为0*/
        0x01,   /* bNumEndpoints: 该接口所使用的端点数(不包括0端点)如果该字段为0,则表示没有非0端点,只使用默认的控制端点 */
        /* bInterfaceClass,bInterfaceSubClass,bInterfaceProtocol分别是接口所使用的类,子类以及协议,他们的代码由USB协会定义,跟设备描述符中的意义类似。通常在接口中定义设备的功能,而在设备描述符中将类,子类以及协议字段的值设置为0  */
        0x02,   /* bInterfaceClass: 该接口所使用的类,CDC接口类代码为0x02*/
        0x02,   /* bInterfaceSubClass: 该接口所使用的子类,要实现USB转串口,就必须使用Abstract Control Model(抽象控制模型)子类,他的编号为0x02 */
        0x01,   /* bInterfaceProtocol: Common AT commands (通用AT命令协议)*/
        0x00,   /* iInterface: 该接口的字符串索引值,这里没有为0*/
    
    
    	/*在CDC类中,不再有HID描述符和报告描述符,而是功能描述符的类特殊接口描述符,他们主要用来描述接口的功能,功能描述符放在CDC接口(主接口)之后,功能描述符完毕之后就是主接口的端点描述符,再接下来是其它接口以及他们的端点描述符*/
    
    	/*功能描述符*/
    	
        /*Header Functional Descriptor*/
        0x05,   /* bLength: Endpoint Descriptor size 该描述符长度为5字节*/
        0x24,   /* bDescriptorType: CS_INTERFACE 描述符类型为类特殊接口(CS_INTERFACE),编号为0x24*/
        /*抽象控制模型中需要用到的功能描述符有:
        Header Functional Descriptor : 0x00
    	Call Management Functional Descriptor:0x01
    	ACM Functional Descriptor:0x02
    	Union Functional Descriptor:0x06
    	接下来会对这4个功能分别进行描述
    	*/
    	/*Header Functional Descriptor*/
        0x00,   /* bDescriptorSubtype: Header Func Desc(0x00 0x01 0x02 0x06) */
        0x10,   /* bcdCDC: spec release number CDC版本号,低字节在前*/
        0x01,
        /*Call Management Functional Descriptor*/
        0x05,   /* bFunctionLength */
        0x24,   /* bDescriptorType: CS_INTERFACE */
        0x01,   /* bDescriptorSubtype: Call Management Func Desc */
        0x00,   /* bmCapabilities: D0+D1:设备自己不处理调用管理 */
        0x01,   /* bDataInterface: 1 用来做调用管理的数据类接口编号*/
        /*ACM Functional Descriptor*/
        0x04,   /* bFunctionLength */
        0x24,   /* bDescriptorType: CS_INTERFACE */
        0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
        0x02,   /* bmCapabilities */
        /*Union Functional Descriptor*/
        0x05,   /* bFunctionLength */
        0x24,   /* bDescriptorType: CS_INTERFACE */
        0x06,   /* bDescriptorSubtype: Union func desc */
        0x00,   /* bMasterInterface: Communication class interface */
        0x01,   /* bSlaveInterface0: Data Class Interface */
        /*Endpoint 2 Descriptor*/
        0x07,   /* bLength: Endpoint Descriptor size */
        USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint 端点描述符编号为0x05*/
        0x82,   /* bEndpointAddress: (IN2) 7bit表示数据方向,1表示输入,端点为2*/
        0x03,   /* bmAttributes: Interrupt 中断端点:0x03,批量端点:0x02*/
        VIRTUAL_COM_PORT_INT_SIZE,      /* wMaxPacketSize: 该端点的最大包长,端点2的最大包长为64字节*/
        0x00,
        0xFF,   /* bInterval: 端点的查询时间*/
        /*Data class interface descriptor*/
        0x09,   /* bLength: Endpoint Descriptor size */
        USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: 接口描述符的编号为0x04*/
        0x01,   /* bInterfaceNumber: Number of Interface 该接口的编号,这里是第二个接口,所以编号为1*/
        0x00,   /* bAlternateSetting: Alternate setting 该接口的备用编号为0*/
        0x02,   /* bNumEndpoints: Two endpoints used 非0端点的数目,这里使用端点1和端点3两个端点*/
        0x0A,   /* bInterfaceClass: CDC 该接口所使用的类,数据类接口的代码为0x0A*/
        0x00,   /* bInterfaceSubClass: 该接口所使用的子类为0*/
        0x00,   /* bInterfaceProtocol: 该接口所使用的协议为0*/
        0x00,   /* iInterface: 该接口的字符串索引值,这里没有为0*/
        /*Endpoint 3 Descriptor*/
        0x07,   /* bLength: Endpoint Descriptor size */
        USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
        0x03,   /* bEndpointAddress: (OUT3) */
        0x02,   /* bmAttributes: Bulk 批量端点:0x02*/
        VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
        0x00,
        0x00,   /* bInterval: ignore for Bulk transfer 查询端点的时间,这里对批量端点无效*/
        /*Endpoint 1 Descriptor*/
        0x07,   /* bLength: Endpoint Descriptor size */
        USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
        0x81,   /* bEndpointAddress: (IN1) */
        0x02,   /* bmAttributes: Bulk 批量端点,0x02*/
        VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
        0x00,
        0x00    /* bInterval */
      };
    
    /* USB String Descriptors */
    const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID] =
      {
        VIRTUAL_COM_PORT_SIZ_STRING_LANGID,
        USB_STRING_DESCRIPTOR_TYPE,
        0x09,
        0x04 /* LangID = 0x0409: U.S. English */
      };
    
    const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR] =
      {
        VIRTUAL_COM_PORT_SIZ_STRING_VENDOR,     /* Size of Vendor string */
        USB_STRING_DESCRIPTOR_TYPE,             /* bDescriptorType*/
        /* Manufacturer: "STMicroelectronics" */
        'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
        'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
        'c', 0, 's', 0
      };
    
    const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT] =
      {
        VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT,          /* bLength */
        USB_STRING_DESCRIPTOR_TYPE,        /* bDescriptorType */
        /* Product name: "STM32 Virtual COM Port" */
        'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'V', 0, 'i', 0,
        'r', 0, 't', 0, 'u', 0, 'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0,
        'M', 0, ' ', 0, 'P', 0, 'o', 0, 'r', 0, 't', 0, ' ', 0, ' ', 0
      };
    
    uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =
      {
        VIRTUAL_COM_PORT_SIZ_STRING_SERIAL,           /* bLength */
        USB_STRING_DESCRIPTOR_TYPE,                   /* bDescriptorType */
        'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0
      };
    
    更多相关内容
  • USB描述符

    2021-03-29 17:16:33
    2 USB CDC类基础理论知识介绍2.1 USB CDC类、USB2.0标准与PSTN之间的关系 CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下...

    枚举过程

    USB设备枚举一般会经过插入、供电、初始化、分配地址,配置,获取设备描述符、获取配置描述符、获取字符串和配置设备这么几个过程。(第一次获取设备描述符就是为了获取最大包长,在设备描述符的第8字节(因此USB规定端点0的最大包长至少8字节)。在复位之后,才会真正获取完整的设备描述符)
    1616513913468

    枚举过程基本上就是分配地址和获取描述符的过程。那么什么是描述符呢?

     

     

    描述符

    描述符是USB设备用来描述自己属性及用途的,因此设备端必须实现对应的描述符。主机会在枚举过程中根据描述符去确定这是一个什么设备,安装相应的驱动。

    标准的描述符有5种,USB为这些描述符定义了编号:

            0x01.设备描述符:USB设备至少有一个配置描述符,但是主机同一时间只能选择一种配置。

            0x02.配置描述符:USB配置至少有一个接口描述符。

            0x03.接口描述符:USB接口可以至少有一个端点描述符,也可以没有端点描述符。

            0x04.端点描述符

            0x05.字符串描述符

    还有一些不太常用的描述符:
            0x06.限定描述符

            0x07.其它速率配置描述符

            0x08.接口功率描述符

            0x21.HID描述符

            0x22.报表描述符

    USB设备描述符关系

     

    设备描述符

    • bLength : 描述符大小。固定为0x12.
    • bDescriptorType : 描述符类型。固定为0x01.
    • bcdUSB : 本设备能适用于那种协议,如2.0=0200,1.1=0110等。
    • bDeviceClass : 类型代码。当它的值是0时,表示所有接口在配置描述符里,并且所有接口是独立的。当它的值是1到FEH时,表示不同的接口关联的。当它的值是FFH时,它是厂商自己定义的。
    • bDeviceSubClass : 子类型代码。如果bDeviceClass值是0,一定要设置为0。其它情况就跟据USB-IF组织定义的编码。
    • bDeviceProtocol : 协议代码。如果使用USB-IF组织定义的协议,就需要设置这里的值,否则直接设置为0。如果厂商自己定义的可以设置为FFH。
    • bMaxPacketSize0 : 端点0最大包长(只有8,16,32,64有效)。
    • idVendor : 供应商ID。
    • idProduct : 产品ID。由供应商ID和产品ID,就可以让操作系统加载不同的驱动程序。
    • bcdDevice : 设备出产编码。由厂家自行设置。
    • iManufacturer : 厂商描述符字符串索引。索引到对应的字符串描述符。 为0则表示没有。
    • iProduct : :产品描述符字符串索引。为0则表示没有。
    • iSerialNumber : 设备序列号字符串索引。为0则表示没有。
    • bNumConfigurations : 配置描述符个数。

     

    配置描述符

    • bLength : 描述符大小。固定为0x09。
    • bDescriptorType : 描述符类型。固定为0x02。
    • wTotalLength : 此配置返回的配置描述符,接口描述符以及端点描述符的全部大小。
    • bNumInterfaces : 该配置下接口描述符数量。
    • bConfigurationValue : 作为Set Configuration的一个参数选择配置值。
    • iConfiguration : 用于描述该配置字符串描述符的索引。
    • bmAttributes : 供电模式选择。Bit4-0保留,D7:总线供电,D6:自供电,D5:远程唤醒。
    • MaxPower : 总线供电的USB设备的最大消耗电流。以2mA为单位。

     

    接口描述符

    • bLength : 描述符大小。固定为0x09。
    • bDescriptorType : 描述符类型。固定为0x04。
    • bInterfaceNumber: 该接口的编号。
    • bAlternateSetting : 用于为上一个字段选择可供替换的位置。即备用的接口描述符标号。
    • bNumEndpoint : 使用的端点数目。端点0除外。
    • bInterfaceClass : 类型代码(由USB分配)。
    • bInterfaceSubClass : 子类型代码(由USB分配)。
    • bInterfaceProtocol : 协议代码(由USB分配)。
    • iInterface : 字符串描述符的索引

     

    端点描述符

    • bLength : 描述符大小。固定为0x07。
    • bDescriptorType : 描述符类型。固定为0x05。
    • bEndpointAddress : 端点地址。Bit7,方向,1/0:IN/OUT。Bit6-4,保留。BIt3-0:端点号。
    • bmAttributes : 端点属性。同步传输时,bit3-2:00无同步,01异步,10适配,11同步。同步传输时,BIT5:4:00数据端点,01反馈端点,10隐式反馈数据端点,11保留。Bit1-0:00控制,01同步,02批量,03中断。

    • wMaxPacketSize : 支持的最大数据包大小。

    • bInterval : 轮训数据传送端点的时间间隔。对于批量传送和控制传送的端点忽略。对于同步传送的端点,必须为1。对于中断传送的端点,范围为1-255。

     

    字符串描述符

    • bLength : 描述符大小。由整个字符串的长度加上bLength和bDescriptorType的长度决定。
    • bDescriptorType : 描述符类型。固定为0x03。
    • bString[1] : Unicode编码字符串。

     

     

    在USB标准类

    类代码用法描述
    00h设备描述符Use class information in the interface Descriptors
    01h接口描述符音频
    02h设备描述符、接口描述符通讯设备,如电话,moden等等
    03h接口描述符HID设备
    05h接口描述符Physical
    06h接口描述符Image
    07h接口描述符打印机
    08h接口描述符大容量存储
    09h设备描述符Hub USB集线器
    0Ah接口描述符CDC-Data
    0Bh接口描述符Smart Card
    0Dh接口描述符Content Security
    0Eh接口描述符视频
    0Fh接口描述符Personal Healthcare
    10h接口描述符音视频设备
    11h设备描述符Billboard Device Class
    12h接口描述符USB Type-C Bridge Class
    DCh设备描述符、接口描述符Diagnostic Device
    E0h接口描述符无线控制器
    EFh设备描述符、接口描述符Miscellaneous
    FEh接口描述符Application Specific
    FFh设备描述符、接口描述符厂商用自定义

     

    展开全文
  • 3.3.2、RNDIS接口描述符(9字节)   RNDIS 是 Remote Network Driver Interface Specification(远程网络驱动程序接口规范) 的首字母缩写,实际上的作用为 TCP/IP over USB,也即视 USB 设备(如手机)为网卡,是...

    目录

    点击这里查看所有博文

    三、RNDIS网卡

      RNDIS 是 Remote Network Driver Interface Specification(远程网络驱动程序接口规范) 的首字母缩写,实际上的作用为 TCP/IP over USB,也即视 USB 设备(如手机)为网卡,是基于USB实现RNDIS实际上就是TCP/IP over USB,从而使 Windows 可以通过 USB 设备连接网络。

      TCP/IP 协议族,简称为 TCP/IP, 其名称源于其最早的两个核心协议 TCP(Transmission Control Protocol,传输控制协议)和 IP (Internet Protocol,网际协议),它规定了设备连接网络的方式以及数据如何传输的标准。

      8910平台支持RNDIS功能,并且默认处于开启状态。模块只要能联网,正常情况下只要将模块接入电脑(windows、linux)电脑就会识别出来一块网卡,不需要经历ppp拨号那样复杂的流程就可以访问联网。

    3.1、RNDIS接口关联描述符(8字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength8720x08描述符大小为8字节
    bDescriptorType8800x0B接口类型
    bFirstInterface8880x00起始接口号是0
    bInterfaceCount8960x02接口数为2
    bFunctionClass81040xE0该接口属于无线控制器类
    bFunctionSubClass81120x01该接口属于RF控制器子类
    bFunctionProtocol81200x03该接口使用设备线适配器同步流接口协议
    iFunction81280x05接口字符串描述符索引为5

    在这里插入图片描述

    3.2、控制接口

    3.2.1、RNDIS控制接口描述符(9字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength81360x09描述符大小为9字节
    bDescriptorType81440x04接口描述符类型
    bInterfaceNumber81520x00此接口号的索引为0。
    bAlternateSetting81600x00用于选择此接口的备用设置的值为0
    bNumEndpoints81680x01此接口使用的端点数为1(不包括端点0)
    bInterfaceClass81760xE0接口实现无线控制器类
    bInterfaceSubClass81840x01接口实现射频控制器子类
    bInterfaceProtocol81920x03接口使用设备线适配器同步流接口协议
    iInterface82000x03接口字符串描述符索引为3

    在这里插入图片描述

    3.2.2、RNDIS CDC Header功能描述符(5字节)

      Header功能描述符表示功能描述符的开始,其他紧跟的内容就是此设备的功能描述符的内容。bcdCDC表示的是CDC的版本。

    字段长度(位)偏移量(位)十六进制值说明
    bLength82080x05描述符的大小,以字节为单位
    bDescriptorType82160x24描述符类型
    bDescriptorSubType82240x00描述符子类型
    bcdCDC162320x0110USB通信类定义通信规范1.10版

    在这里插入图片描述

    3.2.3、RNDIS CDC Call Management功能描述符(4字节)

      Call Management描述的就是电话相关的东西,AT指令集的支持情况。 bDataInterface表示如有电话时,电话数据内容对应的接口号。

    字段长度(位)偏移量(位)十六进制值说明
    bLength82480x05描述符的大小,以字节为单位
    bDescriptorType82560x24描述符类型
    bDescriptorSubType82640x01描述符子类型
    bmCapabilities82720x00Bit0:设备是否自己处理呼叫管理1
    Bit1:设备是否可以通过数据类接口发送/接收呼叫管理信息0
    bDataInterface82800x01可选用于呼叫管理的数据类接口的接口号

    在这里插入图片描述

    3.2.4、RNDIS CDC ACM功能描述符(4字节)

      ACM(Abstract Control Model),即抽象控制模型,PSTN下,除了ACM模型还有还有DLM(Direct Line Mode), TCM(Telephone Control Model)。

    字段长度(位)偏移量(位)十六进制值说明
    bLength82880x04描述符的大小,以字节为单位
    bDescriptorType82960x24描述符类型
    bDescriptorSubType83040x02描述符子类型
    bmCapabilities83120x00第0位:设备是否支持Set_Comm_Feature、Clear_Comm_Feature和Get_Comm_Feature的组合请求
    第1位:设备是否支持Set_Line_Coding、Set_Control_Line_State、Get_Line_Coding和Serial_State 1的通知组合

    在这里插入图片描述

    3.2.5、RNDIS CDC Union功能描述符(5字节)

      Union描述符就是用来告诉主机端,哪些接口是联合在一起的,对应着一个功能,这个功能需要主机装载对应的驱动来实现,因此,功能与驱动是一对一的关系。这里bControlInterface值为0,则表示接口0为控制接口,bSubBoardinateInterface0值为1,表示接口1为控制接口0的下级接口,即数据接口。在CDC标准中,控制接口是必须的,而数据接口是可选的,因此,数据接口为控制接口的附属。

    字段长度(位)偏移量(位)解码十六进制值说明
    bLength83200x050x05描述符的大小,以字节为单位
    bDescriptorType83280x240x24描述符类型
    bDescriptorSubType83360x060x06描述符子类型
    bControlInterface83440x000x00通信或数据类接口的接口号
    bSubordinateInterface083520x010x01下级接口的接口号

    在这里插入图片描述

    3.2.6、RNDIS 通知端点描述符(7字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength83600x07描述符大小为7字节
    bDescriptorType83680x05端点描述符类型
    bEndpointAddress83760x82这是端点号为2的输入端点
    bmAttributes83840x03类型-传输:中断
    低功耗:无
    Pkt大小调整:无
    wMaxPacketSize163920x0008此终结点的最大数据包大小为8字节。如果是高速,则每帧增加0个事务
    bInterval84080x09轮询间隔值为每9帧。如果高速,每256帧

    在这里插入图片描述

    3.3、数据接口

    3.3.1、RNDIS数据接口描述符(9字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength84160x09描述符大小为9字节
    bDescriptorType84240x04接口描述符类型
    bAlternateSetting84320x01此接口号为1。
    bAlternateSetting84400x00用于选择此接口的备用设置的值为0
    bNumEndpoints84480x02此接口使用的端点数为2(不包括端点0)
    bInterfaceClass84560x0A接口实现数据接口类
    bInterfaceProtocol84720x00接口使用不需要特定于类的协议
    bInterfaceSubClass84640x00子类编码为0
    iInterface84800x04接口字符串描述符索引为4

    在这里插入图片描述

    3.3.2、RNDIS数据输入端点描述符(7字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength84880x07描述符大小为7字节
    bDescriptorType84960x05端点描述符类型
    bEndpointAddress85040x81这是端点号为1的IN端点
    bmAttributes85120x02类型-传输:批量
    包大小调整:否
    wMaxPacketSize165200x0200此终结点的最大数据包大小为512字节。如果是高速,则每帧增加0个事务
    bInterval85360x00轮询间隔值为每0帧。高速未定义

    在这里插入图片描述

    3.3.3、RNDIS数据输出端点描述符(7字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength85440x07描述符大小为7字节
    bDescriptorType85520x05端点描述符类型
    bEndpointAddress85600x01这是端点号为1的输出端点
    bmAttributes85680x02类型-传输:批量
    包大小调整:否
    wMaxPacketSize165760x0200此终结点的最大数据包大小为512字节。如果是高速,则每帧增加0个事务
    bInterval85920x00轮询间隔值为每0帧。

    在这里插入图片描述

    展开全文
  • 五、ECM网卡   以太网控制模型...ECM是标准的,隶属USB协议,当然是usb封装的TCP协议,数据接口则用于在USB总线上交换USB数据包,这些USB数以的包封装了完整的以太网包。   8910平台支持ECM功能,默认处于关

    目录

    点击这里查看所有博文

    五、ECM网卡

      以太网控制模型(Ethernet Networking Control Model) 用于在设备和主机之间传输以太网数据包。
      在操作系统看来,CDC ECM设备就是一个虚拟以太网卡,包含标准网卡需要的MAC地址和IP地址。
      CDC ECM设备通常是一个以太网卡,用于连接LAN或者是WLAN。ECM是标准的,隶属USB协议,当然是usb封装的TCP协议,数据接口则用于在USB总线上交换USB数据包,这些USB数以的包封装了完整的以太网包。
      8910平台支持ECM功能,默认处于关闭状态。需要发送AT+SETUSB=2设置USB网卡的工作模式。命令发送完成之后可以断电保持,重启有效。

    在这里插入图片描述

      正常情况下只要将模块接入运行linux系统,电脑就会识别出来一块网卡。windows系统上默认不支持ECM网卡,需要额外安装驱动才能使用。

    5.1、ECM接口关联描述符(8字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength8720x08描述符大小为8字节
    bDescriptorType8800x0B接口类型:INTERFACE_ASSOCIATION
    bFirstInterface8880x00接口关联的第一个接口号是0
    bInterfaceCount8960x02接口关联的连续接口数为2
    bFunctionClass81040x02接口属于通信设备/接口类
    bFunctionSubClass81120x06接口属于以太网网络控制模型子类
    bFunctionProtocol81200x00接口使用不需要特定于类的协议
    iFunction81280x03接口字符串描述符索引为3

    在这里插入图片描述

    5.2、控制接口

    5.2.1、ECM控制接口描述符(9字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength81360x09描述符大小为9字节
    bDescriptorType81440x04接口描述符类型
    bInterfaceNumber81520x00此接口号的索引为0。
    bAlternateSetting81600x00用于选择此接口的备用设置的值为0
    bNumEndpoints81680x01此接口使用的端点数为1(不包括端点0)
    bInterfaceClass81760x02接口实现通信设备/接口类
    bInterfaceSubClass81840x06接口实现以太网组网控制模型子类
    bInterfaceProtocol81920x00接口使用不需要特定于类的协议
    iInterface82000x05接口字符串描述符索引为5

    在这里插入图片描述

    5.2.2、ECM CDC Header功能描述符(5字节)

      Header功能描述符表示功能描述符的开始,其他紧跟的内容就是此设备的功能描述符的内容。bcdCDC表示的是CDC的版本。

    字段长度(位)偏移量(位)十六进制值说明
    bLength82080x05描述符的大小,以字节为单位
    bDescriptorType82160x24描述符类型
    bDescriptorSubType82240x00描述符子类型
    bcdCDC162320x0110USB通信类定义通信规范1.10版

    在这里插入图片描述

    5.2.3、ECM CDC Union功能描述符(5字节)

      Union描述符就是用来告诉主机端,哪些接口是联合在一起的,对应着一个功能,这个功能需要主机装载对应的驱动来实现,因此,功能与驱动是一对一的关系。这里bControlInterface值为0,则表示接口0为控制接口,bSubBoardinateInterface0值为1,表示接口1为控制接口0的下级接口,即数据接口。在CDC标准中,控制接口是必须的,而数据接口是可选的,因此,数据接口为控制接口的附属。

    字段长度(位)偏移量(位)十六进制值说明
    bLength82480x05描述符的大小,以字节为单位
    bDescriptorType82560x24描述符类型
    bDescriptorSubType82640x06描述符子类型
    bControlInterface82720x00通信或数据类接口的接口号
    bSubordinateInterface082800x01下级接口的接口号

    在这里插入图片描述

    5.2.4、ECM CDC ethernet功能描述符(13字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength82880x0D描述符的大小,以字节为单位
    bDescriptorType82960x24描述符类型:CS_INTERFACE
    bDescriptorSubType83040x0F功能描述符子类型
    iMACAddress83120x06字符串描述符索引
    bmEthernetStatistics322960x00060F24Bit 0: XMIT_OK 0
    Bit 1: RVC_OK 0
    Bit 2: XMIT_ERROR 0
    Bit 3: RCV_ERROR 0
    Bit 4: RCV_NO_BUFFER 0
    Bit 5: DIRECTED_BYTES_XMIT 0
    Bit 6: DIRECTED_FRAMES_XMIT 0
    Bit 7: MULTICAST_BYTES_XMIT 0
    Bit 8: MULTICAST_FRAMES_XMIT 0
    Bit 9: BROADCAST_BYTES_XMIT 0
    wMaxSegmentSize163520x05EA以太网设备能够支持的最大段大小
    wNumberMCFilters163680x0000多播筛选器位图
    bNumberPowerFilters83840x00包含可用于唤醒主机的模式筛选器数

    在这里插入图片描述

    5.2.5、ECM通知端点描述符(7字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength83920x07描述符大小为7字节
    bDescriptorType84000x05端点描述符类型
    bEndpointAddress84080x81这是端点号为1的输入端点
    bmAttributes84160x03类型-传输:中断
    低功耗:无
    Pkt大小调整:无
    wMaxPacketSize164240x0010此终结点的最大数据包大小为16字节。如果是高速,则每帧增加0个事务
    bInterval84400x20轮询间隔值为每32帧。高速未定义

    在这里插入图片描述

    5.3、数据接口

    5.3.1、ECM数据接口描述符alt0(9字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength84480x09描述符大小为9字节
    bDescriptorType84560x04接口描述符类型
    bAlternateSetting84640x01此接口号为1。
    bAlternateSetting84720x00用于选择此接口的备用设置的值为0
    bNumEndpoints84800x00此接口使用的端点数为0(不包括端点0)
    bInterfaceClass84880x0A接口实现数据接口类
    bInterfaceProtocol85040x00接口使用不需要特定于类的协议
    bInterfaceSubClass84960x00子类编码为0
    iInterface85120x00接口字符串描述符索引为0

    在这里插入图片描述

    5.3.2、ECM数据接口描述符alt1(9字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength85200x09描述符大小为9字节
    bDescriptorType85280x04接口描述符类型
    bAlternateSetting85360x01此接口号为1。
    bAlternateSetting85440x01用于选择此接口的备用设置的值为1
    bNumEndpoints85520x02此接口使用的端点数为2(不包括端点0)
    bInterfaceClass85600x0A接口实现数据接口类
    bInterfaceProtocol85760x00接口使用不需要特定于类的协议
    bInterfaceSubClass85680x00子类编码为0
    iInterface85840x04接口字符串描述符索引为4

    在这里插入图片描述

    5.3.3、ECM数据输入端点描述符(7字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength85920x07描述符大小为7字节
    bDescriptorType86000x05端点描述符类型
    bEndpointAddress86080x82这是端点号为2的IN端点
    bmAttributes86160x02类型-传输:批量
    包大小调整:否
    wMaxPacketSize166240x0200此终结点的最大数据包大小为512字节。如果是高速,则每帧增加0个事务
    bInterval86400x00轮询间隔值为每0帧。高速未定义

    在这里插入图片描述

    5.3.4、ECM数据输出端点描述符(7字节)

    字段长度(位)偏移量(位)十六进制值说明
    bLength86480x07描述符大小为7字节
    bDescriptorType86560x05端点描述符类型
    bEndpointAddress86640x01这是端点号为1的输出端点
    bmAttributes86720x02类型-传输:批量
    包大小调整:否
    wMaxPacketSize166800x0200此终结点的最大数据包大小为512字节。如果是高速,则每帧增加0个事务
    bInterval86960x00轮询间隔值为每0帧。

    在这里插入图片描述

    展开全文
  • USB设备描述符总结

    2019-03-01 10:00:49
     Union  ......  CDC_Notification_EP_Desc(Interrupt) CDC_DCI_InterfaceDesc  Data_EP_Desc(Bulk) ---------------------    Video类: DevDesc  ConfigDesc  IAD  VideoControl I/F ...
  • USB设备描述符

    2014-07-25 18:36:00
    /* USB Standard Device Descriptor */ const u8 Virtual_Com_Port_DeviceDescriptor[] =... { 0x12, /* bLength */ //USB设备描述符的总长度固定为18个字节,因此为12H USB_DEVICE_DESCRIPTOR_TYPE, /* bDesc...
  • a) 设备描述符中修改设备的类和PID,VID const uint8_t usbDeviceDescriptor[USB_DEVICE_DESC_LEN] = { USB_DEVICE_DESC_LEN, /*bLength */ USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/ 0x00, /*bcdUSB */...
  • 一文帮你搞懂 Android 文件描述符

    千次阅读 2021-03-01 16:19:27
    介绍文件描述符的概念以及工作原理,并通过源码了解 Android 中常见的 FD 泄漏。 一、什么是文件描述符? 文件描述符是在 Linux 文件系统的被使用,由于Android基 于Linux系统,所以Android也继承了文件描述符系统...
  • 理论: 对于USB接口的设备,现在越来越多了。本篇我们就通过获取一个USB扫描仪设备中的序列号,来介绍如何获取usb设备的一些硬件...对于usb设备都是采用HCD0,HCD1,HCD2,HCD3等符号描述的。如下图: 因此,有了这个...
  • Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。它的作用就是通过如问答节中的命令**...
  • USB CDC虚拟串口复合设备

    千次阅读 2021-11-22 16:40:37
    必要的有CM功能描述符和接口绑定描述符(IAD/Union) 在我电脑上测试控制接口的中断端点也可以不需要,及控制接口端点数量可以为0 1.1、ACM功能描述符: 在虚拟串口中,控制接口需要处理ACM 功能描述符。如下是...
  • 理论: 对于USB接口的设备,现在越来越多了。本篇我们就通过获取一个USB扫描仪设备中的序列号...对于usb设备都是采用HCD0,HCD1,HCD2,HCD3等符号描述的。如下图: 因此,有了这个名字,我们就可以使用CreateFile来
  • uvc摄像头代码解析之描述符

    千次阅读 2017-11-28 14:39:38
    //–>5 uvc解析usb视频类控制描述符    uvc_trace(UVC_TRACE_PROBE,  ”Unable to parse UVC descriptors.\n” );    goto  error;   }   uvc_printk(KERN_INFO,  ”Found UVC %u.%02x device %...
  • 每个用户每次打开一个文件,就产生一个文件描述符,多次打开就产生多个文件描述符,一一对应,不管是同一个用户,还是多个用户。该 文件描述符就记录了当前打开的文件的偏移量等数据 。所以 一个i节点可以有0个或多...
  • STM32配置USB组合设备

    千次阅读 2020-11-11 16:48:11
    有个比喻描述的特别好 说到USB复合设备就不得不说说USB的枚举过程,也就是USB插入后主机的一系列动作。当然我们这里是不会用很专业的术语来说明的,相信如果你是开发者,必然已经了如指掌,如果你是使用者,更是不...
  • 对于usb设备都是采用HCD0,HCD1,HCD2,HCD3等符号描述的。如下图: 因此,有了这个名字,我们就可以使用CreateFile来打开usb设备。然后使用DeviceIoControl函数与usb设备通讯了。HCD是host controller driv
  • USB枚举过程

    千次阅读 2018-11-21 22:06:08
    本人在学习STM32 USB使用的过程中,收集网上的资料,阅读别人博文,拼凑零碎知识,边看边学,记录下学习过程。推荐看《圈圈教你玩USB》。 枚举前的工作 根据STM32的USB库做移植,介绍枚举过程,SetSystem函数是一些...
  • 网上找不到HID+CDC寄存器版本的...1.将usbd_hid_core.c和usbd_hid_cdc_wrapper.c和他们的头文件加入进去,这两个文件可以在例程自带的USB库中找到 2.将__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DE.
  • Linux USB基础之虚拟串口枚举流程(三) 1 USB检测与枚举过程 1.1 USB插拔检测 USB集线器的每个下游端口的D+和D-上,分别接了一个15K的下拉电阻到低。当集线器的端口悬空(即没有设备插入)时,输入端就被此两个下拉...
  • STM32 USB如何配置多个CDC设备—5个CDC设备

    千次阅读 热门讨论 2021-01-18 20:46:09
    title: STM32 USB如何配置多个CDC设备—5个CDC设备, date: 2021/1/18 20:10:25 +8, STM32 USB如何配置多个CDC设备—5个CDC设备 1. 背景 由于项需求,在STM32F072中需实现5个CDC设备,折腾了很久分享出来,希望能帮助...
  • USB复合设备介绍USB复合设备与组合设备区别USB描述符修改功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、...
  • USB 协议整理 八:STM32官方USB

    千次阅读 2022-03-10 20:10:43
    本章摘取《STM32 USB-FS-Device development kit》文档。...STM32 USB-FS-Device开发套件是一个完整的固件和软件包,包括所有USB传输类型(控制、中断、批量和同步)的示例和例程。 本文档介绍了STM32 USB-FS-D
  • STM32 USB相关知识扫盲

    千次阅读 多人点赞 2021-04-23 14:03:42
    STM32 USB相关知识扫盲 1、基础知识 STM32基础型(F1系列)所带的USB是全速。 2、电气属性 USB的通信都是由主机发起的,这一点与IIC协议是类似的。 2.1 数据线 USB使用差分传输模式,有两条数据线,分别是: USB...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,299
精华内容 519
关键字:

usb union描述符