The Embedded Experts

Release notes for emUSB Host V2.20

Version 2.20 [06. Feb 2019]

New Features

  1. Added CP210X class.

Improvements

  1. DWC2 (Synopsys) FS driver: Reduce CPU interrupt load when receiving NAKs on bulk OUT endpoints.

Version 2.18 [21. Jan 2019]

New Features

  1. Added AUDIO class.
  2. DWC2 (Synopsys) FS driver: Added support for isochronous transfers.

Version 2.16 [08. Jan 2019]

New Features

  1. Added MIDI class.
  2. LPC54xxx HS driver: Support isochronous transfers.

Improvements

  1. LPC54xxx HS driver: Support interrupt endpoint polling intervals < 1ms.
  2. OHCI LPC54xxx driver (FS): Isochronous endpoints now support a polling rate of 1ms.
  3. FT232: Module refactored.
  4. General: Added functions USBH_GetNumRootPortConnections, USBH_GetDeviceDescriptorPtr, USBH_GetStringDescriptorASCII() and USBH_GetSerialNumberASCII().
  5. OTG: OTG layer refactored.
  6. DWC2 (Synopsys) HS driver: SOF interrupts switched off promptly if not used any more (for split transaction) to save CPU time.

Program corrections

  1. HID: Transfer errors on the interrupt endpoints may sometimes cause the HID device to be dropped. Fixed.
  2. HID: Pressing multiple keys simultaneously on keyboard devices where not reported correctly. Fixed.
  3. LPC54xxx HS driver: Low-speed devices are sometimes not enumerated. Workaround implemented.
  4. DWC2 (Synopsys): The internal PHY was powered up, even if an external PHY is used. Fixed.
  5. General: Fatal device errors during enumeration may result in corruption of internal data structures. Fixed.
  6. OHCI: In rare cases it was possible for an endpoint to become indefinitely halted (reported USBH_STATUS_ENDPOINT_HALTED) when a low-level transfer error occurred (e.g. PID error). Fixed.

Version 2.14a [14. Nov 2018]

New Features

  1. BULK: Added USBH_BULK_Receive() function.

Program corrections

  1. IMX6U5 driver (EHCI): USBH_IMX6U5_Add did not properly initialize the IMX6U5 USB controller. Fixed.
  2. OHCI driver: In very rare cases it was possible for a race condition to occur during an URB abort operation which would lead to a NULL pointer access. This issue existed since emUSB-Host version 2.14 and is fixed with emUSB-Host version 2.14a.

Version 2.14 [08. Nov 2018]

New Features

  1. EHCI driver: Support isochronous transfers.
  2. OHCI driver: Support isochronous transfers.
  3. BULK (vendor) class: Support isochronous transfers.
  4. Added CCID class.
  5. BULK: Added USBH_BULK_GetEndpointInfo() function.
  6. FT232: Added USBH_FT232_AddCustomDeviceMask() function which allows to register non-FTDI devices with the FT232 module.
  7. EHCI driver: Added USBH_EHCI_Config_IgnoreOverCurrent() function which allows to ignore the EHCI overcurrent signal.

Improvements

  1. BULK: Dynamically handle unlimited number of endpoints.
  2. EHCI driver: Improve retry mechanism on packet transfer errors.
  3. EHCI driver: Support interrupt endpoint polling intervals < 1ms.
  4. EHCI driver: Added a workaround for EHCI implementations on the IMX6U5, these MCUs had an issue with recognizing disconnected devices. See USBH_IMX6U5_Add().
  5. General: Added USBH_ConfigPortPowerPinEx() function which additionally takes the host controller index as a parameter.

Program corrections

  1. CDC: When reading a zero length packet with USBH_CDC_Read(.., NULL, 0, ..) the NULL pointer may be used as buffer. Fixed.
  2. BULK: When reading a zero length packet with USBH_BULK_Read(.., NULL, 0, ..) the NULL pointer may be used as buffer. Fixed.
  3. RT1050 driver: Full- and low-speed devices did not work when connected directly to the root hub. Fixed.

Version 2.12a [03. Aug 2018]

New Features

  1. Added support for Renesas RZG1.

Version 2.12 [09. Jul 2018]

New Features

  1. Added the LAN component.

Program corrections

  1. iMX6U5 SOM DUAL Kit configuration file used wrong addresses for calibration registers, this could cause the controller to crash when a device was removed. Fixed.

Version 2.10 [18. Jun 2018]

New Features

  1. Add new configuration for Variscite iMX6U5 SOM DUAL Kit, EHCI controller.
  2. Added support for LPC54xxx devices.

Improvements

  1. CDC: Improved handling of timeouts in USBH_CDC_Read/Write().
  2. CDC: Added support for alternate interfaces.
  3. CDC: Added callback support for the interrupt endpoint (status notification).
  4. CDC: Added function USBH_CDC_SuspendResume which prepares a CDC device for suspend or returns it from resume mode.
  5. BULK: Improved handling of timeouts in USBH_BULK_Read/Write().
  6. BULK: Setup request can be sent to the BULK device.
  7. BULK: An alternate interface setting can now be set for the dedicated interface.
  8. BULK: Extended USBH_BULK_AddNotification to be able to add multiple PnP interface filters.
  9. MSD: Added workaround for devices which can not read/write a large number of sectors with one command.
  10. DWC2 (Synopsys): Removed some delays to speed up enumeration and setup.
  11. DWC2 (Synopsys): Improved handling of blocked channels after disconnect.
  12. HUB: Added new function USBH_HUB_SuspendResume().

