cancel
Showing results for 
Search instead for 
Did you mean: 

No usb enumeration with UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE option disabled

SpaceExplorer
Associate

 

Hello everyone,

I'm trying to get the USB CDC protocol working with USBX. The hardware is fine because DFU works, and I can flash the board through it. Following a tutorial, I was also able to implement a bare-metal USB CDC device, and everything enumerated correctly and printed data.

I uploaded the USB_CDC example for the STM32WBA65RIVx, and that also enumerated without issues.
(I removed the UART part because I don’t have it; I only tested sending “hello world”.)

Then I tried to integrate USB CDC into my own project, and I got stuck because I couldn't understand why the example works but my IOC configuration does not.

Eventually, I found that enumeration only works if the option UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE is enabled.

When I disable that option, the PC cannot detect my board.
What could be the reason for this?

I increased:

  • usbx_system_stack_size to 32×1024

  • usbx_memory_pool_size to 32×1024

Another strange thing: this parameter must be set exactly like this, otherwise enumeration does not happen:

#define UX_SLAVE_REQUEST_DATA_MAX_LENGTH 512

Even if UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE is enabled, increasing this value stops enumeration. I don’t understand why.

Minimum HEAP and STACK sizes are both set to 0x2000.

Any ideas or suggestions would be greatly appreciated.

I will attach some photos.

1 ACCEPTED SOLUTION

Accepted Solutions
FBL
ST Employee

Hi @SpaceExplorer 

There are several configuration options for building USB Device CDC-ACM Class. All options are located in the ux_user.h.

UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE macro disables CDC ACM non-blocking transmission support. it is mentioned in readme notes

  • CDC ACM non-blocking transmission by default disabled, to enable non-blocking transmission UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE must be disabled and 2048 additional in USBX byte pool and USBX_MEMORY_SIZE.

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.




Best regards,
FBL

View solution in original post

2 REPLIES 2
FBL
ST Employee

Hi @SpaceExplorer 

There are several configuration options for building USB Device CDC-ACM Class. All options are located in the ux_user.h.

UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE macro disables CDC ACM non-blocking transmission support. it is mentioned in readme notes

  • CDC ACM non-blocking transmission by default disabled, to enable non-blocking transmission UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE must be disabled and 2048 additional in USBX byte pool and USBX_MEMORY_SIZE.

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.




Best regards,
FBL

Hello, thank you for your response!

I checked the example’s README again and found this section, but I wasn’t able to locate the corresponding settings in my ux_user.h.

The option UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE is present in the file.

However, the part about “USBX byte pool” and “USBX_MEMORY_SIZE” is not present anywhere in ux_user.h.
Unfortunately, I do not understand where these values are supposed to be changed.

The only similar parameters I found are:

usbx_system_stack_size = 32 × 1024

usbx_memory_pool_size = 32 × 1024


These are located in the CubeMX GUI, under USBX parameters, and I believe I have already increased them sufficiently.

I have uploaded all my USBx parameters screenshot under my post, if you could check that too?

Could you please specify more precisely what I need to change and where I should change it?

Sorry if these questions seem basic — this is my first time working with such a complex system.

Thank you!