打印

可以同时在一个USB实现虚拟串口和移动硬盘吗

[复制链接]
13498|53
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seawwh|  楼主 | 2009-9-29 02:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用STM32 CPU,在一个USB端口上可以分别实现虚拟串口和移动硬盘的功能。
请问可以合并2个功能到一起吗,即插上USB线之后,主机同时发现一个虚拟串口和一个移动硬盘。

  谢谢!
沙发
QuakeGod| | 2009-9-29 03:15 | 只看该作者
可以做混合设备吧,偶也在疑惑中。

使用特权

评论回复
板凳
Simon21ic| | 2009-9-29 12:48 | 只看该作者
可以,很简单

使用特权

评论回复
地板
seawwh|  楼主 | 2009-9-29 16:03 | 只看该作者
请教3楼如何完成这个项目,还需要自己写Windows下的驱动吗?
谢谢!

使用特权

评论回复
5
Simon21ic| | 2009-9-30 03:34 | 只看该作者
本帖最后由 Simon21ic 于 2009-9-30 03:37 编辑

CDC需要驱动(只是一个inf文件),MSC不需要。
http://blog.**/SimonQian/244655/message.aspx

使用特权

评论回复
6
bigarmer| | 2009-9-30 08:52 | 只看该作者
这样一来就可以做免驱动的虚拟串口了,其实INF放到U盘里面了。

使用特权

评论回复
7
pb486| | 2009-9-30 11:00 | 只看该作者
有没有参考的源码啊?

使用特权

评论回复
8
Simon21ic| | 2009-9-30 23:27 | 只看该作者
ST有CDC例程,也有MSC例程,XX在一起就可以了。。。。。。

使用特权

评论回复
9
vigia| | 2009-10-2 21:40 | 只看该作者
改一下descriptor,枚举一个具有两个interface的USB复合设备。

网上能找到复合设备的descriptor的例子吧

使用特权

评论回复
10
itelectron| | 2009-10-3 11:15 | 只看该作者
不知道 是 不 是  通过 不同  的  端点 来 实现  多个设备的

使用特权

评论回复
11
seawwh|  楼主 | 2009-10-3 12:01 | 只看该作者
下面是ST提供的 Mass 和 CDC 的设备描述符,我做了合并,不知是否正确?

/***************** Mass **************************/
const uint8_t MASS_DeviceDescriptor[MASS_SIZ_DEVICE_DESC] =
  {
    0x12,   /* bLength  */
    0x01,   /* bDescriptorType */
    0x00,   /* bcdUSB, version 2.00 */
    0x02,
    0x00,   /* bDeviceClass : each interface define the device class */
    0x00,   /* bDeviceSubClass */
    0x00,   /* bDeviceProtocol */
    0x40,   /* bMaxPacketSize0 0x40 = 64 */
    0x83,   /* idVendor     (0483) */
    0x04,
    0x20,   /* idProduct */
    0x57,
    0x00,   /* bcdDevice 2.00*/
    0x02,
    1,      /* index of string Manufacturer  */
    2,      /* index of string descriptor of product*/
    3,            
    0x01    /*bNumConfigurations */
  };


/***************** VCom Port **************************/
const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
  {
    0x12,   /* bLength */
    0x01,   /* bDescriptorType */
    0x00,
    0x02,   /* bcdUSB = 2.00 */
    0x02,   /* bDeviceClass: CDC */
    0x00,   /* bDeviceSubClass */
    0x00,   /* bDeviceProtocol */
    0x40,   /* bMaxPacketSize0 */
    0x83,
    0x04,   /* idVendor = 0x0483 */
    0x40,
    0x57,   /* idProduct = 0x5740 */
    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 */
  };

/***************** VCom + Mass **************************/
const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
  {
    0x12,   /* bLength */
    0x01,   /* bDescriptorType */
    0x00,
    0x02,   /* bcdUSB = 2.00 */
    0x00,   /* bDeviceClass */
    0x00,   /* bDeviceSubClass */
    0x00,   /* bDeviceProtocol */
    0x40,   /* bMaxPacketSize0 */
    0x83,
    0x04,   /* idVendor = 0x0483 */
    0x40,
    0x57,   /* idProduct = 0x5740 */
    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 */
  };

问题:
1. bDeviceClass,bDeviceSubClass,bDeviceProtocol 应该如何设置? 在Simon21ic提供
的例子里面,它们分别如下设置,请教一下这样设置的含义?
        0xEF,        // bDeviceClass
        0x02,        // bDeviceSubClass
        0x01,        // bDeviceProtocol
   有的**说应该设为0x00,0x00,0x00,其具体内容在Interface Descriptor中再表述;

