Synergy Software Package User's Manual
USBX Device Class Mass Storage

USBX Device Class Mass Storage Introduction

The USBX&trade Device Class Mass Storage module provides a high-level API for USB mass storage applications for USB Full Speed (USBFS) or USB High Speed (USBHS). The USBX Device Class Mass Storage module uses the USB and data-transfer peripherals on the Synergy MCU.

USBX Device Class Mass Storage Module Features

  • ThreadX®-aware framework.
  • Storage Media Parameter Setup
  • Last LBA
  • Byte-per-sector
  • Type of storage media
  • Removable flag
  • USB Device Configuration (Device Configuration)
  • Vendor ID
  • Product ID
  • Device Release Number
  • Index of Serial Number String Descriptor
  • Supported USB Specification (DCD)
  • USBFS
  • USBHS
  • USB Device interrupts (DCD)
ux_device_storage_BD.png
USBX Device Class Mass Storage Module Block Diagram

USBX Device Class Mass Storage Module APIs Overview

The USBX Device Class Mass Storage module automatically adds an initialization process; the user application only needs to prepare the callback functions for media access. Unless the functionality of the USBX Device Class Mass Storage module is required, there is no need to use it.

Note
For details on the USBX Device Stack, see the USBX Device Stack User's Manual.

USBX Device Class Mass Storage Module Operational Overview

The USBX Device Class Mass Storage module automatically adds an initialization process. The process initializes internal information with the given parameters and creates an internal thread for processing the mass-storage class; this internal thread processes all USB messages.

USBX Device Class Mass Storage Module Important Operational Notes and Limitations

USBX Device Class Mass Storage Module Operational Notes

The USBX Device stack or USBX Host stack consumes RAM for the control block. The Synergy Configuration tool allocates memory to the USBX memory pool statically in the auto-generate code as shown in the following table. You need to set the appropriate memory size in bytes to the USBX Pool Memory Size property of the USBX on ux component in the Synergy Configuration tool in section "USBX on ux Configuration." If multiple classes are used, set the total memory size to the property.

Memory (RAM) Requirements for the USBX Memory Pool

USBX Class S1 Parts Other Parts
USBX Device Mass Storage (ux_device_class_storage) 6.1KB 19KB
Note
The information shown in the table above is valid if compiled with default USBX configurations.
The memory size of the USBX Classes in the table above are of the pre-built libraries and the following configuration was applied for the builds:

UX_THREAD_STACK_SIZE: 512(bytes) for S1 parts; 2048(bytes) for the other parts

  • The USBX device storage class supports multiple logical unit numbers (LUNs), making it possible to create a storage device that acts simultaneously as a CD-ROM and flash disk.

USBX Device Class Mass Storage Module Limitations

  • This module does not support the complex device.
  • Refer to the most recent SSP Release Notes for any additional operational limitations for this module.

Including the USBX Device Class Mass Storage Module in an Application

This section describes how to include the USBX Device Class Mass Storage module in an application using the SSP configurator.

Note
It is assumed you are familiar with creating a project, adding threads, adding a stack to a thread and configuring a block within the stack. If you are unfamiliar with any of these items, refer to the first few chapters of the SSP User's Manual to learn how to manage each of these important steps in creating SSP-based applications.

To add the USBX Device Class Mass Storage module to an application, simply add it to a thread using the stacks selection sequence given in the following table.

USBX Device Class Mass Storage Module Selection Sequence

Resource ISDE Tab Stacks Selection Sequence
g_ux_device_class_storage USBX Device Class Mass Storage Threads New Stack> X-Ware> USBX> Device> Classes> Mass Storage> USBX Device Class Mass Storage

When the USBX Device Class Mass Storage module is added to the thread stack as shown in the following figure, the configurator automatically adds any needed lower‑level modules. Any modules needing additional configuration information have the box text highlighted in Red. Modules with a Gray band are individual modules that stand alone. Modules with a Blue band are shared or common; they need only be added once and can be used by multiple stacks. Modules with a Pink band can require the selection of lower-level modules; these are either optional or recommended. (This is indicated in the block with the inclusion of this text.) If the addition of lower-level modules is required, the module description include Add in the text. Clicking on any Pink banded modules brings up the New icon and displays possible choices.

ux_device_storage_MS.png
USBX Device Class Mass Storage Module Stack