Program corrections

  1. DWC2 (Synopsys): Suspend and resume bus did not work correctly. Fixed.
  2. EHCI driver: Suspend and resume bus did not work correctly. Fixed.

Version 2.08a [18. May 2018]

Program corrections

  1. General: USBH_PORT_INFO::HubDeviceId did not show the correct value. Fixed.

Version 2.08 [16. May 2018]

New Features

  1. ATSAMx7: Added support for ATSAMV70/V71/S70/E70 devices.
  2. General: USBH_PORT_INFO structure extended. Allows to retrieve the tree topology of connected USB devices using USBH_GetPortInfo().

Improvements

  1. HID: Improved support for generic input devices (e.g. Touch pads).
  2. BULK: Allow USBH_BULK_Init() to be called multiple times.
  3. CDC: Allow USBH_CDC_Init() to be called multiple times.
  4. embOS RTOS layer is now backwards compatible with versions older than 3.88a.
  5. Renesas: Added support for RX64M (USBA Controller) and RX71M (USBAa - HS Controller)

Program corrections

  1. Renesas: The Renesas HS Driver did not work properly on a big-endian target. Fixed.
    A Renesas Host Controller can generate spurious interrupts on pipes that are not used anymore. Fixed.
    Under some circumstances the FIFO for PIPE0 (Control pipe) could not be selected for sending out a NULL packet to the device. Fixed..

Version 2.07 [23. Feb 2018]

New Features

  1. HID: Added support for generic input devices (e.g. Touch pads).

Improvements

  1. General: Moved definitions of USBH_BOOL, TRUE and FALSE to internal header file to prevent identifier conflicts.
  2. General: Allow to enumerate devices containing ISO endpoints event if ISO support is disabled.

Version 2.06a [19. Jan 2018]

Improvements

  1. HID: New function USBH_HID_GetReportDesc() (supersede USBH_HID_GetReportDescriptor()).
  2. HID: USBH_HID_GetReport() now returns the report size, if using synchronously.
  3. HID: Added "DeviceType" to USBH_HID_DEVICE_INFO which allows to tell whether the device is a mouse, a keyboard or a vendor HID device.
  4. BULK: USBH_BULK_Read/Write() now allows infinite timeout.

Version 2.06 [08. Jan 2018]

New Features

  1. STM32H7xx HS: Added support for STM32H7xx controller.
  2. HID: Added functions USBH_HID_SetIndicators/USBH_HID_GetIndicators which allow manual control over keyboard LEDs.
  3. HID: Added USBH_HID_SetReportEx function which allows the application to use report IDs.

Improvements

  1. HID: New report descriptor parser for mouse devices, reducing memory footprint.
  2. KinetisFS: Changed interrupt IN transfers to comply with the interval time.

Program corrections

  1. General: Enumeration failed, if device reports a serial number with length 0. Fixed.
  2. HID: Report descriptors of some uncommon mouse devices were not parsed correctly. Fixed.
  3. KinetisFS: Fixed setup IN transfers always returned numbytes2read = numbytes. Fixed.

Version 2.04 [11. Dec 2017]

New Features

  1. Added new BULK (vendor) class.

Version 2.02 [30. Nov 2017]

Improvements

  1. MSD: Module refactored. Multiple buffers and unnecessary alloc/free operations removed. TestUnitReady command is now sent alongside of data transmissions instead of via a timer. This slightly improves performance.
  2. MSD: Removed BulkOnlyErrorRecovery support, this feature only caused problems as it re-enumerated the device and expected the application to work with the old handle. This has been replaced by a simple reset, when an MSC device misbehaves it is reset and the user receives a removal and an add notification.
  3. MSD: Changed module to allow devices without storage media to be added successfully (e.g. empty SD card reader). Media can be connected to the device at a later time.
  4. Printer: Module refactored. Adding/removing devices to the module is now handled similarly to the other class modules, via reference counters and timers.

