This article provides how to use the USB 2.0 Gadget Audio on SP7350 board which makes the board as an audio card.
Table of Contents |
---|
Hardware Configuration
Item 13 : USB 2.0 Type A
Item 14 : USB 2.0 Micro-AB
Item 15 : USB 3.0 Type C
Kernel Setup
Enter kernel configuration
Code Block |
---|
# cd ./linux/kernel # make menuconfig |
Select submenus : Device Drivers > Sound card support > Advances Linux Sound Architecture. Select [*] for “PCM timer interface“.
Select submenus : Device Drivers > Sound card support > Advances Linux Sound Architecture > USB sound devices. Select <*> for “USB Audio/MIDI driver“.
Select submenus : Device Drivers > USB support > USB support > USB Gadget Support > USB Peripheral Controller. Select <*> for “Sunplus USB 2.0 Device Controller“.
Select submenus : Device Drivers > USB support > USB support > USB Gadget Support. Select <*> for “USB Gadget functions configurable through configfs“, [*] for “Function filesystem (FunctionFS)” and [*] for “Audio Class 1.0“.
ConfigFS
Configure UAC gadget through configfs saved as a file named setup_uac.
Code Block |
---|
#!/bin/sh CONFIGFS_HOME=/sys/kernel/config VID=0xabcd PID=0x1234 serial_number="myserial" manufacturer="mymfg" product="myproduct" name="c" number="1" configuration="uac1" maxpower="500" CONFIG="configs/$name.$number" FUNCTION="uac1.0" UDC_NAME="f8102800.usb" 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
Use an USB-A to Micro-USB cable to connect the Windows 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 gadget.
Code Block |
---|
sunplus@ubuntu:~$ sudo sh setup_uac [sudo] password for sunplus: sunplus@ubuntu:~$ |
Use cat /proc/asound/cards command to show all sound cards of the SP7350 platform. The sound cards of 1 [UAC1Gadget] and 2 [Device] will be used for the test.
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 Device Manager of Windows PC, “Capture Input terminal (AC Interface)“ and “Speakers (AC Interface)“ will show up in Audio inputs and outputs. “AC Interface” will show up in Sound, video and game controllers.
Test
Record and Play
Play music and choose “Speakers (AC Interface)“ in Windows 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 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 and choose “Speakers (AC Interface)“ in Windows 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 SP7350 platform.
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 “Capture Input terminal (AC Interface)“ and record it in the Windows 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 |