Datasheet
#define USB_CDC_VCOM_CIC_INTERRUPT_IN_ENDPOINT_12 (0)
#define USB_CDC_VCOM_CIC_INTERRUPT_IN_ENDPOINT_13 (0)
#define USB_CDC_VCOM_CIC_INTERRUPT_IN_ENDPOINT_14 (0)
#define USB_CDC_VCOM_CIC_INTERRUPT_IN_ENDPOINT_15 (0)
#endif
3. Modify the usb_device_descriptor.c file
• Modify the array length field in the g_UsbDeviceConfigurationDescriptor configuration descriptor array
USB_SHORT_GET_LOW(USB_DESCRIPTOR_LENGTH_CONFIGURE +
(USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE +
USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC +
USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT +
USB_DESCRIPTOR_LENGTH_CDC_UNION_FUNC + 0 +
USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT +
USB_DESCRIPTOR_LENGTH_ENDPOINT) * USB_DEVICE_CONFIG_CDC_ACM),
USB_SHORT_GET_HIGH(USB_DESCRIPTOR_LENGTH_CONFIGURE +
(USB_IAD_DESC_SIZE + USB_DESCRIPTOR_LENGTH_INTERFACE +
USB_DESCRIPTOR_LENGTH_CDC_HEADER_FUNC +
USB_DESCRIPTOR_LENGTH_CDC_CALL_MANAG + USB_DESCRIPTOR_LENGTH_CDC_ABSTRACT +
USB_DESCRIPTOR_LENGTH_CDC_UNION_FUNC + 0 +
USB_DESCRIPTOR_LENGTH_INTERFACE + USB_DESCRIPTOR_LENGTH_ENDPOINT +
USB_DESCRIPTOR_LENGTH_ENDPOINT) *
USB_DEVICE_CONFIG_CDC_ACM),
• Delete interrupt endpoint descriptors in all CDC interfaces
#if USB_CDC_CIC_INTERRUPT_IN_ENDPOINT_ENABLE
/*Notification Endpoint descriptor */
USB_DESCRIPTOR_LENGTH_ENDPOINT,
USB_DESCRIPTOR_TYPE_ENDPOINT,
USB_CDC_VCOM_CIC_INTERRUPT_IN_ENDPOINT |(USB_IN << 7U), USB_ENDPOINT_INTERRUPT,
USB_SHORT_GET_LOW(FS_CDC_VCOM_INTERRUPT_IN_PACKET_SIZE),
USB_SHORT_GET_HIGH(FS_CDC_VCOM_INTERRUPT_IN_PACKET_SIZE),
FS_CDC_VCOM_INTERRUPT_IN_INTERVAL,
#endif
4. Modify the virtual_com.c file
• Modify the processing of the SetControlLineState class request in the USB_DeviceCdcVcomClassRequest() function.
if (0 == vcomInstance->hasSentState)
{
#if USB_CDC_CIC_INTERRUPT_IN_ENDPOINT_ENABLE
error = USB_DeviceSendRequest(handle, vcomInstance->interruptEndpoint,
acmInfo->serialStateBuf, len);
if (kStatus_USB_Success != error)
{
usb_echo("kUSB_DeviceCdcEventSetControlLineState error!");
}
#endif
vcomInstance->hasSentState = 1;
}
•
Add g_CdcVcomInterruptInPackageSzie, g_CdcVcomInterruptInInterval,
g_CdcVcomInterruptInEndpoint, g_CdcVcomDicBulkInEndpoint,
g_CdcVcomDicBulkInEndpoint, g_CdcVcomDicBulkOutEndpoint,
NXP Semiconductors
Key Steps
USB to Multi VCOM on K32L2 Series MCU, Rev. 0, November 2019
Application Note 17 / 25