Program corrections

  1. USBH_Exit() may hang if called during port reset. Fixed.
  2. STM32F4/F7 (HS) driver: Setup request may not executed correctly if buffer was not aligned. Fixed.
  3. STM32F4/F7 (HS) driver: USB host controller reset sequence may not work when internal Full-Speed PHY is used. Fixed.
  4. Renesas driver: Interval calculation for interrupt endpoint corrected.
  5. Renesas driver: Setup requests and FIFO access did not work on big endian CPUs. Fixed.
  6. Renesas driver: During parallel transactions interrupts may not be handled correctly. Fixed.
  7. Renesas driver: In certain circumstances a FIFO may get confused if it contained an odd number of bytes. Fixed.
  8. Renesas driver: Data toggle may sometimes not processed correctly. Fixed.
  9. HUB support: Stacking multiple HUBs may lead to problems on disconnect. Fixed.
  10. HUB support: In certain circumstances polling for port status changes was stopped. Fixed.
  11. MSD: USBH_MSD_GetUnits could return an incorrect number of units. Fixed.
  12. MSD: During the data phase a zero length packet would cause the module to wait for the read timeout and would consider it to be an error, which is not correct in some cases. Fixed.
  13. KinetisFS: Check for short packets during the setup data phase was invalid, this would cause devices with any requested descriptor longer than the device's endpoint zero MaxPacketSize to fail enumeration. Fixed.
  14. KinetisFS: On EP0 transactions the driver changed the return status from any error to "not responding". Fixed.
  15. OHCI: When an URB was aborted from inside a completion callback (only happens when a hub is removed with attached devices) the TD lists were modified, this could happen while the abort URB timer was running, which would consequently cause already freed TDs to be used, this in turn could, in rare cases cause a magic assert in the debug build or unpredictable behaviour in the release build. Fixed.

Version 2.00b [17. Oct 2017]

Improvements

  1. OHCI: Improved control and bulk EP removal. Previously endpoint lists would be halted for EP removal which could block a new URB from executing for a short time. In cases where an URB is started from inside a timer routine (like in the MSD class) the URB would always timeout because the endpoint list was disabled and could not be re-enable as it was also done from inside a timer. With this version endpoint lists are no longer halted during removal.

Program corrections

  1. Keil RTX/CMSIS RTX v1 RTOS layers: Removed task lock/unlock from USBH_OS_SignalNetEvent. This could cause send/receive functions to fail under rare circumstances. Fixed.
  2. EHCI: USB Interrupts were not disabled on USBH_Exit(), this could lead to a panic if a new device was connected while emUSB-Host was shut down. Fixed.
  3. Synopsys: USB host controller reset sequence did not work for all MCUs of the STM32F4 family. Fixed.

Version 2.00a [21. Sep 2017]

Program corrections

  1. MSD: 50ms timeout introduced in V2.00 caused communication problems with some USB sticks. Increased timeout for the TestUnitReady command back to 10s because some sticks seem to need this after data has been written onto them. Fixed.

Version 2.00 [14. Sep 2017]

Improvements

  1. General: Refactoring of root port processing, improving error and retry handling and increasing stability.
  2. General: Refactoring of device enumeration processing, improving error and retry handling and increasing stability.
  3. General: Refactoring of external HUB support, improving error and retry handling and increasing stability.
  4. General: Clean-up main header files: Remove unused items, hide static functions and structures.
  5. General: Parsing of USB descriptors improved for correct handling of USB devices with alternate settings.
  6. General: USB ports are now powered down and disabled if over-current is detected. USBH_RestartEnumError() must be called to re-enable ports. Configuring the maximum number of devices and endpoints in USBH_X_Config() in not necessary any more. Code footprint reduced.
  7. HID: Added InterfaceID to USBH_HID_KEYBOARD_DATA, USBH_HID_MOUSE_DATA and USBH_HID_DEVICE_INFO structures to distinguish multiple mouse / keyboard devices.
  8. HID: If a HID device has multiple reports, USBH_HID_GetDeviceInfo/USBH_HID_GetNumDevices can now return size and ID of all reports.
  9. HID: Code and RAM usage reduced, if no mouse device is handled (USBH_HID_SetOnMouseStateChange() not called).
  10. HID: Removed obsolete function USBH_HID_GetReportDescriptorParsed(). Use USBH_HID_GetDeviceInfo/USBH_HID_GetNumDevices instead.
  11. STM32 (DWC2) driver: Workaround for blocked channels implemented: If a channel is blocked after disconnecting a device from a root port, the USB controller is reset to recover the channel.
  12. Renesas driver: Merged RX62 and RZ/A1 USB host driver to one driver and created sub modules to fit the different sub sets (on MCU base) of the controller.
  13. Renesas driver: Code reworked with improvements in stability and memory usage
  14. Renesas driver: Driver is available for RX11x, RX23x, RX62x, RX63x, RX64x, RX65x, RX71x, Synergy platform, RZ/A1.
  15. HID, FT232 and Printer classes: These classes no longer open interfaces exclusively. This allows the user to additionally open the interfaces from the application (which is necessary for most information retrieval API functions).

Program corrections

  1. General: USBH_Task may enter busy loop after ~2.5 hours of inactivity (no USB device connected), giving lower priority tasks no chance to run. Affected versions: V1.30d + V1.30e. Fixed.
  2. General: When a certain USB speed type is not supported, the enumeration may cause a panic or data abort. Fixed.
  3. HID: USBD_HID_SetReport function did not work on HID devices without OUT endpoint. Fixed.
  4. HID: Report descriptors with size > 255 were not handled correctly. Fixed.
  5. STM32 (DWC2) driver: On MCU's using cached memory, setup requests with multiple packet input transfers may read corrupted data from a device. Fixed.
  6. OHCI driver: Refactoring. Reworked interrupt endpoint list handling, in very rare cases it was possible for endpoints to be freed while the host controller was operating on them, resulting in a fatal error. Fixed.

Version 1.30e [17. Jul 2017]

