Electronic – the difference between Periodic and Non-Periodic Tx/Rx FIFO in USB

armstm32usbusb deviceusb-host

I am trying to understand how the USB module works in the very low level on STM32F4 MCUs (ARM Cortex-M4 core). In the reference manual I read often the terms Periodic and Non-Periodic Rx/Tx FIFO (I am not sure if there is periodic and non-periodic RxFIFO), for example:

Periodic TxFIFO empty interrupt mask
Nonperiodic TxFIFO empty interrupt mask
Receive FIFO nonempty interrupt mask

I do not understand what does periodic and non-periodic Tx/Rx FIFO mean (I do know what a FIFO is), I found no really helpful online resources about this. Could someone explain these terms to me please? and are these terms only specific to Tx but not Rx FIFOs?

Best Answer

The reference manual where you found these terms mentioned itself explains that the two types of FIFOs are used for different types of USB transfers, for example in section 34.12.2

The host uses one transmit FIFO for all non-periodic (control and bulk) OUT transactions and one transmit FIFO for all periodic (isochronous and interrupt) OUT transactions.

Realistically you probably should not be looking at the hardware engine in this level of detail unless you have substantial USB expertise; for any normal use you would let an existing USB stack (from ST or someone else) handle it, and only worry about following the requirements/examples for integration and providing or claiming data with the appropriate APIs. Getting this level of detail would tend to occur only if trying to write your own USB stack or if trying to de behind-the-scenes debugging of an unexpected incompatibility.