Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

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

Kernel Setup

Enter kernel configuration

# cd ./linux/kernel
# make menuconfig

  1. Select submenus : Device Drivers > Sound card support > Advances Linux Sound Architecture. Select [*] for “PCM timer interface“.

image-20240126-104828.png

  1. Select submenus : Device Drivers > Sound card support > Advances Linux Sound Architecture > USB sound devices. Select <*> for “USB Audio/MIDI driver“.

image-20240126-104907.png

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

image-20240126-110509.png

  1. 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“.

image-20240127-070651.png

ConfigFS

Configure UAC gadget through configfs saved as a file named setup_uac.

#!/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

  1. Use an USB-A to Micro-USB cable to connect the Windows PC and the SP7350 platform.

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

image-20240128-061828.png

  1. Use sudo sh setup_uac command to configure UDC (USB 2.0) as an UAC gadget.

sunplus@ubuntu:~$ sudo sh setup_uac
[sudo] password for sunplus:
sunplus@ubuntu:~$

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

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.

image-20240128-043203.png

Test

Record and Play

image-20240128-061113.png

Play music in Windows PC and 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.

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

image-20240128-061312.png

Play music in Windows PC and use arecord -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav command to record it as pc_music.wav.

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

image-20240128-061603.png

Use aplay -D hw:1,0 -c 2 -r 48000 -f S16_LE pc_music.wav command to play pc_music.wav and record it in the Windows PC.

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
  • No labels