New Features

  1. STM32F4xx/F7xx HS: Added BSP and configuration files for the STM32F769 Discovery evaluation board.

Program corrections

  1. KinetisFS: Token busy flag was not cleared, which could lead to the warning message "Token busy" appearing continuously when a device was disconnected. Fixed.

Version 1.30d [11. Jul 2017]

New Features

  1. STM32F7xx HS: Added support STM32F7xx high-speed controller.
  2. STM32F4xx/F7xx HS: Added support for split transactions.
  3. CDC: Added USBH_CDC_SetOnSerialStateChange(), USBH_CDC_CancelRead(), USBH_CDC_CancelWrite(). These function are not yet documented in this release.

Improvements

  1. HID: Added a simple report descriptor parser which retrieves the report size without allocating memory for the report usage fields. This drastically reduces memory usage when using functions USBH_HID_GetNumDevices and USBH_HID_GetDeviceInfo.

Program corrections

  1. STM32 FS: Transfers on interrupt IN EPs consisting of multiple packets were not handled correctly. Fixed.
  2. STM32 FS: Transfers on control OUT EPs consisting of multiple packets were not handled correctly. Fixed.
  3. STM32F4xx/F7xx HS: Transfers on interrupt EPs consisting of multiple packets were not handled correctly. Fixed.
  4. STM32F4xx/F7xx HS: Aborting of BULK OUT transfers did not work. Fixed.
  5. EHCI: On read requests > 16 KB, short packets were not handled correctly. Fixed.
  6. EHCI: Time for USB reset was sometimes not long enough. Fixed.
  7. EHCI: USBH_Task may enter busy loop after 0x7FFFFFFF ms (~24.8 days) from system start-up, giving lower priority tasks no chance to run. Fixed.
  8. CDC: USBH_CDC_ClrRts() did not work. Fixed.Program correction: CDC: Sending control line state could dereference a NULL pointer resulting in a crash. (Affected API was USBH_CDC_SetDtr, USBH_CDC_ClrDtr, USBH_CDC_SetRts, USBH_CDC_ClrRts, USBH_CDC_SetBreakOn, USBH_CDC_SetBreakOff, USBH_CDC_SetBreak). Fixed.
  9. OHCI: Interval time for interrupt endpoints was always set to 32ms regardless of the value set by the device. Fixed.
  10. OHCI: When a URB was canceled the next consecutive URB on the same endpoint could start with the wrong data toggle value. Fixed.
  11. KinetisFS: When an URB was started, but it could not be completely initialized because the stack was out of memory the pendingURB pointer was not set to NULL, which could cause a crash later on as the stack would try to abort the invalid URB.

Version 1.30c [18. May 2017]

Improvements

  1. CDC: Improved read speed with USBH_CDC_Read when the user is providing a buffer which is a multiple of MaxPacketSize.
  2. EHCI: Added a workaround for a EHCI hardware bug which is present in some EHCI controllers which can cause communication breakdown in rare cases.

Program corrections

  1. Keil RTX/CMSIS RTX v1 RTOS layers: It was possible for the semaphore event counters to overflow which could cause an event to become lost. This could cause communication breakdown under load. Fixed.
  2. General: Depending on timing it was possible for USBH_Exit to cause subsequent re-initialisation of the stack to fail. Fixed.

Version 1.30b [25. Apr 2017]

New Features

  1. STM32F7xx: Added support STM32F7xx full speed controller.

Improvements

  1. STM32 HS/STM32F1 FS/OHCI/KinetisFS: Code reworked with a multitude of improvements to stability.
  2. Memory module: New memory management for lower memory usage.
  3. HUB support: Changed determining the MaxPacketSize for device that are initially enumerated.
  4. HUB support: Reduced the number of AddEndpoint and ReleaseEndpoint calls.
  5. OHCI: Added zero-copy support. Zero-copy is usable when the OHCI controller has full access to the transfer RAM and the device does not use cache.
  6. CDC/FT232/HID: User callbacks (set via USBH_*_RegisterNotification) are no longer called for devices which did not pass initialisation phase (e.g. device was removed during initialisation).
  7. HID: Events are no longer allocated during GetReport/SetReport, but are allocated one at HID_Open and freed at HID_Close. This improves performance.
  8. CDC: Added USBH_CDC_SendEncapsulatedCommand and USBH_CDC_GetEncapsulatedResponse. These functions are not documented yet in this release.

Program corrections

  1. EHCI driver: USB channel was not stopped correctly when releasing an interrupt endpoint. Fixed.
  2. EHCI driver: Interval parameter in interrupt endpoint descriptor was not considered correctly. Fixed.
  3. HUB support: Errors on HUB ports were not handled correctly. Fixed.
  4. HID: InputReportSize/OutputReportSize (retrieved via USBH_HID_GetDeviceInfo) were not set. Fixed.
  5. HID: Fixed an issue where the user callback function pointers were only initialized when async was used. (otherwise when not using async the old value was used (NULL or a function pointer to an async routine)).
  6. CDC: USBH_CDC_Write - pNumBytesWritten was not set correctly. Fixed.

Version 1.30a [06. Mar 2017]

Program corrections

  1. STM32 (DWC2) driver: USB channel was sometimes blocked after detaching a low speed device. Fixed.

