How to Implement an USB2.0 / USB3.0 Serial Gadget
This article provides how to allow the USB2.0/USB3.0 device controller act as a serial port device on SP7350 platforms.
Table of Contents
Kernel Setup
Enter the kernel configuration by running the following command in the top directory of project.
# make kconfig
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“.
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“.
Select submenus for USB Gadget configfs : Device Drivers > USB support > USB Gadget Support. Select <M> for “USB Gadget functions configurable through configfs“. Select [*] for “Generic serial bulk in/out”, “Abstract Control Model (CDC ACM)“ or “Object Exchange Model (CDC OBEX)“.
Execute the make command to build the Linux image.
ConfigFS (CDC ACM)
Configure serial gadget through configfs saved as a file named setup_serial.
#!/bin/sh
USB2_ACM_EN=on
USB3_ACM_EN=on
KERNEL_PATH=/lib/modules/`uname -r`/kernel
GADGET_PATH=$KERNEL_PATH/drivers/usb/gadget
FUNCTION_PATH=$GADGET_PATH/function
COMPOSITE=$GADGET_PATH/libcomposite.ko
U_SERIAL=$FUNCTION_PATH/u_serial.ko
insmod $COMPOSITE
insmod $U_SERIAL
# disable debug message
echo 0 > /sys/module/sunplus_udc/parameters/dmsg
mkdir -p /sys/kernel/config
mount -t configfs none /sys/kernel/config
if [ $USB2_ACM_EN = on ]
then
cd /sys/kernel/config/usb_gadget
# create gadget folder
mkdir g1
cd g1
# setup gadget
echo 64 > bMaxPacketSize0
echo 0x200 > bcdUSB
# composite class
echo 0x02 > bDeviceClass
mkdir -p configs/c.1
mkdir -p configs/c.1/strings/0x409
echo "USB2.0 Serial Console" > configs/c.1/strings/0x409/configuration
mkdir strings/0x409
echo "1234" > strings/0x409/serialnumber
echo "Sunplus" > strings/0x409/manufacturer
echo "SP7350" > strings/0x409/product
mkdir functions/acm.gs0
ln -s functions/acm.gs0 configs/c.1
# bind UDC
echo "f8102800.usb" > UDC
fi
if [ $USB3_ACM_EN = on ]
then
cd /sys/kernel/config/usb_gadget
# create gadget folder
if [ $USB2_ACM_EN = on ]
then
mkdir g2
cd g2
else
mkdir g1
cd g1
fi
# setup gadget
echo 64 > bMaxPacketSize0
echo 0x300 > bcdUSB
# composite class
echo 0x02 > bDeviceClass
mkdir -p configs/c.1
mkdir -p configs/c.1/strings/0x409
echo "USB3.0 Serial Console" > configs/c.1/strings/0x409/configuration
mkdir strings/0x409
echo "5678" > strings/0x409/serialnumber
echo "Sunplus" > strings/0x409/manufacturer
echo "SP7350" > strings/0x409/product
mkdir functions/acm.gs1
ln -s functions/acm.gs1 configs/c.1
# bind UDC
echo "f80a1000.dwc3" > UDC
fi
Test (CDC ACM) Configuartions
Use sh setup_serial command to configure USB 2.0 and USB3.0 device controllers as serial gadgets.
# sh setup_serial
ttyGS0 and ttyGS1 in /dev are represented for the USB2.0 serial gadget and the USB3.0 one.
After connecting the USB2.0 serial gadget and the USB3.0 one to a Windows PC with USB cables, “USB Serial Device (COM6)“ (USB2.0 serial gadget) and “USB Serial Device (COM7)“ (USB3.0 serial gadget) will show up in “Ports (COM & LPT)” in Device Manager. “Prolific UBS-to-Serial Comm Port (COM9)” is the default terminal (UART0) of the SP7350 platform.
Serial Device Test
Use the communication tool of Tera Term for the test with the Windows PC.
TX Test for USB2.0 Serial Gadget
Use the following command to transfer characters of “SP7350 USB2.0 Serial Gadget TX Test“ from ttyGS0 (USB2.0 serial gadget) to COM6.
The characters will be received by COM6 open by Tera Term.
TX Test for USB3.0 Serial Gadget
Use the following command to transfer characters of “SP7350 USB3.0 Serial Gadget TX Test“ from ttyGS1 (USB3.0 serial gadget) to COM7.
The characters will be received by COM7 open by Tera Term.
RX Test for USB2.0 Serial Gadget
Use the following command to be ready to receive characters transferred from COM6 through ttyGS0 (USB2.0 serial gadget).
Input the characters of “SP7350 USB2.0 Serial Gadget RX Test" in COM6 open by Tera Term and press “Enter”.
The characters will be received by ttyGS0.
RX Test for USB3.0 Serial Gadget
Use the following command to be ready to receive characters transferred from COM7 through ttyGS1 (USB3.0 serial gadget).
Input the characters of “SP7350 USB3.0 Serial Gadget RX Test" in COM7 open by Tera Term and press “Enter”.
The characters will be received by ttyGS1.