2. idVendor=0x0483,idProduct=0x5740 是会导致加载 stmcdc.inf 驱动吗?
3. 我分别测试了一下ST和IAR提供的Virtual Com 的例子,发现数据传输最大为 50-60 KBytes/s
   (W2K下)不知是否正常?会不会是在Win下面只能如此了?


  以上问题比较菜,请Simon21ic和vigia帮忙看一下。

使用特权

评论回复
12
vigia| | 2009-10-3 12:41 | 只看该作者
1, DeviceDescriptor里不要设置设备的类,因为你要做复合设备,这个设备带有两个interface,每个interface分别实现一个USB类。
所以用:
0x00,   /* bDeviceClass : each interface define the device class */
0x00,   /* bDeviceSubClass */
0x00,   /* bDeviceProtocol */

重点要改的是Configuration Descriptor
你可以看看注释,把interface的数目改成2个,然后先说明一个VCD的interface descriptor,紧跟是这个interface所使用的端点descriptor,然后再说明一个MASS的interface descriptor,紧跟这个interface的端点descriptor。两个interface要使用不同的端点号来完成。

2, PID和VID要用你自己定义的

3, 这个VCD的速度我还真没有测过,我自己改了一个,挺好使的,等上班了我测测速度。

使用特权

评论回复
13
Simon21ic| | 2009-10-4 09:59 | 只看该作者
本帖最后由 Simon21ic 于 2009-10-4 10:11 编辑

1. 要看你实现的方法
2. 设备驱动安装的时候可以选择的,MSC的驱动会自动安装。
3. 偶米测试过,偶这里自己实现的VCOM,在921600的速度下,短接RXD和TXD,速度大概是50+KB/s。另外,据说ST的代码很垃圾。
东西是要你自己搞定的,再提供一些资料吧:
http://blog.**/SimonQian/192173/message.aspx
http://blog.**/SimonQian/191568/message.aspx

使用特权

评论回复
14
seawwh|  楼主 | 2009-10-4 11:22 | 只看该作者
本帖最后由 seawwh 于 2009-10-4 11:23 编辑

昨天实验的结果: 使用ST的virtual Com代码为基础, 试图一点一点的修改,首先仅修改了Virtual_Com_Port_DeviceDescriptor 和 Virtual_Com_Port_ConfigDescriptor 部分,是按照 Simon21ic 的模式修改的(没有添加Mass部分的任何代码),结果是:
     在XP下,可以自动添加 Virtual Com; 在W2K下, PC机立即重启! 有关代码见附件 读了 Simon21ic 提供的网页,很受启发,但是还是有些疑问:
1. 使用composite device 模式做, Mass 需要1个接口,CDC需要2个接口, 一定需要使用 IAD 表述吗?
2. 使用IAD 表述可在Win2K 下运行吗?
3. 如果Mass 需要1个接口,CDC需要1个接口, 那么还需要IAD 表述吗?
4. 我看了一段NXP提供的双串口的实现代码,其中使用了两个interface,每个interface有3个EndP, 其中没有使用IAD 表述,Why ?
5. 如果一个应用只有一个Interface 和 2个EndP 那么,可以将 EndP定义到 4,5 而 1,2,3EndP空闲吗? 我想改造ST 的Mass 代码,将其中的 EndP 改为 1Tx,1Rx 可以,但是改到 4Tx,4Rx则不行?

USB.rar

2.35 KB

使用特权

评论回复
15
Simon21ic| | 2009-10-4 14:14 | 只看该作者
本帖最后由 Simon21ic 于 2009-10-4 14:51 编辑

CDC可以用一种只有一个interface(2个Endpoint)的方式实现,XP下可以识别。请仔细看网页。
如果每个设备只有一个接口的话,可以简单实用组合设备的方式,你可以自己测试。
CDC设备的通信类接口的Union Functional Descriptor里本来就已经指定的2个接口的接口号。所以不排除可以直接使用组合设备的方式实现。当然,这个就需要你自己测试了。
你把ST的Mass代码都看一下就知道了。
W2K的话,我这里没有条件测试了。

使用特权

评论回复
16
seawwh|  楼主 | 2009-10-5 13:18 | 只看该作者
Thank Simon21ic's help

今天的试验情况如下:

1. 按照Simon21ic的提示使用单个接口(3 ENDP)构造CDC VCOM 是可以的, 还没有试验单个接口(2 ENDP)的模式。
2. 以ST 的Mass Sample 为基础,逐步添加CDC VCOM 的代码,可以看到 Mass盘但是VCOM没有出现。
   端点安排如下:

   Interface 1
      Mass  (EndP1Tx,EndP1Rx)
   Interface 2
      VCom  (EndP2 Intrrupt, EndP3Rx, EndP3Tx)
   以上的两个Interface 单独试验都是Ok 的。

3. 运行的环境:万利的3210E板, IAR 5.3, Win2K
4. 关键想知道如何安排运行断点来发现问题?

下面是描述:

//MASS_SIZ_DEVICE_DESC=81

const uint8_t MASS_VCOM_DeviceDescriptor[MASS_SIZ_DEVICE_DESC] =  {
    0x12,   // bLength
    0x01,   // bDescriptorType
    0x00,   // bcdUSB, version 2.00
    0x02,
    0x00,   // bDeviceClass : each interface define the device class
    0x00,   // bDeviceSubClass
    0x00,   // bDeviceProtocol
    0x40,   // bMaxPacketSize0 0x40 = 64
    0x83,   // idVendor     (0483)
    0x04,
    0x20,   // idProduct
    0x57,
    0x00,   // bcdDevice 2.00*/
    0x02,
    1,      // index of string Manufacturer
    2,      // index of string descriptor of product*/
    3,      //
    0x01    //bNumConfigurations
};

const uint8_t MASS_ConfigDescriptor[MASS_SIZ_CONFIG_DESC] =  {

    0x09,   // bLength: Configuation Descriptor size
    0x02,   // bDescriptorType: Configuration
    MASS_SIZ_CONFIG_DESC,
    0x00,
    0x02,   // bNumInterfaces: 2 interface
    0x01,   // bConfigurationValue:
    0x00,   // iConfiguration:
    0xC0,   // bmAttributes:
    0x32,   // MaxPower 100 mA

    /******************** Descriptor of Mass Storage interface ********************/
    0x09,   // bLength: Interface Descriptor size
    0x04,   // bDescriptorType:
    0x00,   // bInterfaceNumber: Number of Interface
    0x00,   // bAlternateSetting: Alternate setting
    0x02,   // bNumEndpoints*/
    0x08,   // bInterfaceClass: MASS STORAGE Class
    0x06,   // bInterfaceSubClass : SCSI transparent*/
    0x50,   // nInterfaceProtocol
    4,      // iInterface:

    0x07,   // Endpoint descriptor length = 7
    0x05,   // Endpoint descriptor type
    0x81,   // Endpoint address (IN, address 1)
    0x02,   // Bulk endpoint type
    0x40,   // Maximum packet size (64 bytes)
    0x00,
    0x00,   // Polling interval in milliseconds

    0x07,   // Endpoint descriptor length = 7
    0x05,   // Endpoint descriptor type
    0x01,   // Endpoint address (OUT, address 2)
    0x02,   // Bulk endpoint type
    0x40,   // Maximum packet size (64 bytes)
    0x00,
    0x00,   // Polling interval in milliseconds
      
            //Interface Descriptor
    0x09,   // bLength: Interface Descriptor size
    0x04,   // bDescriptorType: Interface
    0x01,   // bInterfaceNumber: Number of Interface
    0x00,   // bAlternateSetting: Alternate setting
    0x03,   // bNumEndpoints: 3 endpoints used
    0x02,   // bInterfaceClass: Communication Interface Class
    0x02,   // bInterfaceSubClass: Abstract Control Model
    0x01,   // bInterfaceProtocol: Common AT commands
    0x00,   // iInterface:
    //Header Functional Descriptor
    0x05,   // bLength: Endpoint Descriptor size
    0x24,   // bDescriptorType: CS_INTERFACE
    0x00,   // bDescriptorSubtype: Header Func Desc
    0x10,   // bcdCDC: spec release number
    0x01,
    //Call Managment 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
    0x05,    // bDescriptorType: Endpoint
    0x82,   // bEndpointAddress: (IN2)
    0x03,   // bmAttributes: Interrupt
    0x08,   // wMaxPacketSize:
    0x00,
    0xFF,   // bInterval:
    //Endpoint 3 Descriptor
    0x07,   // bLength: Endpoint Descriptor size
    0x05,   // bDescriptorType: Endpoint
    0x03,   // bEndpointAddress: (OUT3)
    0x02,   // bmAttributes: Bulk
    0x40,   // wMaxPacketSize:
    0x00,
    0x00,   // bInterval: ignore for Bulk transfer
    //Endpoint 3 Descriptor
    0x07,   // bLength: Endpoint Descriptor size
    0x05,   // bDescriptorType: Endpoint
    0x83,   // bEndpointAddress: (IN3)  
    0x02,   // bmAttributes: Bulk
    0x40,   // wMaxPacketSize:
    0x00,
    0x00    // bInterval      
};