Version 1.30 [02. Mar 2017]

New Features

  1. EHCI: Added support for MCUs with cache.

Improvements

  1. General: Changed USBH_GetNumDevicesConnected to work with HCIndex.
  2. General: Class modules and generic code reworked to handle disconnection of devices and stack de-initialisation better. Eliminated the possibility of device objects not being removed when the stack is de-initialised.
  3. General: Removed serial number from USBH_INTERFACE_INFO struct. Added new function USBH_GetInterfaceSerial().
  4. General: Abort URBs are now always allowed through even if the device was removed (otherwise URBs could potentially remain pending forever).
  5. General: Moved utility functions from core and class modules into a new file - USBH_Util.c
  6. CDC: Allowed reading NULL packet with USBH_CDC_Read(). Added MaxPacketSize to CDC_DEVICE_INFO structure.
  7. CDC: Return value of USBH_GetInterfaceDescriptor is now checked (caused an infinite loop when it was not checked and the function failed).
  8. CDC: Fixed length check in the interrupt IN completion routine (caused serial state updates to fail).
  9. CDC: Fixed a potential issue with _AbortEP, it was potentially possible for it to be stuck while waiting for a completed event. _AbortEP no longer waits for anything, the RemovalTimer restarts itself as long as the endpoint has a non-zero ref count.
  10. CDC: Updated module to support any ACM protocol.
  11. Memory module: _Size2Index did not take MIN_BLOCK_SIZE_SHIFT into account. Fixed.
  12. EHCI/OHCI/STM32 FS: Code reworked with a multitude of improvements to stability.
  13. CDC/FT232/MTP/MSD: Reworked to free device instances only from one spot (from the removal timer).
  14. CDC/FT232/MTP/MSD: Where possible replaced USBH_MALLOC with USBH_TRY_MALLOC so that panic is not reported in debug builds, instead USBH_STATUS_RESOURCES is reported to the upper layer(s).

Program corrections

  1. General: Host controller module could pass the virtual memory pointer to the free routine instead of the physical address. Fixed.
  2. General: When a transfer memory pool was not set USBH_Free would try to free any passed address. Fixed.
  3. CDC: USBH_CDC_ReadAsync() InUse was set wrongly. Fixed.
  4. CDC: bRxCarrier and bTxCarrier were swapped. Fixed.
  5. HUB: pEnumDevice and RefCounter were not set back correctly in error cases. This could cause an infinite loop. Fixed.
  6. MSD: If the initialisation of the MSD device failed it was possible to receive a removal notification for the device without a previous add notification. Fixed.

Version 1.20c [28. Sep 2016]

New Features

  1. General: Added the function USBH_SetOnSetPortPower() which allows to register a user callback through which the user is notified when port power is being enabled or disabled.
  2. MSD: Added the function USBH_MSD_SetAheadBuffer() which allows to set your own buffer for the MSD read-ahead cache functionality.

Improvements

  1. General: When a driver is removed all ports which are handled by the driver are now turned off.
  2. General: Sample applications no longer use the printf function and use USBH_Logf_Application instead. This has the advantage that all outputs can be configured in one place (USBH_ConfigIO.c)

Program corrections

  1. CDC: USBH_CDC_Write returned the wrong number of bytes in the pNumBytesWritten parameter. Fixed.

Version 1.20b [09. Jun 2016]

New Features

  1. MTP: Added functions USBH_MTP_CheckLock() and USBH_MTP_SetEventCallback().

Improvements

  1. MSD: The read-ahead cache is no longer a static buffer, but is allocated from the assigned emUSB-Host memory
  2. General: Declared the driver API structures as const. This helps save a bit of RAM.
  3. General: When there are no more instances available for a specific class a panic error is no longer issued, now a warning is issued instead.

Program corrections

  1. Core: When emUSB-Host is being de-initialized via USBH_Exit() it was possible for emUSB-Host to hang in certain conditions. Fixed.
  2. CDC: It was possible for a reference counter to not be decremented when an endpoint was aborted, it could lead to the device reference remaining in memory even after it was removed. Fixed.
  3. FreeRTOS layer: Did not work properly with multiple host controllers. Fixed.
  4. EHCI: When disconnecting a hub which has devices connected to it a re-enumeration would not work. Fixed.
  5. Hub module: When the timing between connecting and reconnecting a hub with connected devices was short enough it was possible for a device instance to remain in memory. Fixed.
  6. MSD: The GetMaxLUN command returned an incorrect value when the MSD interface was not the first interface in a device.
  7. STM32F2xx FS: Communication could break down when the device sends NAKs for a prolonged period of time. Fixed.
  8. STM32F2xx FS: Fixed an issue (or rather a problem with the hardware) where when an URB was open and a device disconnected from the host the controller did not always produce a channel halted interrupt when the corresponding channels were halted which would lead to emUSB-Host leaving the device object with a positive refcount which in turn would lead to memory never being freed and made it impossible to de-initialize the host. Now a driver callback function handles this and completes all aborted URBs.

Version 1.20a [21. Jan 2016]

Program corrections

  1. CDC: USBH_CDC_ReadAsync used wrong buffer to initiate a read transfer. Fixed.

