cancel
Showing results for 
Search instead for 
Did you mean: 

USB Isochronous endpoint does not generate interrupt on F7

ttatakis
Associate III
Posted on December 07, 2017 at 14:29

I'm currently working on an STM32F7 design trying to get a composite device going on USB.  I have this same composite device working on an STM32F0 board and it implements the CDC and Audio USB device classes.  However, on the F7, I can not seem to get the Audio transfers to function.  Whatever I try, I can not make the F7 generate an interrupt when an isochronous transfer is supposed to take place- hence no data gets transferred.  I can see the isoc requests happen on a USB analyzer, but nothing happens on the F7.  

I have a sample project that I just put together that shows this on the STM32F769I Discovery board- attached.  It builds if you put it in the F7 Cube examples tree here: ......\STM32Cube_FW_F7_V1.8.0\Projects\STM32F769I-Discovery\Applications\USB_Device\

Some additional information:  I am seeing strange (strange to me anyways)  things in the USB TxFifo registers (viewing with the debugger) when things get initialized.  You can see my comments in the usbd_conf.c file at line 325.  When stepping through this code, I don't see the registers being initialized as I would expect.  This could be a debugger issue but it does not seem like one.  In addition, another thing has me confused: the Global USB registers are defined in the typedef USB_OTG_GlobalTypeDef in the file stm32f769xx.h.  With the exception of the GLPMCFG register, I can not find any other register between CID and HPTXFSIZ in any of the documentation.  I am primarily looking at the document RM0410.

This has me stumped- thanks for any help you can provide.

Tom

1 REPLY 1
Ben K
Senior III
Posted on December 07, 2017 at 16:34

the Global USB registers are defined in the typedef USB_OTG_GlobalTypeDef in the file stm32f769xx.h.  With the exception of the GLPMCFG register, I can not find any other register between CID and HPTXFSIZ in any of the documentation.

This is because the USB OTG core is split to several register groups in the CMSIS headers. The USB_OTG_GlobalTypeDef contains only the registers related to both roles (host + device). See for further details.