Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This document demonstrates how to implement an USB 2.0 / USB 3.0 mass storage gadget on SP7350 platforms.

Table of Contents

Table of Contents
minLevel1
maxLevel6
outlinefalse
styledefault
typelist
printabletrue

Kernel Setup

Enter the kernel configuration by running the following command in the top directory of project.

Code Block
# make kconfig

  1. Select submenus for USB 2.0 controller : Device Drivers > USB support > USB Gadget Support > USB Peripheral Controller. Select <*> for “Sunplus USB 2.0 Device Controller“.

image-20240708-071332.png

  1. Select submenus for USB OTG Transceive driver : Device Drivers > USB support > USB Physical Layer drivers. Select <*> for “Sunplus USB OTG Transceive driver“.

image-20240708-071051.png
  1. Select submenus for USB 3.0 controller : Device Drivers > USB support. Select <*> for “DesignWare USB3 DRD Core Support“ and select “Dual Role mode“ for “Deware USB3 DRD Core Support“.

image-20240703-083817.png

  1. Select submenus for USB Gadget configfs : Device Drivers > USB support > USB Gadget Support. Select <M> for “USB Gadget functions configurable through configfs“ and [*] for “Mass storage“.

image-20240703-084023.png

  1. Execute the make command to build the Linux image.

Create a backing storage file

The backing storage file must be prepared before the gadget uses it.

  1. Use the following command to create 32MB files (backing_file_u2 and backing_file_u3) filled with zeros.

Code Block
# dd bs=1M count=32 if=/dev/zero of=/backing_file_u2
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.0850515 s, 395 MB/s
# dd bs=1M count=32 if=/dev/zero of=/backing_file_u3
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.0836486 s, 401 MB/s

  1. Use the following command to create the FAT file system in backing_file_u2 and backing_file_u3.

Code Block
# mkfs.fat /backing_file_u2
mkfs.fat 4.1 (2017-01-24)
# mkfs.fat /backing_file_u3
mkfs.fat 4.1 (2017-01-24)

ConfigFS

Configure mass storage gadget through configfs saved as a file named usb_mass_storage.

Code Block
#!/bin/bash

USB2_UMS_EN=on
USB3_UMS_EN=on

MODULES=/lib/modules/`uname -r`/kernel
LIBCOMPOSITE=/$MODULES/drivers/usb/gadget/libcomposite.ko
FUNCTION=/$MODULES/drivers/usb/gadget/function/usb_f_mass_storage.ko

#install the drivers
insmod $LIBCOMPOSITE
insmod $FUNCTION

#mount configfs
mkdir -p /sys/kernel/config
mount -t configfs none /sys/kernel/config

if [ $USB2_UMS_EN = on ]
then
    UDC_NAME="f8102800.usb"
    BACKING_FILE=/backing_file_u2
    
    #create gadget
    cd /sys/kernel/config/usb_gadget
    mkdir g1
    cd g1

    echo "64" > bMaxPacketSize0
    echo "0x200" > bcdUSB
    
    #create configuration
    mkdir -p configs/c.1
    mkdir -p configs/c.1/strings/0x409
    echo 120 > configs/c.1/MaxPower
    
    mkdir strings/0x0409
    echo "1234" > strings/0x0409/serialnumber
    echo "Sunplus" > strings/0x0409/manufacturer
    echo "SP7350 USB2.0 Mass Storage Gadget" > strings/0x0409/product

    #create functions
    mkdir functions/mass_storage.usb0
    echo "$BACKING_FILE" > functions/mass_storage.usb0/lun.0/file
    
    #link functions and configuration
    ln -s functions/mass_storage.usb0 configs/c.1
    
    #activate
    echo $UDC_NAME > UDC
fi

if [ $USB3_UMS_EN = on ]
then
    UDC_NAME="f80a1000.dwc3"
    BACKING_FILE=/backing_file_u3
    
    #create gadget
    cd /sys/kernel/config/usb_gadget

    if [ $USB2_UMS_EN = on ]
    then
        mkdir g2
        cd g2
    else
        mkdir g1
        cd g1
    fi

    echo "64" > bMaxPacketSize0
    echo "0x300" > bcdUSB
    
    #create configuration
    mkdir configs/c.1
    mkdir configs/c.1/strings/0x409
    echo 120 > configs/c.1/MaxPower
    
    mkdir strings/0x0409
    echo "5678" > strings/0x0409/serialnumber
    echo "Sunplus" > strings/0x0409/manufacturer
    echo "SP7350 USB3.0 Mass Storage Gadget" > strings/0x0409/product

    #create functions
    mkdir functions/mass_storage.usb0
    echo "$BACKING_FILE" > functions/mass_storage.usb0/lun.0/file
    
    #link functions and configuration
    ln -s functions/mass_storage.usb0 configs/c.1
    
    #activate
    echo $UDC_NAME > UDC
fi

Implementation

After updating the image to the SP7350 platform, booting the system and copying backing_file_u2 and backing_file_u3 to it, use sh usb_mass_storage command to configure USB 2.0 and USB 3.0 as mass storage devices.

image-20240708-065620.png

After connecting the mass storage gadget to a Windows PC through an USB cable, “E:\” and “F:\”will show up in “Portable Devices” of “Device Manager” and 2 “USB Mass Storage Device“ in “Universal Serial Bus controllers“.

image-20240708-070501.pngImage Removedimage-20240801-034342.pngImage Added