Version 1.20 [08. Jan 2016]

New Features

  1. New Class driver MTP: Added support for Media Transfer Protocol.

Improvements

  1. CDC class: In case of a stall response to a read or write transfer, the endpoint is reset to default by performing a CLEAR_FEATURE_HALT_EP to the USB device.
  2. CDC class: Improved device removal and freeing all resources.
  3. CDC class: USBH_CDC_ReadAsync() uses the complete user buffer to store data received from USB device.

Program corrections

  1. Enumeration: Under some circumstances a disconnect of a USB device during the enumeration phase did not free the memory resources. Fixed.
  2. MSD: ModeSense command was always sent with LUN zero instead of the real LUN. Fixed.
  3. MSD: LUN which cannot be handled by the MSD module (CD-ROM LUNs) are now skipped during device information retrieval.
  4. CDC, FT232: When calling USBH_CDC_Open()/USBH_FT232_Open() with an invalid index, the function could operate on a NULL pointer. Fixed.
  5. HID: Mouse button states were interpreted as signed instead of unsigned.
  6. Debug level: When setting the emUSB-Host stack to a different debug level and re-compile the stack, it could fail. Error was introduced with V1.16d. Fixed.
  7. STM32F2xx: A panic will be shown when using FT232 driver with the above mentioned driver. Error was introduced with V1.16. Fixed.
  8. General: Changed structure BUFFER structure to global USBH_BUFFER.
  9. General: Updated bit-field data type from U32 to unsigned int.
  10. General: Calling USBH_CloseInterface() with a NULL handle could cause a crash. Fixed.
  11. CDC: Added new config flag option: USBH_CDC_DISABLE_INTERFACE_CHECK.
  12. CDC: The reference counter was not decremented in case of an error, results in not removing the detached device instance.Fixed.
  13. CDC: RingBuffer was not freed when the device was removed. Fixed.
  14. CDC: Updated comments.
  15. Core: Updated debug output information in USBH_Init().
  16. Endpoint: Updated USBH_BD_EpUrbCompletion() debug output message.
  17. EHCI: _AddEndpoint: On Error, do not reference the invalid EPInfo pointer.
  18. EHCI: Updated all debug warn and warn messages to output EHCI prefix.
  19. EHCI: The Virtual CPU address was written to the EHCI's frame list register instead of the physical address when using CPUs with virtual memory technology (ARM9, Cortex-A etc). Fixed.
  20. KinetisFS driver: Setup packet was not handled properly. Fixed.
  21. KinetisFS driver: Pass all Pipe number to functions that work with the Pipes.
  22. KinetisFS driver: Reduced delay processing USB reset and attach events.
  23. KinetisFS driver: Return an error in case there is no pipe available to process the desired transfer.
  24. KinetisFS driver: USBH_KINETIS_FS_ReleaseEPx checked for BULK EPs when it was called for INT EP. Code was removed.
  25. KinetisFS driver: Aborting an URB was not working properly. Fixed.
  26. RX driver: Changed #ifdef __GNUC__ to #if (defined __GNUC__) && (defined __RX_LITTLE_ENDIAN__) to avoid warnings with gnu compilers other than GNU RX (KPIT).

Version 1.16e [29. Jul 2015]

Program corrections

  1. Debug level: When setting the emUSB-Host stack to a different debug level and re-compile the stack, it could fail. Error was introduced with V1.16d. Fixed.
  2. STM32F2xx: A panic will be shown when using FT232 driver with the above mentioned driver. Error was introduced with V1.16. Fixed.

Version 1.16d [17. Jun 2015]

New Features

  1. General: Added support for adding multiple instance of USB host drivers.
  2. CDC class: Added USBH_SPEED to structure USBH_CDC_DEVICE_INFO. This structure is used by USBH_CDC_GetDeviceInfo().
  3. Debug I/O: Added SEGGER's Real Timer Terminal as a possible configuration for terminal I/O.
  4. Added the Renesas RZ/A1 driver.

Improvements

  1. Enumeration: Changed the enumeration sequence to be 100% compatible to the USB 2.0 specification. Previously the first device descriptor request and the second reset in the enumeration procedure have been skipped.
  2. STM32F2 drivers: Added a check for a rare occurrence where an interrupt is triggered by the USB controller even though the interrupt is disabled.
  3. CDC class: If an endpoint of a CDC device is in stall state, the class driver automatically put the endpoint back to normal state.

Program corrections

  1. Memory module: In very rare cases (where memory was allocated/freed, e.g. during enumeration) it was possible for the pNext pointer of MEM_POOL_FREE to be overwritten which caused unpredictable behaviour. Fixed.

Version 1.16c [13. May 2015]

Improvements

  1. CDC class driver: Added USBH_SPEED to the USBH_CDC_DEVICE_INFO structure, determining the USB speed of the connected device.