使用特权

评论回复
17
行走的飞鸟| | 2009-10-5 17:59 | 只看该作者
设备的PID或VID要是新的,否则电脑会加载旧的驱动
USB枚举过程不好加断点。加了断点后,电脑如果太长时间收不到完整的枚举设备,可能会reset USB,重新枚举。打印试试

使用特权

评论回复
18
seawwh|  楼主 | 2009-10-5 20:03 | 只看该作者
根据楼上飞鸟的提示,作了相关的实验:
1. 原来ST Mass Demo代码使用的是 VID/PID=0483/5720
   原来ST VCom Demo代码使用的是 VID/PID=0483/5740
   stmcdc.inf 文件中间的 VID/PID=0483/5740
   以上的两个Demo都可以正常运行;
2. 合并以后的复合设备的Device 描述如果按照  VID/PID=0483/5720 设定,那么 WinXP只是正常出现Mass盘,
   如果按照  VID/PID=0483/5740 设定,那么WinXP只是正常出现VCom,以上都不会出现新的硬件提示。
   
   如果按照  VID/PID=0483/5730 设定,那么WinXP正常出现Mass盘,并且出现一个新的硬件提示:"STM32 Mass Storage",
   找了一个 ST的安装文件 stcdc.inf 将其中原有的 VID/PID=0483/5740改为 VID/PID=0483/5730 然后令WinXP去安装,得到提示是:“由于向导无法找到需要的软件因此无法安装该硬件”
   设备管理器中出现下列项目:
     磁盘驱动器下:正常的Mass设备;
     其他设备下:  带黄色问号的 "STM32 Mass Storage"
     通用串行总线控制器下:USB Composite Device 和 USB Mass Storage Device
   感觉到 VCom 已经出现,但是不知如何安装驱动?
   原来的ST的VCom 驱动是通过一个VCPDriver_V1.1_Setup.exe 来安装的。
   寻求各位的帮助,谢谢!

ABC.GIF (29.49 KB )

ABC.GIF

使用特权

评论回复
19
seawwh|  楼主 | 2009-10-9 22:50 | 只看该作者
终于基本解决了单USB下Mass+VCom的实现,经简单测试,SD卡文件可以读出,VCom可以双向通信。但是还存在下列问题:

1. 在XP下枚举OK, 在Win2K下 VCom带有问号。
2. CDC下面定义了3个ENDP,但其中有一个作为Comm的ENDP没有实际使用,那么这个ENDP可不可以不占用收发缓存呢?这样可以节省一些USB缓存.
3. 当将CDC协议的双Interface 改为1个Interface, CDC协议描述部分,需要做哪些修改?
4. 当将CDC协议单Interface bInterfaceNumber=1的时候, CDC协议描述部分,需要做哪些修改?
5. ST的例子中USB缓冲分配没有从0开始,Why ? 见下面的2行。
  #define ENDP0_RXADDR        (0x18)
  #define ENDP0_TXADDR        (0x58)

使用特权

