Copyright © 2015 STMicroelectronics
The USB device library comes on top of the STM32Cube™ USB device HAL driver and offers all the APIs required to develop an USB device application.
The main USB device library features are:
Here is the list of references to user documents:
| Headline |
|---|
| USB Core: |
| Minor enhancement; add a check on device string descriptor length |
| USB DFU Class: |
| Improve DFU Vendor Commands support |
| Headline |
|---|
| USB Core: |
| Adding user callback to get device configuration state |
| USB DFU Class: |
| Adding DFU Vendor Commands support |
| USB MSC Class: |
| fix data sense response to be aligned with SBC-3 specification |
| USB AUDIO Class: |
| restart AUDIO ISO endpoint during ISO incomplete event |
| USB VIDEO Class: |
| restart VIDEO ISO endpoint during ISO incomplete event |
| Headline |
|---|
| Improvement of the memory management |
| USB Core: |
| Fix some compilation warnings related to unused parameters |
| Improve some code parts style |
| Add check on the USB Device status in USBD_LL_Suspend before suspending it |
| USB CDC-ACM Class: |
| Remove redundant prototype declaration of USBD_CDC_GetOtherSpeedCfgDesc() |
| USB CompositeBuilder, CCID, CDC_ECM, CDC_RNDIS, CustomHID, MSC & Video Classes: |
| Improve some code parts style |
| Headline |
|---|
| USB VIDEO Class: |
| Correction of the support of VS_PROBE_CONTROL & VS_COMMIT_CONTROL requests |
| USB AUDIO Class: |
| Correction of the check on AUDIO_TOTAL_BUF_SIZE to avoid vulnerabilities |
| USB HID Class: |
| Modification of some constants names to avoid duplication versus USB host library |
| USB CustomHID Class: |
| Add support of Get Report control request |
| Allow disabling EP OUT prepare receive using a dedicated macros that can be defined in usbd_conf.h application file |
| Add support of Report Descriptor with length greater than 255 bytes |
| USB CCID Class: |
| Fix minor Code Spelling warning |
| USB All Classes: |
| Update all classes to support composite multi-instance using the class id parameter |
| Fix code spelling and improve code style |
| fix misraC 2012 rule 10.3 |
| Headline |
|---|
| Integration of new USB device Class driver: |
| Adding support of Composite devices with an auto generation of composite device configuration descriptors |
| USB All Classes: |
| Fix Code Spelling and improve Code Style |
| Update device class drivers to support Composite devices |
| Improve declaration of USB configuration descriptor table which is allocated if the composite builder is not selected |
| Headline |
|---|
| Integration of new USB device Class driver: |
| USB CCID Class driver based on Universal Serial Bus Device Class Definition for Integrated Circuit(s) Cards Interface Devices Revision 1.1 |
| USB MTP Class driver based on Universal Serial Bus Device Class Media Transfer Protocol Revision 1.1 |
| USB All Classes: |
| Fix Code Spelling and improve Code Style |
| Update the way to declare licenses |
| USB CDC/RNDIS/ECM Classes: |
| Fix compilation warning with C++ due to missing casting during class handler allocation |
| Headline |
|---|
| Integration of new USB device Class driver: |
| USB Printer Class driver based on Universal Serial Bus Device Class Definition for Printing Devices Version 1.1 |
| USB All Classes: |
| Fix USB buffer overflow vulnerability for CDC, CDC-ECM, CDC-RNDIS, DFU, AUDIO, CustomHID, and Video Classes |
| Fix compilation warning with C++ due to missing casting during class handler allocation |
| Enhance comments of USB configuration descriptors fields |
| USB Video Class: |
| Fix missing closing bracket for extern “C” in usbd_video.h |
| Fix USBCV test with Uncompressed video format support |
| Headline |
|---|
| USB All Class: Add NULL pointer access check to Class handler |
| Headline |
|---|
| Integration of new USB device Class driver: |
| USB video Class driver based on USB-IF video class definition version 1.1 |
| USB Core: |
| Enhance NULL pointer check in Core APIs |
| Allow supporting both USER and USER Class string desc |
| Add support of USB controller which handles packet-size splitting by hardware |
| Avoid compilation warning due macro redefinition |
| change added to USBD_HandleTypeDef structure: dev_state, old_dev_state and ep0_state declaration become volatile to disable compiler optimization |
| Word spelling correction and file indentation improved |
| usbd_conf.h/c Template file updated to suggest using by default a static memory allocation for Class handler |
| USB All Classes: |
| Word spelling correction and file indentation improved |
| Allow updating device config descriptor Max power from user code usbd_conf.h using USBD_MAX_POWER define |
| Fix device config descriptor bmAttributes value which depends on user code define USBD_SELF_POWERED |
| USB CDC Class: |
| Class specific request, add protection to limit the maximum data length to be sent by the CDC device |
| USB CustomHID Class: |
| Allow changing CustomHID data EP size from user code |
| Headline |
|---|
| Fix minor misra-c 2012 violations |
| USB Core: |
| minor rework on USBD_Init() USBD_DeInit() |
| Fix warning issue with Keil due to missing return value of setup API |
| USB CDC Class: |
| Fix file indentation |
| Avoid accessing to NULL pointer in case TransmitCplt() user fops is not defined to allow application compatibility with device library version below v2.6.0 |
| Headline |
|---|
| Integration of three new USB device Class drivers:CDC ECM , CDC RNDIS Microsoft, USB Billboard |
| Fix mandatory misra-c 2012 violations |
| update user core and class template files |
| USB Core: |
| Fix unexpected EP0 stall during enumeration phase |
| Improve APIs error management and prevent accessing NULL pointers |
| USB MSC Class: |
| Fix USBCV specific class tests |
| Fix multiple error with SCSI commands handling |
| Protect medium access when host ask for medium ejection |
| USB CDC Class: |
| Add new function to inform user that current IN transfer is completed |
| update transmit and receive APIs to transfer up to 64KB |
| USB AUDIO Class: |
| Fix audio sync start buffer size |
| update user callback periodicTC args by adding pointer to user buffer and size |
| USB CustomHID Class: |
| Rework the OUT transfer complete and prevent automatically re-enabling the OUT EP |
| Add new user API to restart the OUT transfer: USBD_CUSTOM_HID_ReceivePacket() |
| Headline |
|---|
| Fix misra-c 2012 high severity violations |
| Core driver: |
| protect shared macros __ALIGN_BEGIN, __ALIGN_END with C directive #ifndef |
| update Core driver and DFU Class driver to use USBD_SUPPORT_USER_STRING_DESC instead of USBD_SUPPORT_USER_STRING |
| prevent accessing to NULL pointer if the get descriptor functions are not defined |
| Update on USBD_LL_Resume(), restore the device state only if the current state is USBD_STATE_SUSPENDED |
| Headline |
|---|
| DFU Class: fix compilation warning due to unreachable instruction code introduced with CMSIS V5.4.0 NVIC_SystemReset() prototype change |
| Headline |
|---|
| Update license section by adding path to get copy of ST Ultimate Liberty license |
| Core: Fix unexpected stall during status OUT phase |
| DFU Class: rework hdfu struct to prevent unaligned addresses |
| MSC Class: fix lba address overflow during large file transfers greater than 4Go |
| Template Class: add missing Switch case Break on USBD_Template_Setup API |
| Headline |
|---|
| Update license section |
| Update some functions to be MISRAC 2004 compliant |
| Add HS and OtherSpeed configuration descriptor for HID and CustomHID classes |
| Correct error handling in all class setup function |
| Add usbd_desc_template.c/ usbd_desc_template.h templates files |
| Add support of class and vendor request |
| CDC Class: fix zero-length packet issue in bulk IN transfer |
| Fix compilation warning with unused arguments for some functions |
| Improve USB Core enumeration state machine |
| Headline |
|---|
| CDC Class |
| usbd_cdc.c: change #include “USBD_CDC.h” by #include “usbd_cdc.h” |
| Headline |
|---|
| CDC Class |
| usbd_cdc.c: comments update |
| MSC Class |
| usbd_msc_bot.h: update to be C++ compliant |
| AUDIO Class |
| usbd_audio.c: fix issue when Host sends GetInterface command it gets a wrong value |
| usbd_audio.c: remove useless management of DMA half transfer |
| Headline |
|---|
| Core Driver |
| Add support of Link Power Management (LPM): add new API GetBOSDescriptor(), that is used only if USBD_LPM_ENABLED switch is enabled in usbd_conf.h file |
| usbd_core.c: Fix bug of unsupported premature Host Out stage during data In stage (ie. when endpoint 0 maximum data size is 8 and Host requests GetDeviceDescriptor for the first time) |
| usbd_ctlreq.c: Fix bug of unsupported Endpoint Class requests (ie. Audio SetCurrent request for endpoint sampling rate setting) |
| HID Class |
| Updating Polling time API USBD_HID_GetPollingInterval() to query this period for HS and FS |
| usbd_hid.c: Fix USBD_LL_CloseEP() function call in USBD_HID_DeInit() replacing endpoint size by endpoint address. |
| CDC Class |
| usbd_cdc.c: Add missing GetInterface request management in USBD_CDC_Setup() function |
| usbd_cdc.c: Update USBD_CDC_Setup() function to allow correct user implementation of CDC_SET_CONTROL_LINE_STATE and similar no-data setup requests. |
| Headline |
|---|
| Update all drivers to be C++ compliant |
| CDC Class |
| usbd_cdc.c: fix clear flag issue in USBD_CDC_TransmitPacket() function |
| usbd_cdc_if_template.c: update TEMPLATE_Receive() function header comment |
| Miscellaneous source code comments update |
| Headline |
|---|
| Source code comments review and update |
| HID class |
| Remove unused API USBD_HID_DeviceQualifierDescriptor() |
| Add a new API in the HID class to query the poll time USBD_HID_GetPollingInterval() |
| CDC class |
| Bug fix: missing handling ZeroLength Setup request |
| All classes |
| Add alias for the class definition, it’s defined as macro with capital letter |
| ex. for the HID, the USBD_HID_CLASS macro is defined this way #define USBD_HID_CLASS &USBD_HID |
| and the application code can use the previous definition: &USBD_HID ex. USBD_RegisterClass(&USBD_Device, &USBD_HID) or the new USBD_HID_CLASS ex. USBD_RegisterClass(&USBD_Device, USBD_HID_CLASS) |
| Headline |
|---|
| usbd_conf_template.c: update file with the right content (it was using MSC memory management layer) |
| usbd_conf_template.h: change include of stm32f4xx.h by stm32xxx.h and add comment to inform user to adapt it to the device used |
| Several enhancements in CustomHID class |
| Update the Custom HID class driver to simplify the link with user processes |
| Optimize the Custom HID class driver and reduce footprint |
| Add USBD_CUSTOM_HID_RegisterInterface() API to link user process to custom HID class |
| Add Custom HID interface template file usbd_customhid_if_template.c/h |
| Miscellaneous comments update |
Major update based on STM32Cube specification.
| Headline |
|---|
| Library Core, Classes architecture and APIs modified vs. V1.1.0, and thus the 2 versions are not compatible. |
This version has to be used only with STM32Cube based development
| Headline |
|---|
| Official support of STM32F4xx devices |
| All source files: license disclaimer text update and add link to the License file on ST Internet. |
| Handle test mode in the set feature request |
| Handle dynamically the USB SELF POWERED feature |
| Handle correctly the USBD_CtlError process to take into account error during Control OUT stage |
| Miscellaneous bug fix |
First official version for STM32F105/7xx and STM32F2xx devices