Configuring the USBX Device Class Mass Storage Module

The USBX Device Class Mass Storage module must be configured by the user for the desired operation. The SSP configuration window automatically identifies (by highlighting the block in red) any required configuration selections, such as interrupts or operating modes, which must be configured for lower-level modules for successful operation. Only properties that can be changed without causing conflicts are available for modification. Other properties are locked and not available for changes and are identified with a lock icon for the locked property in the Properties window in the ISDE. This approach simplifies the configuration process and makes it much less error-prone than previous manual approaches to configuration. The available configuration settings and defaults for all the user-accessible properties are given in the Properties tab within the SSP Configurator and are shown in the following tables for easy reference.

Note
You may want to open your ISDE, create the module and explore the property settings in parallel with looking over the following configuration table values. This helps to orient you and can be a useful hands-on approach to learning the ins and outs of developing with SSP.

Configuration Settings for the USBX Device Class Mass Storage Module

ISDE Property Value Description
Name g_ux_device_class_storage Specify the name of USBX Interface Descriptor for Mass Storage Class. It must be a valid C symbol.
Mass Storage Class Parameter Setup Auto (Simple Auto Setup if LUN is 1), Manual (User Manual Setup if LUN is greater than 1)

Default: Auto
Manual (User Manual Setup if LUN is greater than 1).

Simple Auto Setup if LUN is 1.
User Setup Callback (Only valid if Parameter Setup is Auto) ux_device_class_storage_user_setup Specify the name of user callback function to setup the storage parameter setup. This parameter is only valid when the configuration "Mass Storage Class Parameter Setup" is "Auto".
Last LBA of Storage Media  (Only valid if Parameter Setup is Auto) 0 Specify the last LBA of storage media device (the number of sectors available in the media - 1). This parameter is only valid when the configuration "Mass Storage Class Parameter Setup" is "Auto".
Bytes Per Sector of Storage Media (Only valid if Parameter Setup is Auto) 512 Specify the sector size of storage media. It can take multiple of 512 such as 512, 4K bytes. This parameter is only valid when the configuration "Mass Storage Class Parameter Setup" is "Auto".
Type of Storage Media (Only valid if Parameter Setup is Auto) 0 Specify the type of storage media device. Typically, the value takes following values.
Flash Drive (0), CD-ROM device (5)
This parameter is only valid when the configuration "Mass Storage Class Parameter Setup" is "Auto".
Removable Flag of Storage Media (Only valid if Parameter Setup is Auto) 0x80 Specify the Removable Flag value of Storage Media. This parameter is only valid when the configuration "Mass Storage Class Parameter Setup" is "Auto".
Media Read Function Callback (Only valid if Parameter Setup is Auto) ux_device_msc_media_read Specify the C symbol name of Media Read callback for the USBX Device Mass Storage Class. The function is to be called back from the Class library when read access to the USB storage device is requested from user application. Refer USBX Stack User's Manual "Chapter 5: USBX Device Class Considerations USB Device Storage Class" for the function definition.
Media Write Function Callback (Only valid if Parameter Setup is Auto) ux_device_msc_media_write Specify the C symbol name of Media Write callback for the USBX Device Mass Storage Class. The function is to be called back from the Class library when write access to the USB storage device is requested from user application. Refer USBX Stack User's Manual "Chapter 5: USBX Device Class Considerations USB Device Storage Class" for the function definition.
Media Status Function Callback (Only valid if Parameter Setup is Auto) ux_device_msc_media_status Specify the C symbol name of Media Status callback for the USBX Device Mass Storage Class. The function is to be called back from the Class library when status inquiry to the USB storage device is requested from user application. Refer USBX Stack User's Manual "Chapter 5: USBX Device Class Considerations USB Device Storage Class" for the function definition.
USBX Device Storage Instance Activate Callback Function NULL Specify the name of instance_activate user callback function for the USBX Device Mass Storage Class module. Name must be a valid C symbol. See the USBX Stack User's Manual "Chapter 5: USBX Device Class Considerations USB Device Storage Class" for more information about the instance_activate callback function.
USBX Device Storage Instance Deactivate Callback Function NULL Specify the name of instance_deactivate user callback function for the USBX Device Mass Storage Class module. Name must be a valid C symbol. Refer to the USBX Stack User's Manual "Chapter 5: USBX Device Class Considerations USB Device Storage Class" for more information about the instance_activate callback function
Vendor ID Name NULL Specify the name of Vendor ID for the USBX Device Mass Storage Class module. Name must be a valid C symbol.
Product ID Name NULL Specify the name of Product ID for the USBX Device Mass Storage Class module. Name must be a valid C symbol.
Product Revision Number NULL Specify the number of Product revision for the USBX Device Mass Storage Class module. Value must be a non-negative integer.
Product Serial Number NULL Specify the number of Product serial for the USBX Device Mass Storage Class module. Value must be a non-negative integer.
Name of generated initialization function ux_device_class_storage_init0 Name of generated initialization function selection
Auto Initialization Enable, Disable