Program corrections

  1. CDC class driver: When sending control command (LINE_CODING, SERIAL_STATE) via EP0 the wrong interface was used to send the command. Fixed.
  2. CDC class driver: Under some circumstances the serial serial completion routine for the interrupt endpoint was called with wrong data. Fixed.
  3. EHCI driver: For control data transfers with no data stage (wLength = 0), an additional transfer descriptor was allocated and triggered even though it was not necessary. It may result that the next control transfers is canceled. Fixed.
  4. EHCI driver: Disabling a USB port was not implemented. Fixed.
  5. USB Hub: When using a high-speed controller and USB hubs (full-speed and high-speed) to communicate with full-speed or low-speed device (done with split transactions), the address of the hub was wrongly set. Fixed.

Version 1.16b [09. Feb 2015]

Program corrections

  1. FT232 class driver: USBH_FT232_Exit did not zero out the global variables used by the FT232 module, which resulted in undefined behaviour during a re-initialization. Fixed.
  2. STM32F2xx FS driver: Under special circumstances the interrupts were enabled multiple times, which resulted in a USBH_Panic message. Fixed.

Version 1.16a [04. Feb 2015]

New Features

  1. EHCI driver: Added a new function USBH_EHCI_Config_SetM2MEndianMode()".

Version 1.16 [08. Dec 2014]

New Features

  1. CDC class: Added a new function USBH_CDC_SetConfigFlags()".

Program corrections

  1. STM32F2xx FS/HS driver: When a URB was aborted the driver would wrongly schedule the next URB. Fixed.
  2. embOS layer: Changed USBH_OS_WaitEventTimed to make sure the function waits at least one millisecond. Previously it was possible that the function has been called with a timeout of one millisecond, and the timer interrupt would occur right after the function was called, which would result in an actual delay of a few microseconds. Fixed.

Version 1.15b [29. Aug 2014]

New Features

  1. Core: Added functions to allocate/free an URB.
  2. CDC class: Added new functions to add/remove "CDC compliant devices".

Improvements

  1. Renesas RX driver: Added DiCnt in order to make USBH_RX_xxxInterrupt() re-entrant.
  2. Freescale Kinets FullSpeed driver: Added workaround for the reset USB controller reset, as the USB core reset bit does not work.

Program corrections

  1. MSD driver: It was possible that the MSC device is accessed by emUSBH through the API before it was ready. Fixed.
  2. Device Enumeration: Size of the config descriptor was not retrieved correctly. StringDescriptor LangId was not set-up correctly. (U8 instead of U16)

Version 1.14d [13. May 2014]

Improvements

  1. OHCI driver: Replaced a while(1); loop which was called in case of a fatal error with USBH_PANIC.
  2. Core: The default setup was increased to 2 sec instead of 500ms this allows buggy devices to enumerate properly.

Program corrections

  1. OHCI: The number of allocated transfer buffers did not match the number of configured endpoints. Fixed.
  2. EHCI: When an async QH was reused to submit a new transfer, the QH was linked twice into async list of the EHCI controller. Fixed.

Version 1.14c [28. Apr 2014]

Program corrections

  1. RX62N: Some STALL responses were not recognized when the low bit of the PID token was set. Fixed.
  2. USBH_MSD_FS_Driver: When retrieving the device information of the device, the wrong return type was checked to recognize any error condition. Fixed.
  3. EHCI: When retrieving a QTD, the wrong pointer was checked in case of an error condition. Fixed.

Version 1.14b [01. Apr 2014]

Program corrections

  1. RX62N: Under some circumstances the USB interrupts could not be restored properly. Fixed.

Version 1.14a [20. Mar 2014]

New Features

  1. Added support function to retrieve port information of an interface/device.

Improvements

  1. RX600 driver: Reduced the interrupt disable/enable time. Driver disables the interrupt only in very critical situations.

Program corrections

  1. FT232: When reading less bytes than received by the FT232 device, the FT232 driver ran into a panic because the data could not stored in the ring buffer. Fixed.
  2. STM32F2xx HS: Transfer error of bulk endpoints was not handled which results in re-calling the ISR task every time. Fixed.

Version 1.12h [04. Mar 2014]

Improvements

  1. Added support for Virtual to physical translation for the EHCI driver .

Program corrections

  1. EHCI: Removing and adding a device could cause a NULL pointer de-reference. Fixed.
  2. Control/Enumeration URB: When sending a control/setup packet, the data buffer could greater than specified in the setup packet which could cause the USB host driver to hang. Fixed.

Version 1.12g [24. Feb 2014]

Program corrections

  1. RX62N: Always true condition led to wrong assumptions about the device status. Fixed.

Version 1.12f [21. Feb 2014]

Program corrections

  1. Compiling: Compiling on a case sensitive file system could fail. Fixed.
  2. EHCI driver: Releasing endpoint handles by removing a USB device was not handled properly. Fixed.

Version 1.12e [10. Feb 2014]

Program corrections

  1. STM32F2xx FS driver: FIFO ram assignment is lost by the OTG_FS controller. Fixed.
  2. STM32F2xx FS driver: BULK and control data transfer did not work properly. Fixed.
  3. FT232 driver: When removing a FT232 device the ring buffer was not freed which results in a memory leak. Fixed.
  4. CDC driver: When removing a CDC device the ring buffer/instance was not freed which results in a memory leak. Fixed.
  5. MSD FS driver: The wrong unit number for the second, third etc MSD was assigned. Fixed.

