AnsweredAssumed Answered

USB host, full/high-speed HUB with low-speed device returns TXERR

Question asked by Andrej Pišek on Feb 6, 2018

I have a problem with enumeration of low speed devices through a hub (working at full speed).
I am using STM32F469II USB full speed (USB_OTG_FS, embedded full speed phy) with HAL lib V1.7.1 
I did some modifications to the host lib to support multiple devices / interfaces and added the hub class driver. Everything is fine with devices working at full speed, but with low speed devices enumeration fails sometimes (usually it works!).

The problem always occurs when resetting the channel (EP0) from full to low speed (changing the HCCHAR register) after that the next SETUP packet sometimes results in a transaction error (TXERR).

The device doesn`t return ACK. Instead the host channel interrupt register states the transaction error.
After that, the core halts the channel and the host goes to error state. Then the host tries to resend the Setup packet (without success, there`s no interrupt indicating an ACK or another error and the stack doesn`t recover properly). 

 

I would much appreciate if someone could give me any tips on why this error occurs. If not how to solve it, at least how to bypass it - reset the channel to working condition.

Outcomes