2.8 KiB
2.8 KiB
USB Host MSC (Mass Storage Class) Driver
This directory contains an implementation of a USB Mass Storage Class Driver implemented on top of the USB Host Library.
MSC driver allows access to USB flash drivers using the BOT (Bulk-Only Transport) protocol and the Transparent SCSI command set.
Usage
- First, usb host library has to be initialized by calling
usb_host_install - USB Host Library events have to be handled by invoking
usb_host_lib_handle_eventsperiodically. In general, an application should spawn a dedicated task handle USB Host Library events. However, in order to save RAM, an already existing task can also be used to callusb_host_lib_handle_events. - Mass Storage Class driver is installed by calling
usb_msc_installfunction along side with configuration. - Supplied configuration contains user provided callback function invoked whenever MSC device is connected/disconnected
and optional parameters for creating background task handling MSC related events.
Alternatively, user can call
usb_msc_handle_eventsfunction from already existing task. - After receiving
MSC_DEVICE_CONNECTEDevent, user has to install device withusb_msc_install_devicefunction, obtaining MSC device handle. - USB descriptors can be printed out with
usb_msc_print_descriptorsand general information about MSC device retrieved withfrom usb_msc_get_device_infofunction. - Obtained device handle is then used in helper function
usb_msc_vfs_registermounting USB Disk to Virtual filesystem. - At this point, standard C functions for accessing storage (
fopen,fwrite,fread,mkdiretc.) can be carried out. - In order to uninstall the whole USB stack, deinitializing counterparts to functions above has to be called in reverse order.
Performance tuning
The following performance tuning options have significant impact on data throughput in USB HighSpeed implementations. For original FullSpeed implementations, the effects are negligible.
- By default, Newlib (the implementation of C Standard Library) creates cache for each opened file
- The greater the cache, the better performance for the cost of RAM
- Size of the cache can be set with C STD library function
setvbuf() - Sizes over 16kB do not improve the performance any more
Known issues
- Driver only supports flash drives using the BOT (Bulk-Only Transport) protocol and the Transparent SCSI command set
Examples
- For an example, refer to msc_host_example in ESP-IDF