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-20240126-110509.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 OTG Transceive driver : Device Drivers > USB support > USB Physical Layer drivers. Select <*> for “Sunplus USB OTG Transceive driver“.

image-20240703-101840.pngImage Removedimage-20240708-071051.pngImage Added

  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

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
mount -t configfs none /sys/kernel/config

############################## USB2.0 ##############################
UDC_NAME="f8102800.usb"
BACKING_FILE=/backing_file_u2

#create gadget
mkdir /sys/kernel/config/usb_gadget/g1
cd /sys/kernel/config/usb_gadget/g1
echo "64" > bMaxPacketSize0
echo "0x200" > bcdUSB

#create configuration
mkdir configs/c.1
mkdir 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

############################## USB3.0 ##############################
UDC_NAME="f80a1000.dwc3"
BACKING_FILE=/backing_file_u3

#create gadget
mkdir /sys/kernel/config/usb_gadget/g2
cd /sys/kernel/config/usb_gadget/g2
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

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.png