Default: Enable
Auto initialization selection
Note
The example settings and defaults are for a project using the S7G2 Synergy MCU Group. Other MCUs may have different default values and available configuration settings.

Note:  Most of the property settings for lower-level modules are intuitive and usually can be determined by inspection of the associated properties window from the SSP configurator.

Configuration Settings for the USBX Device Class Mass Storage Lower-Level Modules

Only a small number of settings must be modified from the default for the IP layer and lower-level drivers as indicated via the red text in the thread stack block. Notice that some of the configuration properties must be set to a certain value for proper framework operation and are locked to prevent user modification. The following table identifies all the settings within the properties section for the module:

Configuration Settings for the USBX Device Class Mass Storage Source

ISDE Property Value Description
Maximum number of SCSI logical units Value must be greater than 0 or empty

Default: 2
UX_MAX_SLAVE_LUN
This value represents the maximum number of SCSI logical units represented in the device storage class driver.
Show linkage warning Enabled, Disabled

Default: Enabled
Notification message for users will be shown if "Enabled" option is selected. This is just to warn users possible linkage errors by multiple symbol definitions. Select "Disabled" stops the notification message.
Note
The example settings and defaults are for a project using the Synergy S7G2 MCU Group. Other MCUs may have different default values and available configuration settings.

Configuration Settings for the USBX Device Configuration Instance

ISDE Property Value Description
Vendor ID 0x045B Specify Vendor ID assigned by USB-IF. This configuration is a part of the USB Device Descriptor (idVendor).
Product ID 0x0000 Specify Product ID assigned by manufacturer. This configuration is a part of the Device Descriptor (idProduct).
Device Release Number 0x0000 Specify Device Release Number in binary-coded decimal. This configuration is a part of the USB Device Descriptor (bcdDevice).
Index of Manufacturing String Descriptor 0x00 Specify the Index of Manufacturer String Descriptor defined in the USBX String Framework. This configuration is a part of the USB Device Descriptor (iManufacturer). Set zero if String Descriptor is not used. See section USBX-String-Framework-Configuration for more information.
Index of Product String Descriptor 0x00 Specify the Index of Product String Descriptor defined in the USBX String Framework. This configuration is a part of the USB Device Descriptor (iProduct). Set zero if String Descriptor is not used. See section "USBX String Framework Configuration" for more information.
Index of Serial Number String Descriptor 0x00 Specify the Index of Serial Number String Descriptor defined in the USBX String Framework. This configuration is a part of the USB Device Descriptor (iSerialNumber). Set zero if the String Descriptor is not used. See section "USBX String Framework Configuration" for more information.
Class Code Communications(CDC), HID, Mass Storage, Miscellaneous, Vendor specific

Default: Communications(CDC)
Select the USB Device Class Code. This configuration is a part of the USB Configuration Descriptor (bDeviceClass).
Index of String Descriptor describing this configuration 0x00 Specify the Index of String Descriptor describing this configuration. This configuration is a part of the USB Configuration Descriptor (iConfiguration). Set zero if String Descriptor is not used. See section "USBX String Framework Configuration" for more information.
Size of USB Descriptor in bytes for this configuration (Modify this value only for Vendor-specific Class, otherwise set zero) 0x00 Specify the size of USB Descriptor in bytes. Modify the value for Vendor-specific Class, otherwise you can set zero to calculate the size automatically in the auto-generated code from Synergy Configuration tool. This configuration is a part of the USB Configuration Descriptor (wTotalLength).
Number of Interfaces (Modify this value only for Vendor-specific Class, otherwise set zero) 0x00 Specify the Number of interfaces supported by this configuration. Modify the value for Vendor-specific Class, otherwise you can set zero to calculate the value automatically in the auto-generated code from Synergy Configuration tool. This configuration is a part of the USB Configuration Descriptor (bNumInterfaces).
Self-Powered Enable, Disable

Default: Enable
Enable this configuration if your USB Device is a self- powered device. This configuration is a part of the USB Configuration Descriptor (bmAttributes bit6).
Remote Wakeup Enable, Disable

Default: Disable
Enable this configuration if your USB Device supports remote wakeup. This configuration is a part of the USB Configuration Descriptor (bmAttributes bit5).
Maximum Power Consumption (in 2mA units) 50 Set the maximum power consumption of your device to indicate the amount of bus power required. This configuration is 2mA units, thus, the maximum 500 mA can be specified. This configuration is a part of the USB Configuration Descriptor (bMaxPower).
Supported Language Code 0x0409 Specify the Language ID Code.  For example, 0x0409 English - United States. This configuration is used for Language ID Framework code generation. See section "USBX Language Framework Configuration" for more information.
Name of USBX String Framework NULL Specify the name of user defined USBX String Framework. This must be a valid C symbol. Set NULL if the String Descriptor is not used. See section "USBX String Framework Configuration" for more information.
Total index number of USB String Descriptors in USB String Framework 0 Specify the total number of index for String Descriptor. See section "USBX String Framework Configuration" for more information.
Name of USBX Language Framework NULL Specify the name of user defined USBX Language Framework. This must be a valid C symbol. If '0' is set to the property "Total Number of Language Support", this configuration is ignored. See section "USBX Language Framework Configuration" for more information.
Number of Languages to support (US English is applied if zero is set) 0 Specify the total number of languages to support. See section "USBX String Framework Configuration" for more information. If '0' is set here, US English (0x0409) is applied as the default language.
Name of generated initialization function ux_device_init0 Name of generated initialization function selection.
Auto Initialization Enable, Disable

Default: Enable
Auto initialization selection.
Note
The example settings and defaults are for a project using the S7G2 Synergy MCU Group. Other MCUs may have different default values and available configuration settings.

Configuration Settings for the USBX Interface Configuration Mass Storage Instance

ISDE Property Value Description
Name g_usb_interface_descriptor_storage_0 Specify the name of USBX Interface Descriptor for CDC-ACM. It must be a valid C symbol.
Interface Number of Bulk Only Data Interface 0x00 Specify the index number of Bulk-Only Data interface. This configuration is a part of the USB Interface Descriptor (bInterface). The number must not be duplicated with any other Interface Numbers if your USB device consists of a USB composite device.
Endpoint Number to be used for Bulk Out Transfer Endpoint 1-9

Default: Endpoint 1
Specify the Endpoint Number of Bulk Out Endpoint. It must not be duplicated with ones for the other Endpoints.
Endpoint Number to be used for Bulk In Transfer Endpoint 1-9

Default: Endpoint 2
Specify the Endpoint Number of Bulk In Endpoint. It must not be duplicated with ones for the other Endpoints.
Note
The example settings and defaults are for a project using the S7G2 Synergy MCU Group. Other MCUs may have different default values and available configuration settings.

Configuration Settings for the USBX Port DCD on sf_el_ux for USBFS

ISDE Property Value Description
Full Speed Interrupt Priority Priority 0 (highest), Priority 1:14, Priority 15 (lowest - not valid if using ThreadX), Disabled

Default: Disabled
Select the interrupt priority for full-speed USB.
LDO Regulator (Only for S3 and S1 part MCUs) Enable, Disable

Default: Disable
Select the LDO regulator will be enabled.
Name g_sf_el_ux_dcd_fs_0 Module name.
USB Controller Selection USBFS Select the USB controller.
Note
The example settings and defaults are for a project using the S7G2 Synergy MCU Group. Other MCUs may have different default values and available configuration settings.

Configuration Settings for the USBX Port DCD on USBHS

ISDE Property Value Description
High Speed Interrupt Priority Priority 0 (highest), Priority 1:14, Priority 15 (lowest - not valid if using ThreadX), Disabled

Default: Disabled
Select the interrupt priority for high speed USB.
Name g_sf_el_ux_dcd_hs_0 Module name.
USB Controller Selection USBHS Select the USB controller.
Note
The example settings and defaults are for a project using the S7G2 Synergy MCU Group. Other MCUs may have different default values and available configuration settings.

Configuration Settings for the USBX on ux Instance

ISDE Property Value Description
USBX Pool Memory Name g_ux_pool_memory Name must be a valid C symbol.
USBX Pool Memory Size 18432 See section "Azure RTOS USBX Memory Requirements" for the required memory size for each classes.
User Callback for Host Event Notification (Only valid for USB Host) NULL Name must be a valid C symbol. The name of User defined USBX Host event notification can be given to this property.
Name of generated initialization function ux_common_init0 Name of generated initialization function selection.
Auto Initialization Enable, Disable

Default: Enable
Auto initialization selection.
Note
The example settings and defaults are for a project using the S7G2 Synergy MCU Group. Other MCUs may have different default values and available configuration settings.

USBX Device Class Mass Storage Module Clock Configuration

The USB peripheral module uses the UCLK as its clock source; the UCLK should be configured for 48MHz operation In the SSP configuration window, select the Clocks tab to view the clock-source setting.

USBX Device Class Mass Storage Module Pin Configuration

The USB peripheral module uses MCU pins to communicate with external devices. Select I/O pins and configure to the external device requirements. The following table lists the pin selection method within the SSP Configuration Window and the subsequent tables demonstrate the selection process using USB pins as an example.

Note
The selected operation mode determines what peripheral signals available and what MCU pins are required.

USBFS and USBHS Pin Selection Sequence

Resource ISDE Tab Pin selection Sequence
USBFS Pins Select Peripherals > Connectivity: USBFS> USBFS0
USBHS Pins Select Peripherals > Connectivity: USBHS> USBHS0
Note
The selection sequence assumes USBFS0 or USBHS0 is the desired hardware target for the driver.

USBHS Pin Configuration Settings

Property Value Description
Operation Mode Disabled, Custom, Device, Host, OTG

Default: Custom
Select device as the Operation Mode
USBDP USBDP USBDP pin
USBDM USBDM USBDM pin
OVRCURB None OVRCURB pin
OVRCURA None OVRCURA pin
VBUSEN None VBUSEN pin
VBUS None, P407

Default: P407
VBUS pin
EXICEN None EXICEN pin
ID None ID Pin
VCCUSB VCCUSB VCCUSB pin
VSSUSB VSSUSB VSSUSB pin
Note
The example settings are for a project using the S7G2 Synergy MCU and the SK-S7G2 Kit. Other Synergy MCUs and other Synergy Kits may have different available pin configuration settings.

USBHS Pin Configuration Settings

Property Value Description
Operation Mode Disabled, Custom, Device, Host, OTG

Default: Custom
Select Device as the Operation Mode
USBHSDP USBHSDP USBHSDP pin
USBHSDM USBHSDM USBHSDM pin
OVRCURB None OVRCURB pin
OVRCURA None OVRCURA pin
VBUSEN PB00 VBUSEN pin
VBUS PB01 VBUS pin
EXICEN None EXICEN pin
ID None ID pin
USBHSRREF USBHSRREF USBHSRREF pin
AVCCUSBHS AVCCUSBHS AVCCUSBHS pin
AVSSUSBHS AVSSUSBHS AVSSUSBHS pin
PVSSUSBHS PVSSUSBHS PVSSUSBHS pin
VCCUSBHS VCCUSBHS VCCUSBHS pin
VSS1USBHS VSS1USBHS VSS1USBHS pin
VSS2USBHS VSS2USBHS VSS2USBHS pin
Note
The example settings are for a project using the S7G2 Synergy MCU and the SK-S7G2 Kit. Other Synergy MCUs and other Synergy Kits may have different available pin configuration settings.

Using the USBX Device Class Mass Storage Module in an Application

  • The USBX Device Class Mass Storage module does not need the usual initialization by an application; the application simply prepares the three user callbacks that the USBX Device Class Mass Storage module requires.
  • Following is the suggested sequence of API's to be called successfully in a sequential order in an application for completely un-initializing USB Device class,
ux_device_storage_TA.png
USBX Device Class Mass Storage Typical Application