This article provides how to use the USB 2.0 Gadget Audio on SP7350 board which makes the board as an audio card. Hardware Configuration
Table of Contents
Table of Contents |
---|
Kernel Setup
Enter the kernel configuration by running the following command in the top directory of project.
Code Block |
---|
# cd ./linux/kernel # make menuconfigkconfig |
Select submenus for PCM : Device Drivers > Sound card support > Advances Linux Sound Architecture. Select [*] for “PCM timer interface“.
...
Select submenus for supporting USB Audio/MIDI devices : Device Drivers > Sound card support > Advances Linux Sound Architecture > USB sound devices. Select <*> for “USB Audio/MIDI driver“.
...
Select submenus for USB 2.0 controller : Device Drivers > USB support > 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 <*> for “USB Gadget functions configurable through configfs“
...
and [*] for “Audio Class 1.0“ and “Audio Class 2.0“.
...
ConfigFS
Configure the UAC gadget through configfs saved as a file named setup_uac. It configures USB 2.0 as an UAC 1.0 gadget by default.
Code Block |
---|
#!/bin/sh # USB2 or USB3 AUDIO_EN=USB2 # 1.0 or 2.0 AUDIO_CLASS_VERSION=2.0 CONFIGFS_HOME=/sys/kernel/config VID=0xabcd PID=0x1234 serial_number="myserial" manufacturer="mymfg" product="myproduct" name="c" number="1" maxpower="500" if [ $AUDIO_CLASS_VERSION = 1.0 ] then configuration="uac1" maxpower="500" elif [ $AUDIO_CLASS_VERSION = 2.0 ] then configuration="uac2" fi CONFIG="configs/$name.$number" if [ $AUDIO_CLASS_VERSION = 1.0 ] then FUNCTION="uac1.0" elif [ $AUDIO_CLASS_VERSION = 2.0 ] then FUNCTION="uac2.0" fi if [ $AUDIO_EN = USB2 ] then UDC_NAME="f8102800.usb" # disable debug message echo 0 > /sys/module/sunplus_udc/parameters/dmsg elif [ $AUDIO_EN = USB3 ] then UDC_NAME="f80a1000.dwc3" fi modprobe libcomposite mount -t configfs none $CONFIGFS_HOME mkdir -p $CONFIGFS_HOME/usb_gadget/g1 cd $CONFIGFS_HOME/usb_gadget/g1 echo $VID > idVendor echo $PID > idProduct mkdir -p strings/0x409 echo $serial_number > strings/0x409/serialnumber echo $manufacturer > strings/0x409/manufacturer echo $product > strings/0x409/product mkdir -p configs/$name.$number echo $maxpower > configs/$name.$number/MaxPower mkdir -p configs/$name.$number/strings/0x409 echo $configuration > configs/$name.$number/strings/0x409/configuration mkdir -p functions/$FUNCTION echo 0x3 > functions/$FUNCTION/p_chmask echo 48000 > functions/$FUNCTION/p_srate echo 2 > functions/$FUNCTION/p_ssize echo 0x3 > functions/$FUNCTION/c_chmask echo 48000 > functions/$FUNCTION/c_srate echo 2 > functions/$FUNCTION/c_ssize ln -s functions/$FUNCTION configs/$name.$number echo $UDC_NAME > UDC |
Test Configurations for USB 2.0 Gadget Audio
Use an USB-A to Micro-USB cable to connect the Windows Ubuntu PC and the SP7350 platform.
Plug an USB sound card to the USB 3.0 Type C port of the SP7350 platform and plug a earphone to the sound card.
...
Use sudo sh setup_uac command to configure UDC (USB 2.0) as an UAC 1.0 gadget.
Code Block |
---|
sunplus@ubuntu:~$ sudo sh setup_uac [sudo] password for sunplus: sunplus@ubuntu:~$ |
...
Code Block |
---|
sunplus@ubuntu:~$ cat /proc/asound/cards 0 [spaud ]: sp-aud - sp-aud Q645/Q654, Sunplus Technology Inc. 1 [UAC1Gadget ]: UAC1_Gadget - UAC1_Gadget UAC1_Gadget 0 2 [Device ]: USB-Audio - USB Audio Device C-Media Electronics Inc. USB Audio Device at usb-xhci-hcd.1.auto-1, full speed sunplus@ubuntu:~$ |
In Windows PC, “AC Interface” of “Sound, video and game controllers” will show up in Device Manager.
...
Test
Record and Play
...
the Ubuntu PC, “Digital Output (S/PDIF) - UDisk flash drive“ and “Analog Output - UDisk flash drive“ will show up in “Settings“ → “Sound” → “Output” → “Output Device”. “Digital Input (S/PDIF) - UDisk flash drive“ and “Analog Input - UDisk flash drive“ will show up in “Settings“ → “Sound” → “Input” → “Input Device”.
...
Test for USB 2.0 Gadget Audio
The command-line audio player (aplay) and soundfile recorder (arecord) are used for the test.
Record and Play
...
Play music and choose “Digital Output (S/PDIF) - UDisk flash drive“ or “Analog Output - UDisk flash drive“ in the Ubuntu PC. Then use arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE | aplay -D hw:2,0 -c 2 -r 48000 -f S16_LE command to output the sounds record the music from the UAC gadget and play it to the earphone of the USB sound card in USB 3.0 type C port in the SP7350 platform.
Code Block |
---|
sunplus@ubuntu:~$ arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE | aplay -D hw:2,0 -c 2 -r 48000 -f S16_LE Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo |
Record Channel
...
Play music in Windows PC and and choose “Digital Output (S/PDIF) - UDisk flash drive“ or “Analog Output - UDisk flash drive“ in the Ubuntu PC. Then use arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav command to record it as pc_music.wav in the UAC gadget.
Code Block |
---|
sunplus@ubuntu:~$ arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav Recording WAVE 'pc_music.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo |
Play Channel
...
Use aplay -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav command to play pc_music.wav in the SP7350 platform. Then choose “Digital Input (S/PDIF) - UDisk flash drive“ or “Analog Input - UDisk flash drive“ and record it in the Windows Ubuntu PC.
Code Block |
---|
sunplus@ubuntu:~$ aplay -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav Playing WAVE 'pc_music.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo |