AnsweredAssumed Answered

USB Bulk Transfer

Question asked by Ryan Lush on Dec 14, 2017
Latest reply on Dec 18, 2017 by Jing Pan

I have some USB firmware that started out as a Freescale Virtual COM port but was modified to just use bulk transfers over 2 endpoints. My understanding is the interrupt (control) endpoint was removed because its not needed. So the device enumerates not as a com port but as a custom device. These are what I believe to be the relevant descriptors from the working project.

 

/*****************************************************************************
 * Constant and Macro's
 *****************************************************************************/
/* structure containing details of all the endpoints used by this device */
USB_DESC_CONST USB_ENDPOINTS usb_desc_ep =
{
    BULK_DESC_ENDPOINT_COUNT,
    {
        {
            BULK_IN_ENDPOINT,
            USB_BULK_PIPE,
            USB_SEND,
            BULK_IN_ENDP_PACKET_SIZE
        },
        {
            BULK_OUT_ENDPOINT,
            USB_BULK_PIPE,
            USB_RECV,
            BULK_OUT_ENDP_PACKET_SIZE
        }    
    }
};

 

uint_8 USB_DESC_CONST g_device_descriptor[DEVICE_DESCRIPTOR_SIZE] =
{
   DEVICE_DESCRIPTOR_SIZE,               /*  Device Dexcriptor Size         */
   USB_DEVICE_DESCRIPTOR,                /*  Device Type of descriptor      */
   0x00, 0x02,                           /*  BCD USB version                */
   0x00,                                   /*  Device Class is indicated in
                                             the interface descriptors      */
   0x00,                                 /*  Device Subclass is indicated
                                             in the interface descriptors   */
   0x00,                                 /*  Device Protocol                */
   CONTROL_MAX_PACKET_SIZE,              /*  Max Packet size                */
   0xE3,0x22,                            /*  Vendor ID                      */
   LSB(PRODUCT_ID), MSB(PRODUCT_ID),     /*  9500IX 2                       */
   0x00,0x02,                            /*  BCD Device version             */
   0x01,                                 /*  Manufacturer string index      */
   0x02,                                 /*  Product string index           */
   0x03,                                 /*  Serial number string index     */
   0x01                                  /*  Number of configurations       */
};

 

uint_8 USB_DESC_CONST g_config_descriptor[CONFIG_DESC_SIZE] =
{
    CONFIG_ONLY_DESC_SIZE,          /*  Configuration Descriptor Size */                        // 0x09
    USB_CONFIG_DESCRIPTOR,          /* "Configuration" type of descriptor */                    // 0x02
    CONFIG_DESC_SIZE, 0x00,         /*  Total length of the Configuration descriptor */            // 0x09 + 0x09 + 0x07*2 , 0x00
    0x01,                           /*NumInterfaces*/
    0x01,                           /*  Configuration Value */
    0x00,                           /*  Configuration Description String Index*/
    BUS_POWERED|SELF_POWERED|(REMOTE_WAKEUP_SUPPORT<<REMOTE_WAKEUP_SHIFT),
              /*  Attributes.support RemoteWakeup and self power*/
    0x32,                   /*  Current draw from bus -- 100mA*/

 

    /* INTERFACE DESCRIPTOR */
    IFACE_ONLY_DESC_SIZE,                                                                        // 0x09
    USB_IFACE_DESCRIPTOR,                                                                        // 0x04
    0x00,                           /* bInterfaceNumber */
    0x00,                           /* bAlternateSetting */
    BULK_DESC_ENDPOINT_COUNT,       
    BULK_CLASS_CODE,                     
    BULK_SUBCLASS_CODE,
    BULK_PROTOCOL_CODE,
    0x00, /* Interface Description String Index*/

 

    /*Endpoint descriptor */
    ENDP_ONLY_DESC_SIZE,                                                                        // 0x07
    USB_ENDPOINT_DESCRIPTOR,
    BULK_IN_ENDPOINT | (USB_SEND << 7),
    USB_BULK_PIPE,
    BULK_IN_ENDP_PACKET_SIZE, 0x00,
    0x00,                           /* This value is ignored for bulk */

 

    /*Endpoint descriptor */
    ENDP_ONLY_DESC_SIZE,
    USB_ENDPOINT_DESCRIPTOR,
    BULK_OUT_ENDPOINT|(USB_RECV << 7),
    USB_BULK_PIPE,
    BULK_OUT_ENDP_PACKET_SIZE, 0x00,
    0x00                            /* This value is ignored for bulk */
};

 

So my goal here is to duplicate this scheme but using the latest KSDK. There is a fairly decent document on how to do this with the Freescale USB stack but I'm a little lost when it comes to doing it with KSDK.

Outcomes