评论回复
20
ggxjz| | 2009-10-10 09:40 | 只看该作者
我做了个HID和CDC的项目,给你参考一下
const uint8_t CDCHID_ConfigDescriptor[CDCHID_SIZ_CONFIG_DESC] =
  {
    0x09, /* bLength: Configuation Descriptor size */
    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
    CDCHID_SIZ_CONFIG_DESC,
    /* wTotalLength: Bytes returned */
    0x00,
    0x03,         /* bNumInterfaces: 1 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing
                                 the configuration*/
    0xC0,         /* bmAttributes: Bus powered */
    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */
                /* 09 */

                //USB CDC descriptor
                /*USB Interface Association Descriptor */
    0x08,
    USB_INTERFACE_ASSOCIATION_TYPE,
    0x00,// EPs used in CDC/ACM Function.
    0x02,
    0x02,// Interface class code for a CDC communication class interface.
    0x02,// Interface subclass code for an Abstract Control Model interface descriptor.
    0x00,// implemenent any particular protocol.
    0x00,// No string descriptor for this interface
                /* 17 */
               
    /*Interface Descriptor*/
    0x09,   /* bLength: Interface Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
    /* Interface descriptor type */
    0x00,   /* bInterfaceNumber: Number of Interface */
    0x00,   /* bAlternateSetting: Alternate setting */
    0x01,   /* bNumEndpoints: One endpoints used */
    0x02,   /* bInterfaceClass: Communication Interface Class */
    0x02,   /* bInterfaceSubClass: Abstract Control Model */
    0x00,   /* bInterfaceProtocol: Common AT commands */
    0x00,   /* iInterface: */
    /* 26 */
               
    /*Header Functional Descriptor*/
    0x05,   /* bLength: Endpoint Descriptor size */
    0x24,   /* bDescriptorType: CS_INTERFACE */
    0x00,   /* bDescriptorSubtype: Header Func Desc */
    0x10,   /* bcdCDC: spec release number */
    0x01,
    /* 31 */
               
    /*Call Managment Functional Descriptor*/
    0x05,   /* bFunctionLength */
    0x24,   /* bDescriptorType: CS_INTERFACE */
    0x01,   /* bDescriptorSubtype: Call Management Func Desc */
    0x00,   /* bmCapabilities: D0+D1 */
    0x01,   /* bDataInterface: 1 */
    /* 36 */
               
    /*ACM Functional Descriptor*/
    0x04,   /* bFunctionLength */
    0x24,   /* bDescriptorType: CS_INTERFACE */
    0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
    0x02,   /* bmCapabilities */
    /* 40 */
               
    /*Union Functional Descriptor*/
    0x05,   /* bFunctionLength */
    0x24,   /* bDescriptorType: CS_INTERFACE */
    0x06,   /* bDescriptorSubtype: Union func desc */
    0x00,   /* bMasterInterface: Communication class interface */
    0x01,   /* bSlaveInterface0: Data Class Interface */
    /* 45 */
               
    /*Endpoint 2 Descriptor*/
    0x07,   /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
    0x82,   /* bEndpointAddress: (IN2) */
    0x03,   /* bmAttributes: Interrupt */
    VIRTUAL_COM_PORT_INT_SIZE,      /* wMaxPacketSize: */
    0x00,
    0xFF,   /* bInterval: */
    /* 52 */
               
    /*Data class interface descriptor*/
    0x09,   /* bLength: Endpoint Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
    0x01,   /* bInterfaceNumber: Number of Interface */
    0x00,   /* bAlternateSetting: Alternate setting */
    0x02,   /* bNumEndpoints: Two endpoints used */
    0x0A,   /* bInterfaceClass: CDC */
    0x00,   /* bInterfaceSubClass: */
    0x00,   /* bInterfaceProtocol: */
    0x00,   /* iInterface: */
    /* 61 */
               
    /*Endpoint 3 Descriptor*/
    0x07,   /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
    0x03,   /* bEndpointAddress: (OUT3) */
    0x02,   /* bmAttributes: Bulk */
    VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
    0x00,
    0x00,   /* bInterval: ignore for Bulk transfer */
    /* 68 */
               
    /*Endpoint 1 Descriptor*/
    0x07,   /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
    0x84,   /* bEndpointAddress: (IN1) */
    0x02,   /* bmAttributes: Bulk */
    VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
    0x00,
    0x00,    /* bInterval */
    /* 75 */
    //end of CDC
                /************** Descriptor of CDC HID interface ****************/  
                0x09,         /* bLength: Interface Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */
    0x02,         /* bInterfaceNumber: Number of Interface */
    0x00,         /* bAlternateSetting: Alternate setting */
    0x02,         /* bNumEndpoints */
    0x03,         /* bInterfaceClass: HID */
    0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */
    0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
    0,            /* iInterface: Index of string descriptor */
    /* 84 */

                /******************** Descriptor of CDC HID HID ********************/
    0x09,         /* bLength: HID Descriptor size */
    HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
    0x10,         /* bcdHID: HID Class Spec release number */
    0x01,
    0x00,         /* bCountryCode: Hardware target country */
    0x01,         /* bNumDescriptors: Number of HID class descriptors to follow */
    0x22,         /* bDescriptorType */
    CDCHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */
    0x00,
    /* 93 */

                /******************** Descriptor of CDC HID endpoints ******************/
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */

    0x81,          /* bEndpointAddress: Endpoint Address (IN) */
    0x03,          /* bmAttributes: Interrupt endpoint */
    0x40,          /* wMaxPacketSize: 2 Bytes max */
    0x00,
    0x20,          /* bInterval: Polling Interval (32 ms) */
    /* 100 */
           
    0x07,        /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,        /* bDescriptorType: */
                                                    /*        Endpoint descriptor type */
    0x01,        /* bEndpointAddress: */
                            /*        Endpoint Address (OUT) */
    0x03,        /* bmAttributes: Interrupt endpoint */
    0x08,        /* wMaxPacketSize: 2 Bytes max  */
    0x00,
    0x20,        /* bInterval: Polling Interval (20 ms) */
    /* 107 */
  }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

368

帖子

1

粉丝