cancel
Showing results for 
Search instead for 
Did you mean: 

Can't Enumerate Telit modem USB port as a CDC ACM device with usbx host

Bfuller
Associate II

     I am using an STM32 Nucleo H563ZI board for stm32CubeIDE and I am trying to send AT commands to a Telit LE910C4-WWX threadx modem over usb using the usbx host and threadx middleware. My program should be able to detect the modem as a cdc acm device, but it's failing to enumerate. When I connect a usb mouse to the Nucleo, it can enumerate properly as an hid mouse, which leads me to believe that the modem might not be properly configured. When I connect the modem with the configuration AT#USBCFG=1, it steps through the _ux_host_class_cdc_acm_entry() function 7 times, and the last time, it is able to check for IAD presence, but the IAD class is 2, and the IAD subclass is 0, so it still fails. Is there some other configuration for the modem I need to do, or do I need to modify the usbx driver or the ioc file?

1 ACCEPTED SOLUTION

Accepted Solutions
Bfuller
Associate II

I was able to solve my issue. All I had to do was go into the cdc acm h file and change the value of the data class from 0x0A to 0xFF. It works perfectly fine now, and I can send and receive data over usb.

View solution in original post

21 REPLIES 21
Andrew Neil
Evangelist III

@Bfuller wrote:

When I connect a usb mouse to the Nucleo, it can enumerate properly as an hid mouse, which leads me to believe that the modem might not be properly configured. When I 


What if you connect a different CDC ACM device to your Nucleo?

 


@Bfuller wrote:

 leads me to believe that the modem might not be properly configured. 


So does the modem enumerate correctly when connected to a PC ?

I tried connecting a different Quectel modem to it, and that also didn't enumerate. When connected to PC, the Telit modem shows up as 2-5 different devices, depending on its usb composition. I downloaded the telit windows driver to see each device, and I get a serial diagnostics interface with class 0xFF, two modems, each with class 0xFF, an unknown device with class 0x02, and a usb composite device with class 0x00. When I look at each class when I step through the entry function, the 7th time the function is called has a class 0x0A and it passes the first if statement, but none of the devices that show up on my pc have class 0x0A.

Pavel A.
Evangelist III

Yep these modems are over-complicated. Need to check that you are not running out of host endpoints to map all that.

 


@Pavel A. wrote:

Yep these modems are over-complicated.


Indeed - they are intended for "Big OS" hosts like Windows or Linux.

@Bfuller can you not just connect to it via a serial port?

I think that might be part of the problem. I stepped through the enumeration process and it did return an ED null error when it was going through the endpoints. What would I need to do to

fix this?

Yes, but my implementation requires that I can connect the modem and the nucleo through their usb ports. I can enumerate most of the devices on Windows by installing the driver. I can't do that with the nucleo.

If the device requires too many endpoints, exclude some interfaces that are not vital for the functionality. How to know which? Do some RE on Windows or Linux...

 

pinny
Associate II

I am also facing the same issue in enumeration the Quectel modem with STM32 H755ZI-Q. Could you find any helpful resources? 


@pinny wrote:

I am also facing the same issue in enumeration the Quectel modem 


Which Quectel modem?

This one: https://community.st.com/t5/stm32-mcus-embedded-software/usb-connection-between-stm32f411-and-modem-rm500-quectel/m-p/705360/highlight/true#M50183 ?

Have you contacted Quectel for any help?