Skip to main content
Visitor
July 23, 2026
Question

Azure RTOS USBX CDC ACM: COM port enumerates successfully, but class is never activated (_ux_device_class_cdc_acm_activate() not called)

  • July 23, 2026
  • 0 replies
  • 3 views

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    10

which corresponds to 0x0A (CDC Data Interface).

According to the USB descriptor, the interface passed into _ux_device_stack_interface_start() has:

 
bInterfaceNumber = 0
bInterfaceClass = 0x02

Therefore, the comparison becomes:

 
0x02 == 0x0A

which 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.