AnsweredAssumed Answered

STM32 Composite Device (MSC+CDC)

Question asked by foxek.the on Oct 15, 2015
Latest reply on Oct 30, 2015 by foxek.the
I suffered a week and wrote all the same USB Composite device (MSC+CDC).
The point is this: I wrote Composite device MSC CDC. Everything is determined by the Manager, MSC works on both transmit and receive, but the CDC is only at the reception. Looked in a debugger, it looks as if HOST (PC) only generates a request to the endpoint MSC but the CDC does not endpoint polls.

My descriptors Code:
__ALIGN_BEGIN  uint8_t USBD_COMPOSITE_CfgDesc[USB_COMPOSITE_CONFIG_DESC_SIZ] __ALIGN_END =
{
  0x09,
  USB_DESC_TYPE_CONFIGURATION,
  USB_COMPOSITE_CONFIG_DESC_SIZ,
  0x00,
  0x03,                         /*bNumInterfaces: 3 interfaces (2 for CDC, 1 for MSC)*/
  0x01,                         /*bConfigurationValue: Configuration value*/
  0x00,                         /*iConfiguration: Index of string descriptor */
  0xC0,                         /*bmAttributes: bus powered and Support Remote Wake-up */
  0x32,                         /*MaxPower 100 mA: this current is used for detecting Vbus*/
   
  /********************  Mass Storage interface ********************/
  0x09,                         /* bLength: Interface Descriptor size */
  0x04,                         /* bDescriptorType: */
  MSC_INTERFACE,                /* bInterfaceNumber: Number of Interface */
  0x00,                         /* bAlternateSetting: Alternate setting */
  0x02,                         /* bNumEndpoints*/
  0x08,                         /* bInterfaceClass: MSC Class */
  0x06,                         /* bInterfaceSubClass : SCSI transparent*/
  0x50,                         /* nInterfaceProtocol */
  0x05,                         /* iInterface: */
  /********************  Mass Storage Endpoints ********************/
  0x07,                         /*Endpoint descriptor length = 7*/
  0x05,                         /*Endpoint descriptor type */
  MSC_IN_EP,                /*Endpoint address (IN, address 3) */
  0x02,                         /*Bulk endpoint type */
  LOBYTE(MSC_MAX_PACKET),
  HIBYTE(MSC_MAX_PACKET),
  0x00,                         /*Polling interval in milliseconds */
 
  0x07,                         /*Endpoint descriptor length = 7 */
  0x05,                         /*Endpoint descriptor type */
  MSC_OUT_EP,               /*Endpoint address (OUT, address 3) */
  0x02,                         /*Bulk endpoint type */
  LOBYTE(MSC_MAX_PACKET),
  HIBYTE(MSC_MAX_PACKET),
  0x00,                         /*Polling interval in milliseconds*/
   /******** /IAD should be positioned just before the CDC interfaces */
  0x08, /* bLength */
  0x0B, /* bDescriptorType */
  0x01, /* bFirstInterface */
  0x02, /* bInterfaceCount */
  0x02, /* bFunctionClass */
  0x02, /* bFunctionSubClass */
  0x01, /* bFunctionProtocol */
  0x00, /* iFunction (Index of string descriptor describing this function) */
   
   /*Interface Descriptor */
  0x09,   /* bLength: Interface Descriptor size */
  0x04,  /* bDescriptorType: Interface */
  CDC_COM_INTERFACE,   /* bInterfaceNumber: Number of Interface */
  0x00,   /* bAlternateSetting: Alternate setting */
  0x01,   /* bNumEndpoints: One endpoints used */
  0x02,   /* bInterfaceClass: Communication Interface Class */
  0x02,   /* bInterfaceSubClass: Abstract Control Model */
  0x01,   /* bInterfaceProtocol: Common AT commands */
  0x01,   /* 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 Management Functional Descriptor*/
  0x05,   /* bFunctionLength */
  0x24,   /* bDescriptorType: CS_INTERFACE */
  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
  0x03,   /* bmCapabilities: D0+D1 */
  0x02,   /* bDataInterface: 2 */
   
  /*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 */
  0x01,   /* bMasterInterface: Communication class interface */
  0x02,   /* bSlaveInterface0: Data Class Interface */
 
 /*Endpoint 2 Descriptor*/
  0x07,                           /* bLength: Endpoint Descriptor size */
  0x05,   /* bDescriptorType: Endpoint */
  CDC_CMD_EP,                     /* bEndpointAddress */
  0x03,                           /* bmAttributes: Interrupt */
  LOBYTE(CDC_CMD_PACKET_SZE),     /* wMaxPacketSize: */
  HIBYTE(CDC_CMD_PACKET_SZE),
  0xFF,                           /* bInterval: */
   
  /*Data class interface descriptor*/
  0x09,                                   /* bLength: Endpoint Descriptor size */
  0x04,                          /* bDescriptorType: */
  CDC_DATA_INTERFACE,                    /* bInterfaceNumber: /
  0x00,                              /* bAlternateSetting: Alternate setting */
  0x02,                              /* bNumEndpoints: Two endpoints used */
  0x0A,                              /* bInterfaceClass: CDC */
  0x00,                              /* bInterfaceSubClass: */
  0x00,                              /* bInterfaceProtocol: */
  0x00,                              /* iInterface: */
   
  /*Endpoint OUT Descriptor*/
  0x07,                              /* bLength: Endpoint Descriptor size */
  0x05,      /* bDescriptorType: Endpoint */
  CDC_OUT_EP,                        /* bEndpointAddress */
  0x02,                              /* bmAttributes: Bulk */
  0x40,                              /* wMaxPacketSize: */
  0x00,
  0x01,                              /* bInterval: ignore for Bulk transfer */
   
  /*Endpoint IN Descriptor*/
  0x07,                              /* bLength: Endpoint Descriptor size */
  0x05,                                                       /* bDescriptorType: Endpoint */
  CDC_IN_EP,                         /* bEndpointAddress */
  0x02,                              /* bmAttributes: Bulk */
  0x40,                              /* wMaxPacketSize: */
  0x00,
  0x01,                              /* bInterval */
};


Outcomes