You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
in my project iam trying to create a usb device with two CDC instances. So as suggested i'am using the Interface Association Desciptor
The size field in Configuration Descriptor is calculated wrong, when using Interface Association Descriptor
For the configuration this struct will be generated:
/*******************************************
* USB Full Speed Configuration Descriptor
*******************************************/
const uint8_t fullSpeedConfigurationDescriptor[]=
{
/* Configuration Descriptor */
0x09, // Size of this descriptor in bytes
USB_DESCRIPTOR_CONFIGURATION, // Descriptor Type
USB_DEVICE_16bitTo8bitArrange(133), //(133 Bytes)Size of the Configuration descriptor
4, // Number of interfaces in this configuration
0x01, // Index value of this configuration
0x00, // Configuration string index
USB_ATTRIBUTE_DEFAULT | USB_ATTRIBUTE_SELF_POWERED, // Attributes
50,
/* Descriptor for Function - CDC */
/* Interface Association Descriptor: CDC Function*/
0x08, // Size of this descriptor in bytes
0x0B, // Interface association descriptor type
0, // The first associated interface
0x02, // Number of contiguous associated interface
0x02, // bInterfaceClass of the first interface
0x02, // bInterfaceSubclass of the first interface
0x01, // bInterfaceProtocol of the first interface
0x00, // Interface string index
/* Interface Descriptor */
0x09, // Size of this descriptor in bytes
USB_DESCRIPTOR_INTERFACE, // Descriptor Type is Interface descriptor
0, // Interface Number
0x00, // Alternate Setting Number
0x01, // Number of endpoints in this interface
USB_CDC_COMMUNICATIONS_INTERFACE_CLASS_CODE, // Class code
USB_CDC_SUBCLASS_ABSTRACT_CONTROL_MODEL, // Subclass code
USB_CDC_PROTOCOL_AT_V250, // Protocol code
0x00, // Interface string index
/* CDC Class-Specific Descriptors */
sizeof(USB_CDC_HEADER_FUNCTIONAL_DESCRIPTOR), // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_HEADER, // Type of functional descriptor
0x20,0x01, // CDC spec version
sizeof(USB_CDC_ACM_FUNCTIONAL_DESCRIPTOR), // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_ABSTRACT_CONTROL_MANAGEMENT, // Type of functional descriptor
USB_CDC_ACM_SUPPORT_LINE_CODING_LINE_STATE_AND_NOTIFICATION, // bmCapabilities of ACM
sizeof(USB_CDC_UNION_FUNCTIONAL_DESCRIPTOR_HEADER) + 1, // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_UNION, // Type of functional descriptor
0, // com interface number
1,
sizeof(USB_CDC_CALL_MANAGEMENT_DESCRIPTOR), // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_CALL_MANAGEMENT, // Type of functional descriptor
0x00, // bmCapabilities of CallManagement
1, // Data interface number
/* Interrupt Endpoint (IN) Descriptor */
0x07, // Size of this descriptor
USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor
1 | USB_EP_DIRECTION_IN, // EndpointAddress ( EP1 IN INTERRUPT)
USB_TRANSFER_TYPE_INTERRUPT, // Attributes type of EP (INTERRUPT)
0x10,0x00, // Max packet size of this EP
0x02, // Interval (in ms)
/* Interface Descriptor */
0x09, // Size of this descriptor in bytes
USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type
1, // Interface Number
0x00, // Alternate Setting Number
0x02, // Number of endpoints in this interface
USB_CDC_DATA_INTERFACE_CLASS_CODE, // Class code
0x00, // Subclass code
USB_CDC_PROTOCOL_NO_CLASS_SPECIFIC, // Protocol code
0x00, // Interface string index
/* Bulk Endpoint (OUT) Descriptor */
0x07, // Size of this descriptor
USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor
2 | USB_EP_DIRECTION_OUT, // EndpointAddress ( EP2 OUT )
USB_TRANSFER_TYPE_BULK, // Attributes type of EP (BULK)
0x40, 0x00, // Max packet size of this EP
0x00, // Interval (in ms)
/* Bulk Endpoint (IN)Descriptor */
0x07, // Size of this descriptor
USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor
2 | USB_EP_DIRECTION_IN, // EndpointAddress ( EP2 IN )
0x02, // Attributes type of EP (BULK)
0x40, 0x00, // Max packet size of this EP
0x00, // Interval (in ms)
/* Descriptor for Function - CDC */
/* Interface Association Descriptor: CDC Function*/
0x08, // Size of this descriptor in bytes
0x0B, // Interface association descriptor type
2, // The first associated interface
0x02, // Number of contiguous associated interface
0x02, // bInterfaceClass of the first interface
0x02, // bInterfaceSubclass of the first interface
0x01, // bInterfaceProtocol of the first interface
0x00, // Interface string index
/* Interface Descriptor */
0x09, // Size of this descriptor in bytes
USB_DESCRIPTOR_INTERFACE, // Descriptor Type is Interface descriptor
2, // Interface Number
0x00, // Alternate Setting Number
0x01, // Number of endpoints in this interface
USB_CDC_COMMUNICATIONS_INTERFACE_CLASS_CODE, // Class code
USB_CDC_SUBCLASS_ABSTRACT_CONTROL_MODEL, // Subclass code
USB_CDC_PROTOCOL_AT_V250, // Protocol code
0x00, // Interface string index
/* CDC Class-Specific Descriptors */
sizeof(USB_CDC_HEADER_FUNCTIONAL_DESCRIPTOR), // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_HEADER, // Type of functional descriptor
0x20,0x01, // CDC spec version
sizeof(USB_CDC_ACM_FUNCTIONAL_DESCRIPTOR), // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_ABSTRACT_CONTROL_MANAGEMENT, // Type of functional descriptor
USB_CDC_ACM_SUPPORT_LINE_CODING_LINE_STATE_AND_NOTIFICATION, // bmCapabilities of ACM
sizeof(USB_CDC_UNION_FUNCTIONAL_DESCRIPTOR_HEADER) + 1, // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_UNION, // Type of functional descriptor
2, // com interface number
3,
sizeof(USB_CDC_CALL_MANAGEMENT_DESCRIPTOR), // Size of the descriptor
USB_CDC_DESC_CS_INTERFACE, // CS_INTERFACE
USB_CDC_FUNCTIONAL_CALL_MANAGEMENT, // Type of functional descriptor
0x00, // bmCapabilities of CallManagement
3, // Data interface number
/* Interrupt Endpoint (IN) Descriptor */
0x07, // Size of this descriptor
USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor
3 | USB_EP_DIRECTION_IN, // EndpointAddress ( EP3 IN INTERRUPT)
USB_TRANSFER_TYPE_INTERRUPT, // Attributes type of EP (INTERRUPT)
0x10,0x00, // Max packet size of this EP
0x02, // Interval (in ms)
/* Interface Descriptor */
0x09, // Size of this descriptor in bytes
USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type
3, // Interface Number
0x00, // Alternate Setting Number
0x02, // Number of endpoints in this interface
USB_CDC_DATA_INTERFACE_CLASS_CODE, // Class code
0x00, // Subclass code
USB_CDC_PROTOCOL_NO_CLASS_SPECIFIC, // Protocol code
0x00, // Interface string index
/* Bulk Endpoint (OUT) Descriptor */
0x07, // Size of this descriptor
USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor
4 | USB_EP_DIRECTION_OUT, // EndpointAddress ( EP4 OUT )
USB_TRANSFER_TYPE_BULK, // Attributes type of EP (BULK)
0x40, 0x00, // Max packet size of this EP
0x00, // Interval (in ms)
/* Bulk Endpoint (IN)Descriptor */
0x07, // Size of this descriptor
USB_DESCRIPTOR_ENDPOINT, // Endpoint Descriptor
4 | USB_EP_DIRECTION_IN, // EndpointAddress ( EP4 IN )
0x02, // Attributes type of EP (BULK)
0x40, 0x00, // Max packet size of this EP
0x00, // Interval (in ms)
};
But the length of the whole field is 141 instead of 133.
so wTotalLength of Configuration Descriptors should be USB_DEVICE_16bitTo8bitArrange(141)
in a new project the size of 141 is correct.
Harmony USB 3.7.0
The text was updated successfully, but these errors were encountered:
one of my colleagues had the same problem in another project. He just added the RTOS Module and re-generated the files.
The length of the field was 149 instead of 141 Bytes this time. So it seems its always 8 Bytes too much.
If the µC runs with this error in the code, the µc get stucked in a loop when interpreting the descriptors in _USB_DEVICE_ConfigureDevice(), because confTotalLength is wrong.
This continues to be a problem in MCC v5.3.0. Deleting the CDC Function Driver and Console sometimes helps. I've found it will continue to grow in 8 byte increments as you make changes. MCC v5.3.0. usb_device_init_data.c USB_DEVICE_16bitTo8bitArrange
Hello,
in my project iam trying to create a usb device with two CDC instances. So as suggested i'am using the Interface Association Desciptor
The size field in Configuration Descriptor is calculated wrong, when using Interface Association Descriptor
For the configuration this struct will be generated:
But the length of the whole field is 141 instead of 133.
so wTotalLength of Configuration Descriptors should be
USB_DEVICE_16bitTo8bitArrange(141)
in a new project the size of 141 is correct.
Harmony USB 3.7.0
The text was updated successfully, but these errors were encountered: