| USB Mass Storage |
| ================ |
| |
| Description: |
| |
| This sample application turns the development board into a USB mass storage |
| device. Currently, USB device controller support |
| is only available for Quark SE based boards. So, this sample will only work on |
| those boards, such as Arduino 101. By playing around with options in the |
| prj.conf, you can select the storage for the mass storage device. |
| |
| Usage |
| ----- |
| Plug the board in a host device, for example, a PC running Linux. |
| The board will be detected as a mass storage device. The user should have |
| valid contents in Flash, which can be accomplished by running a fat_fs test |
| initially or can try formatting using the appropriate host utility. |
| The RAM Disk config should run out of the box. |
| |
| -------------------------------------------------------------------------------- |
| |
| Building and Running Project: |
| |
| Refer to https://wiki.zephyrproject.org/view/Arduino_101 for details on flashing |
| the image into an Arduino 101. |
| |
| -------------------------------------------------------------------------------- |
| |
| Troubleshooting: |
| |
| Problems caused by outdated project information can be addressed by |
| issuing one of the following commands then rebuilding the project: |
| |
| make clean # discard results of previous builds |
| # but keep existing configuration info |
| or |
| make pristine # discard results of previous builds |
| # and restore pre-defined configuration info |
| |
| Some Known issues: |
| 1. If you are seeing issues on Arduino 101, try with |
| quark_se_c1000_devboard, only RAM Disk storage is supported on that board. |
| I have done a quick sanity check on Linux, Mac and Windows hosts and works |
| fine. |
| |
| 2. With Arduino 101, some issues were seen with some/older boards. |
| The boards with issues was functional with some hosts but showed issues with |
| other hosts. The USB protocol traces were captured and these are likely to be |
| hardware/timing/lower layer issues unrelated to the added protocol layer, |
| as we were unable to see any obvious protocol violations. Flash access was |
| verified on working boards/hosts. |
| |
| Additional experiments with Arduino 101 show that issues are almost always |
| observed when connected under xHCI root hub's USB ports. On the same host, |
| when connected under eHCI hub's downstream ports, the board functionality could |
| be verified. So we suggest playing around with lsusb -t to identifty a non xHCI |
| USB port to plug in your Arduino 101. |
| -------------------------------------------------------------------------------- |
| |
| Sample Output (differs based on debug verbosity selected): |
| |
| [general] [INF] mass_storage_init: Sect Count 32 |
| [general] [INF] mass_storage_init: Memory Size 16384 |
| [general] [INF] usb_dw_ep_set: usb_dw_ep_set ep 0, mps 64, type 0 |
| [general] [DBG] mass_storage_status_cb: USB device supended |
| [general] [INF] usb_dw_ep_set: usb_dw_ep_set ep 80, mps 64, type 0 |
| |
| [general] [INF] main: The device is put in USB mass storage mode. |
| |
| [general] [DBG] mass_storage_status_cb: USB device reset detected 4 |
| [general] [DBG] mass_storage_status_cb: USB device connected |
| [general] [DBG] mass_storage_status_cb: USB device reset detected 4 |
| [general] [DBG] mass_storage_status_cb: USB device connected |
| [general] [INF] usb_dw_ep_set: usb_dw_ep_set ep 84, mps 64, type 2 |
| [general] [INF] usb_dw_ep_set: usb_dw_ep_set ep 3, mps 64, type 2 |
| [general] [DBG] mass_storage_status_cb: USB device configured |
| [general] [DBG] mass_storage_class_handle_req:MSC_REQUEST_GET_MAX_LUN |
| [general] [DBG] mass_storage_bulk_out: > BO - READ_CBW |
| [general] [DBG] CBWDecode: >> INQ |
| [general] [DBG] mass_storage_bulk_in: < BI - SEND_CSW |
| [general] [DBG] mass_storage_bulk_in: < BI - WAIT_CSW |
| [general] [DBG] mass_storage_bulk_out: > BO - READ_CBW |
| [general] [DBG] CBWDecode: >> TUR |