Version 1.12d [02. Dec 2013]

Program corrections

  1. OHCI driver: With the virtual-to-physical translation, transmitting zero-length-packets did not work properly. Fixed.

Version 1.12c [18. Oct 2013]

Improvements

  1. Added support for the second USB controller for the NXP LPC43xx (USB1).

Program corrections

  1. EHCI driver: Full speed device were detected as high-speed devices. Fixed.

Version 1.12b [27. Sep 2013]

Improvements

  1. USB-Host Hub driver has been improved to handle low-speed devices efficiently.
  2. The CDC class driver stability has been improved.
  3. The Plug&Play handling for the CDC class driver has been improved.
  4. The Plug&Play handling for the FT232 class driver has been improved.
  5. The HID driver class now parses newer HID mouse's descriptors properly, reported movement values are now proportional to the physical movement.
  6. OHCI driver can now handle memory mapping via virtual memory addresses.

Program corrections

  1. FT232 class driver: The FT232 latency time was retrieved as zero on enumeration. Fixed.

Version 1.10g [31. Jan 2013]

Program corrections

  1. STM32 F2/F4 HS driver: When the internally full-speed was used, the data communication did not work properly. Fixed.

Version 1.10f [19. Dec 2012]

Improvements

  1. Reduced the CPU load when using the FT232 class driver with any ST32F host driver.

Program corrections

  1. USB CDC: USBH_CDC_Read() did not return the correct data. Fixed.
  2. USB hub: When clearing a USB hub feature the wrong feature was generated. Fixed.

Version 1.10e [28. Nov 2012]

New Features

  1. Added PHY selection for ST STM32F2/F4 USB Highspeed host controller - Available modes are use external ULPI PHY or the internal FS PHY.

Version 1.10d [27. Sep 2012]

New Features

  1. Added support for ST STM32F2/F4 USB Highspeed host controller.

Version 1.10c [16. Sep 2012]

New Features

  1. Added support for Freescale Kinetis USB Fullspeed host controller.

Version 1.10b [11. Sep 2012]

Program corrections

  1. STM32 drivers: When enumeration times out the completion routine after sending a abort to the driver was not called. Fixed.

Version 1.10a [26. Jun 2012]

New Features

  1. Added support for CDC-ACM (serial port) devices.

Version 1.08d [14. Feb 2012]

Improvements

  1. Improved MSD handling.

Program corrections

  1. RX62N/621: When disconnect, reconnect a USB device very quickly, wrong data could be sent to the reconnected device. OUT-FIFO clear was not executed as expected. Fixed.

Version 1.08c [14. Dec 2011]

New Features

  1. Added new configuration function (USBH_ConfigPowerOnGoodTime) in order to change the value after which time the device shall be enumerated after it has been attached/detected.
  2. Added support for FTDI FT232 devices.

Improvements

  1. Changed the power good time value for Renesas RX driver to 150ms.
  2. Changed the power good time value for Atmel AVR32 driver to 150ms.
  3. Changed the power good time value for ST STM32F10x driver.

Version 1.08b [05. Dec 2011]

Improvements

  1. Added support for big-endian support for Renesas RX driver.

Version 1.08a [14. Nov 2011]

New Features

  1. Added new driver for Atmel AVR32 UCA/UCB series.
  2. Added support for FTDI FT232 devices.

Improvements

  1. Improved De-initialization of emUSB Host.
  2. Reduced RAM usage for Renesas RX driver.
  3. Improved error handling of emUSBH MSD.

Version 1.06c [28. Oct 2011]

Improvements

  1. Improved handling of Transcend USB sticks by using a read ahead cache.

Program corrections

  1. RX62N: When using the Renesas RX compiler, the compiler generate wrong access to USB register. Fixed.

Version 1.06b [15. Jul 2011]

Improvements

  1. Improved handling of when OS-resources are not available.
  2. Improved speed of Renesas RX62N host controller.

Program corrections

  1. Renesas RX62 host driver: Interrupts requests were lately cleared which caused on heavy CPU usage that even interrupt requests were cleared which were not handled. Fixed.

Version 1.06a [15. Jun 2011]

New Features

  1. Added new driver for Renesas RX62 series.
  2. Added callback to set the configuration during enumeration.

Improvements

  1. Changed most USB compile time switches to run-time switches such as ExternalHubSupport, MaxDevices, MaxEndPoints, ConfigureRootHub.
  2. Reduced memory consumption of the OHCI and STM32 driver.
  3. Improved handling of HID devices.

Program corrections

  1. HID: When connecting/disconnecting not all resources were freed. Fixed.
  2. MSD: When a USB stick was plugged in and the device did not work properly, the system could hang when the USB stick was plugged out. Fixed.
  3. Core: When more than 127 connects/disconnects were done, emUSBH reports an error that there were no free address available. Fixed.

Version 1.02b [08. Nov 2010]

Improvements

  1. Improved MSD compatibility.

Version 1.02a [09. Jul 2010]

New Features

  1. Added Printer class.

Improvements

  1. Changed many compile-time switches to run-time switches.
  2. Improved MSD compatibility.

Version 1.00a [09. Jun 2009]

New Features

  1. Initial version.