The USB device controller can operate in distinct modes while transferring data. This section describes the common sequence of operations for the receive and transmit API functions in the device driver, highlighting potential differences when the controller is operating on FIFO or DMA mode. While there are some controllers that are strictly FIFO-based or DMA-based, there are controllers that can operate in both modes depending on hardware characteristics. For this type of controller, the device driver will employ the appropriate sequence of operations depending, for example, on the endpoint type.
Device Synchronous Receive
The device synchronous receive operation is initiated by the calls: USBD_BulkRx()
, USBD_CtrlRx()
, and USBD_IntrRx()
. The shows an overview of the device synchronous receive operation.
Device Asynchronous Receive
The device asynchronous receive operation is initiated by the calls: USBD_BulkRxAsync()
, USBD_IntrRxAsync()
and
. shows an overview of the device asynchronous receive operation.USBD_IsocRxAsync()
Device Synchronous Transmit
The device synchronous transmit operation is initiated by the calls: USBD_BulkTx()
, USBD_CtrlTx()
, and USBD_IntrTx()
. shows an overview of the device synchronous transmit operation.
Device Asynchronous Transmit
The device asynchronous transmit operation is initiated by the calls: USBD_BulkTxAsync()
, USBD_IntrTxAsync()
and USBD_IsocTxAsync()
. shows an overview of the device asynchronous transmit operation.
Device Set Address
The device set address operation is performed by the setup transfer handler when a SET_ADDRESS
request is received. shows an overview of the device set address operation.