USB Component  Version 5.1
MDK-Professional Middleware for USB Device and Host
 All Data Structures Functions Variables Enumerations Enumerator Groups Pages
Resource Requirements

This section describes the resource requirements of the USB component. The actual requirements depend on the components used in the application and the configuration of these components.

USB Device Resource Requirements

The following section documents the requirements for the USB Device Component.

CMSIS-RTOS Requirements

The USB Device component uses CMSIS-RTOS threads. Each instance of a component starts its own threads, for example two HID instances start two threads with the name: USBD_HID0_Thread, USBD_HID1_Thread. The thread execution starts with USBD_Initialize. All threads execute with priority osPriorityAboveNormal on an user-provided stack.

The following table lists the components, number of threads executed along with thread name, the default stack size, and the configuration file with OS Resource Settings for stack size adjustments.

Component Threads / Thread Name Default Stack Size Configuration File
::USB:Device 1 / USBDn_CoreThread 512 Bytes USBD_Config_n.c
::USB:Device:ADC 1 / USBD_ADCn_Thread 512 Bytes USBD_Config_ADC_n.c
::USB:Device:CDC 2 / USBD_CDCn_Bulk_Thread, USBD_CDCn_Int_Thread 512 Bytes USBD_Config_CDC_n.c
::USB:Device:Custom Class 1...15 / USBD_CustomClassn_EPm_Thread 512 Bytes USBD_Config_CustomClass_n.c
::USB:Device:HID 1 / USBD_HIDn_Thread 512 Bytes USBD_Config_HID_n.c
::USB:Device:MSC 1 / USBD_MSCn_Thread 512 Bytes USBD_Config_MSC_n.c

n is instance number, m is Endpoint number 1...15

Note
For ::USB:Device:Custom Class each endpoint executes a thread. The number of threads depends on the number of endpoints enabled in the configuration file USBD_Config_CustomClass_n.c.

For the USB Device component, the number of threads and thread stack size requirements are calculated as follows:

  • Number of Threads: add all threads of enabled components listed above.
  • Total stack size: add the stack sizes of the related threads.

With default stack size of 512 Bytes, the Total stack size is Number of Threads * 512 Bytes. When the default OS Resource Settings are modified, the changes need to be considered for the calculation of the Total stack size.

Examples (with default stack size 512 Bytes):

  • USB Device with HID uses 2 threads (1 for USB Device + 1 for HID) and 1024 Bytes stack.
  • Composite USB Device with HID and MSC uses 3 threads (1 for USB Device + 1 for HID + 1 for MSC) and 1536 Bytes stack.
  • USB Device with CDC uses 3 threads (1 for USB Device + 2 for CDC) and 1536 Bytes stack.
  • USB Device with Custom Class that has 3 endpoints uses 4 threads (1 for USB Device + 3 for Custom Class) and 2048 Bytes stack.

The thread requirements need to be reflected in the CMSIS-RTOS configuration. Refer to the CMSIS-RTOS Reference for further details.

For CMSIS-RTOS RTX, the threads requirements are configured in the RTX_Conf_CM.c file located in the CMSIS components.

Option (under section Thread Configuration) Increase Value by
Number of concurrent running threads + Number of Threads
Number of threads with user-provided stack size + Number of Threads
Total stack size [bytes] for threads with user-provided stack size+ Total stack size

System Configuration

The ::USB:Device:HID component requires User Timers to be selected. The Timer Thread Stack is commonly used by all threads working with User Timers. Depending on the application and the further usage of the timers, the Timer Thread stack size needs to be increased accordingly.

Stack Requirements

The USB Device Core is called by interrupt service routines (ISR) from the USB Device Driver. The stack requirements for the ISR are typically less than 512 Bytes. The total stack space required for ISR depends on the interrupt nesting and therefore on the priority settings of these ISR. The stack requirements for ISR is configured in the startup_device.s file located in the Device components.

Option (under section Stack Configuration) Increase Value by
Stack Size (in Bytes) + 512 for USB Device Driver
Note
When using a CMSIS-RTOS, the Stack Size in the startup_device.s file configures only the stack space that is used by exception and interrupt service routines. The stack size requirements depend on the maximum nesting of exception and ISR execution and therefore on the priority settings of the various interrupt and exception sources.

User code that calls API functions of the USB Device Component should have a mimimum of 512 Bytes of stack space available. Since API functions are frequently called from threads, the thread stack size should be at least 512 Bytes.

Memory Requirements

The following table shows the memory requirements for read-only (Flash) and read-write (RAM) memory. These numbers may be used to estimate the total size requirements of the application, but the actually numbers depend on compiler optimizations and target processor and may be therefore slightly different.

Component RO Memory [Bytes] RW Memory (Data) [Bytes]
::USB:Core 5.0 k < 200
::USB:Device:ADC 1.2 k < 40 + Subframe Size (configured in USBD_Config_ADC_n.h)
::USB:Device:HID 2.6 k < 70 + Report Sizes (configured in USBD_Config_HID_n.h)
::USB:Device:MSC 4.0 k 96 + Bulk Buffer Size (configured in the USBD_Config_MSC_n.h)
::USB:Device:CDC 2.1 k < 40 + Send/Receive Buffer Size (configured in the USBD_Config_CDC_n.h)
::USB:Device:Custom Class 2.4 k < 30
USB Device Driver 1 .. 4 k 0.5 .. 4 k

USB Host Resource Requirements

Todo:
make this similar to USB Device section above

Stack/Heap Requirements

The following requirements can be changed in the startup_device.s file (below the Device component class).

Type Size Description
Stack Size (in Bytes)min. 6KB Depends on functionality used
Heap Size (in Bytes) min. 334 Bytes

Special Memory Requirements

State your requirements here.

CMSIS-RTOS Requirements

The component uses CMSIS-RTOS functionality and defines the following threads.

For CMSIS-RTOS RTX, the following requirements can be changed in the RTX_Conf_CM.c file (below the CMSIS component class). For corresponding settings, please refer to the user's guide of your selected RTOS.

Option Value Note
Number of concurrent running threads
Default Thread stack size [bytes]
Main Thread stack size [bytes]
Number of threads with user-provided stack size
Total stack size [bytes] for threads with user-provided stack size