History: usbd_drv_synopsys_otg

This page describes all changes made to the usbd_drv_synopsys_otg package, USBD Low Level Driver for Synopsys OTG, since its release.


3.24 (2020-08-12, 15:47):

  • Warning removed (when OTG_USE_HS_PORT==0).

3.23 (2020-07-02, 17:50):

  • Added Internal High Speed PHY support.
  • Calls oal_isr_delete() from usbd_hw_delete().

3.22 (2020-01-07, 14:05)

  • Starting isochronous IN streams possibly resulted in accessing undefined memory areas.

3.21 (2019-11-08, 15:30):

  • FS transceiver is not enabled if OTG HS core is used with external ULPI.

3.20 (2019-07-11, 13:56):

  • Added configuration option OTG_ENABLE_DELAY_IN_ULPI_TIMING to enable delay in ULPI timing during device chirp.

3.19 (2019-05-29, 18:15):

  • OTG SRP and HRP support added.
  • Mutex was not deleted in usbd_hw_delete().

3.18 (2019-05-20, 12:34):

  • New alternate Ring Buffer API functions used, available from util_ring_buffer v1.3. This way when dealing with USB Audio streams, the user will have the information in the ring buffer FIFO callbacks whether the callback was called from interrupt or task context.

3.17 (2019-02-19, 17:32):

  • Handle Synopsys OTG_GCCFG differences (VBUS detection) based on product ID (OTG_CID).

3.16 (2019-02-04, 16:36):

  • ISO IN non-stream endpoints could have stopped working under certain circumstances. For example Audio feedback (synchronization) channels typically stopped functioning in half of the cases when jumping to the next track when listening to music on YouTube using a Windows host (other host operating systems might also be affected).

3.15 (2019-02-04, 15:59):

  • Workaround for STM32F777 enumeration problems when both dcache and icache enabled.

3.14 (2019-02-01, 16:02):

  • Workarounds for STM32F746 and STM32F756 enumeration problems.

3.13 (2018-12-20, 11:40):

  • Inoperable Isochronous transfers and SOF timer functions fixed.

3.12 (2018-09-13, 18:12):

  • VBUS connect/disconnect interrupts were only active if OTG_FS_VBUS_CONNECTED is set.
  • Avoid calling of platform-specific interrupt enable/disable from interrupt.

3.11r2 (2018-08-29, 18:22):

  • Document HTML link added to the documentation folder.
  • History and document files renamed to the package name.

3.11 (2018-07-31, 10:27):

  • Enumeration could fail with STM32F4xx.
  • Eliminated compiler warning.

3.10 (2018-07-13, 18:44):

  • Implemented USB VBUS detection.

3.9 (2018-03-23, 12:35):

  • Enumeration might fail with uCOS-II and STM32 MCUs with newer USB peripheral (STM32F46x, STM32F47x, STM32F7xx, and STM32L4xx).

3.8 (2018-02-12, 07:23):

  • Calling of oal_event_set_int() from non-interrupt context was eliminated.


  • Parallel transfers on multiple endpoints could corrupt each other's data.


  •  Compiler warning removed.
  •  New define in configuration file for working driver without OTG_FS_VBUS pin connected.


  • Polling of ISO endpoints by the host could fail as the device must define if polling will take place in odd/even frame by the host. New configuration item was introduced to define per EP when to swap odd/even frame if transaction was not complete for a certain period.


  • Enumeration could have failed on non STM32F4Lxx devices.


  • Enumeration could fail on STM32L4xx (OTG_FS).


  • Connection state change event is generated after remote wake up.


  • EP0 endpoint could receive max. 64 byte data.
  • Don't send event to common layer after each packet received.
  • Early Suspend interrupt doesn't handled as suspended state.
  • OUT endpoints was not stalled correctly.
  • Remote Wakeup implemented.


  • Reset forcing device mode in usbd_hw_stop(), in order to allow correct operation of the driver when used with OTG.


  • Code cleanup.


  • Incorrect audio stream could occur.


  • Multipacket OUT transfer reception fixed, driver incorrectly notified the common layer of the completion of an OUT transfer before it finished.


  • ISOCHRONOUS transfer fixed.


  • HS operation fixed.
  • Soft disconnect-reconnect mechanism removed for when ULPI is used.


  • Unaligned buffers are copied byte-to-byte in usbd_ReadFromFifo() and usbd_WriteToFifo().


  • USB Turnaround time is set now from PSP, according to AHB frequency.


  • Fixed the case when new Setup packet is received while there is an active transfer on EP0.


  • "Unknown" register bits got names (from Synopsys core spec).
  • psp_usbd_hw_delete() called from .
  • New config option OTG_STM32 introduced to avoid access to GCCFG register in non-STM32 implementations.


  • soft disconnect-reconnect applied from USBReset interrupt. This is needed to avoid the HW getting stuck in suspended state when connecting and disconnecting USB cable continuously, very fast. It seems so that in this case the HW behaves like when an "erratic error" has happened, after which, according to the documentation, a soft disconnect is needed. ("Erratic error", however, is not present here which seems to be a HW bug.)
  • ESUSP interrupt handled the same way as USBSUSP.


  • hw_start(): Core reset removed when using with on-chip PHY.


  • GCC warning removed.


  • Fixed hw_stop(), hw_start() when using ULPI.


  • Added support for configurable endpoint number (maximum of 15 bi-directional endpoints supported).


  • module renamed to synopsys_otg.
  • core reset issued at start.


    - Added protection to Rx FIFO interrupt handling against NULL transfer pointers.


    - fixes regarding USB reset handling and FIFO flush.


    - initialization issue fixed: ULPI started at the end of USBD start.

    - added config parameter OTG_USE_VBUS_IN and logic to handle the case when VBUS is not connected.


    - unknown FS mode bit set also in case FS port is used.


    - some initializations moved to usbd_hw_start() from usbd_hw_init().


    - added Tx Fifo flush to usbd_send().


    - driver made independent of PSP (includes psp header instead of stm32f10x/20x reg. def.)


    - hardware-specific init done by calling psp_usbd_hw_init().


    - added support for FS mode on HS port.


    - unnecessary target-delays removed; required ones replaced by oal_task_sleep().


    - fixed endpoint stalling.

    - modified init sequence: force Device Mode earlier.


    - fixed getting/setting MPSIZ of EP0 (DOEPCTL0).


    - some fixes for to avoid compilation problems with KEIL.

    - fixed size of pep2gndx_* arrays.

    - added configuration guard against improper FIFO configuration.


    - added support for both STM32f105/107 (connectivity line) and STM32f20x microcontrollers (OTG_FS, OTG_HS).