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.
Hi Ryan,
which mcu do you use? Do you mean you want to use endpoint0 as bulk transfer? There is no such statement this is forbidden. But it is not recommanded. You'd better keep endpoint0 and use other endpoint.
Regards
Jing