USB Component
Version 6.17.0
MDK Middleware for USB Device and Host Communication
|
This section describes the resource requirements of the USB component.
The following section documents the requirements for the USB Device component. The actual requirements depend on the components used in the application and the configuration of these components.
The USB Device Core receives events sent from the interrupt service routine (ISR) of 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 are configured in the startup_device.s file located under the Device component class.
Option (under section Stack Configuration) | Increase Value by |
---|---|
Stack Size (in Bytes) | + 512 for USB Device Driver |
User code that calls API functions of the USB Device Component should have a minimum 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 (see below).
Currently, the USB Device component works in four different RTOS configurations:
The USB Device component uses 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.
The following table lists the components, number of threads, thread name, default thread priority, default stack size and the configuration file with OS Resource Settings for stack size adjustments.
Component | Number of Threads | Thread Name | Default Priority | Default Stack Size | Configuration File |
---|---|---|---|---|---|
::USB:Device | 1 | USBDn_Core_Thread | osPriorityAboveNormal | 512 Bytes | USBD_Config_n.c |
::USB:Device:ADC | 1 | USBD_ADCn_Thread | osPriorityAboveNormal | 512 Bytes | USBD_Config_ADC_n.c |
::USB:Device:CDC | 2 | USBD_CDCn_Bulk_Thread, USBD_CDCn_Int_Thread | osPriorityAboveNormal | 512 Bytes | USBD_Config_CDC_n.c |
::USB:Device:Custom Class | 1...15 | USBD_CustomClassn_EPm_Thread | osPriorityAboveNormal | 512 Bytes | USBD_Config_CustomClass_n.c |
::USB:Device:HID | 1 | USBD_HIDn_Thread | osPriorityAboveNormal | 512 Bytes | USBD_Config_HID_n.c |
::USB:Device:MSC | 1 | USBD_MSCn_Thread | osPriorityAboveNormal | 512 Bytes | USBD_Config_MSC_n.c |
n is instance number, m is Endpoint number 1...15
The USB Device component allocates all necessary resources statically so no changes to RTX settings are necessary.
For the USB Device component, the number of threads and thread stack size requirements are calculated as follows:
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 of 512 Bytes):
Requirements are configured in the file located under the CMSIS component class:
Option | Value |
---|---|
Number of concurrent running user 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 |
Option | Value |
---|---|
User Timers | Enable |
Timers
The ::USB:Device:HID component requires timers which need to be enabled in RTOS.
Semaphores
Number of semaphores used by the USB Device components:
Component | Number of Semaphores per instance |
---|---|
::USB:Device | 3 |
::USB:Device:ADC | 1..2 |
::USB:Device:CDC | 3 |
::USB:Device:Custom Class | 1..30 |
::USB:Device:HID | 1 + 1..2 |
::USB:Device:MSC | 2 |
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 actual numbers depend on compiler optimizations and target processor and may be therefore slightly different.
Component | RO Memory [Bytes] | RW Memory (Data) [Bytes] |
---|---|---|
::USB:Core (Device) | 6.0 k | < 470 |
::USB:Device:ADC | 2.5 k | < 110 + Audio Subframe Sizes * Buffer Sizes (configured in the USBD_Config_ADC_n.h) |
::USB:Device:HID | 2.7 k | < 130 + Maximum Report Sizes (configured in the USBD_Config_HID_n.h) |
::USB:Device:MSC | 4.1 k | < 160 + Maximum Bulk Buffer Size (configured in the USBD_Config_MSC_n.h) |
::USB:Device:CDC ACM | 3.2 k | < 220 + Maximum Send/Receive Buffer Sizes (configured in the USBD_Config_CDC_n.h) |
::USB:Device:Custom Class | 2.0 k | < 80 |
USB Device Driver | 1 .. 4 k | 0.5 .. 4 k |
The following section documents the requirements for the USB Host component. The actual requirements depend on the components used in the application and the configuration of these components.
The USB Host Core receives events sent from the interrupt service routine (ISR) of the USB Host 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 Host Driver |
User code that calls API functions of the USB Host Component should have a minimum 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.
Currently, the USB Host component works in four different RTOS configurations:
The USB Host component uses threads. Each USB Host instance starts its own thread (USBHn_Core_Thread). The thread execution starts with USBH_Initialize. Additionally each instance of HID and CDC class also start their own thread (USBH_HIDn_IntIn_Thread or USBH_CDCn_IntIn_Thread) when HID or CDC device is connected.
The following table lists the components, number of threads, thread name, default thread priority, default stack size and the configuration file with OS Resource Settings for stack size adjustments.
Component | Number of Threads | Thread Name | Default Priority | Default Stack Size | Configuration File |
---|---|---|---|---|---|
::USB:Host | 1 | USBHn_Core_Thread | osPriorityAboveNormal | 1024 Bytes | USBH_Config_n.c |
::USB:Host:CDC | 1 | USBH_CDCn_IntIn_Thread | osPriorityAboveNormal | 512 Bytes | USBH_Config_CDC.h |
::USB:Host:HID | 1 | USBH_HIDn_IntIn_Thread | osPriorityAboveNormal | 512 Bytes | USBH_Config_HID.h |
n is instance number
The USB Host component allocates all necessary resources statically so no changes to RTX settings are necessary.
For the USB Host component, the number of threads and thread stack size requirements are calculated as follows:
With default stack sizes as defined above the Total stack size is sum of Default Stack Sizes. 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 sizes):
Requirements are configured in the file located under the CMSIS component class:
Option | Value |
---|---|
Number of concurrent running user 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 |
Option | Value |
---|---|
User Timers | Enable |
Timers
The ::USB:Host component requires timers which need to be enabled in RTOS.
Semaphores
The ::USB:Host component uses one semaphore per instance.
Mutexes
The ::USB:Host component uses one mutex per instance.
Signals
Any user thread using USB Host transfer functions is blocked internally in the library by waiting on signals. Signals (bits 0. to 12.) are reserved for the USB Host communication and must not be used by the user application in that thread.
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 actual numbers depend on compiler optimizations and target processor and may be therefore slightly different.
Component | RO Memory [Bytes] | RW Memory (Data) [Bytes] |
---|---|---|
::USB:Core (Host) | < 9.5 k | < 370 + Memory Pool Size (configured in the USBH_Config_n.c) |
::USB:Host:HID | < 1.3 k | < 70 |
::USB:Host:MSC | < 3.4 k | < 40 |
::USB:Host:CDC | < 1.0 k | < 30 |
USB Host OHCI support | < 3.5 k | < 0.5 k |
USB Host EHCI support | < 5.0 k | < 4.5 k |