Azure RTOS USBX CDC ACM: COM port enumerates successfully, but class is never activated (_ux_device_class_cdc_acm_activate() not called)
Hi everyone,
I'm working on Azure RTOS USBX CDC ACM on an STM32F429ZIT6. The USB device is detected successfully by Windows, and a COM port is created, but I'm unable to transmit or receive any data.
Environment
- MCU: STM32F429ZIT6
- STM32CubeIDE: 1.19
- STM32CubeF4: 1.28.3
- Azure RTOS USBX (X-CUBE-AZRTOS-F4)
Problem
The USB device enumerates successfully:
- Device Manager detects the USB CDC device.
- A COM port is created.
- No data transfer occurs.
-
_ux_device_class_cdc_acm_activate()is never called. - The CDC ACM class never becomes active.
While debugging, I found that execution reaches:
UINT _ux_device_stack_interface_start(UX_SLAVE_INTERFACE *interface)where the following assignment is made:
class_command.ux_slave_class_command_class =
interface->ux_slave_interface_descriptor.bInterfaceClass;Later, USBX calls:
_ux_device_class_cdc_acm_entry(&class_command);During the UX_SLAVE_CLASS_COMMAND_QUERY request, the following check is performed:
if (command->ux_slave_class_command_class == UX_SLAVE_CLASS_CDC_ACM_CLASS)
return UX_SUCCESS;
else
return UX_NO_CLASS_MATCH;However, in my USBX version:
#define UX_SLAVE_CLASS_CDC_ACM_CLASS 10which corresponds to 0x0A (CDC Data Interface).
According to the USB descriptor, the interface passed into _ux_device_stack_interface_start() has:
bInterfaceNumber = 0
bInterfaceClass = 0x02Therefore, the comparison becomes:
0x02 == 0x0Awhich fails, returning UX_NO_CLASS_MATCH.
As a result:
_ux_device_class_cdc_acm_activate()is never called.- The interface is never associated with the CDC ACM class.
- Read/write APIs never work.
