cancel
Showing results for 
Search instead for 
Did you mean: 

USB crash when using endpoint 0x84 but works on 0x81 (solved)

infoinfo991
Associate III
Posted on November 19, 2013 at 10:13

I am using a STM32F205RG, the USB HS interface as a USB device, it's HID, but it must use 0x84 for interrupt-in endpoint, not 0x81.

I am using the ST USB library.

If I attempt to use 0x84, a crash happens inside usb_core.c, function USB_OTG_EPStartXfer

USB_OTG_WRITE_REG32(&pcore->regs.INEP_REGS[ep->num]->DIEPCTL, depctl.d32);

using runtime debugging I have verified that ep->num does equal to 4, the entire pointer points to 0x40040980, which is correct for OTG_HS_DIEPCTL4

but as soon as this statement executes, my code jumps to some odd location

I am initializing the EP correctly as far as I can tell, the endpoint numbers are consistent between the EP opening, EP usage, and device descriptor. USB_OTG_MAX_TX_FIFOS is also set to 15. The number of endpoints available should be 6 according to USB_OTG_SelectCore, 4 is definitely less than 6.

If I use 0x81, the entire code works as expected, no crashes.

As it turns out, the problem may have been the FIFO allocation. The endpoint number translates into a FIFO number, which is 4, and FIFO 4 does not even exist. (FIFO 2 and 3 have 0 bytes allocated, FIFO 0 has 64 bytes for EP0 and FIFO 1 has 128 allocated)

The solution was to edit the library code so that FIFO 1 is used even if the endpoint is 4. I hope future versions of the library will address this issue.
0 REPLIES 0