sg2002 自带 Audio ADC 和 DAC,分别位于 AUD_AINL_MIC 和 AUD_AOUTR,可用户音频输入输出。
本次功能测试基于 lichee rv nano 开发板,开发板上已经有了 1 个 LMA2718T MEMS 麦克风和 1 个 AW8010A 音频功放芯片,可以播放和录音。
驱动
sophpi 已经完成了驱动开发,在内核中已经加载。ADC/DAC 在设备树 build/boards/default/dts/cv181x/cv181x_base.dtsi
中配置如下:
adc: adc@0300A100 {compatible = "cvitek,cv182xaadc";reg = <0x0 0x0300A100 0x0 0x100>;clocks = <&i2s_mclk 0>;clock-names = "i2sclk";clk_source = <0x04130000>; /* MCLK source is I2S3 */};dac: dac@0300A000 {compatible = "cvitek,cv182xadac";reg = <0x0 0x0300A000 0x0 0x100>;clocks = <&i2s_mclk 0>;clock-names = "i2sclk";};
在 Linux 中查看设备:
$ ls /dev/sndcontrolC0 controlC1 pcmC0D0c pcmC1D0p timer
- controlC0:用于声卡控制,C0 表示声卡0,对应上文的录音设备。
- controlC1:用于声卡控制,C1 表示声卡1,对应上文的播放设备。
- pcmC0D0c:用于录音的 pcm 设备,最后面的 “c” 是 capture 的缩写,表示录音
- pcmC1D0p:用于播放的 pcm 设备,最后面的 “p” 是 play 的缩写,表示放音
- timer :定时器
ALSA 支持
在 buildroot 中使能 ALSA 相关工具。
$ buildroot-2021.05/output/cvitek_CV181X_musl_riscv64
$ make menuconfigTarget packages --->Audio and video applications --->alsa-utils --->[*] alsactl[*] alsamixer[*] amixer[*] aplay/arecord
同时修改 buildroot-2021.05/configs/cvitek_CV181X_musl_riscv64_defconfig
文件,使能 ALSA 相关工具。
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_ALSACTL=y
BR2_PACKAGE_ALSA_UTILS_ALSAMIXER=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
重新编译后再次运行,可以看到 ALSA 相关工具已经安装成功。
查看录音设备
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: cv182xaadc [cv182xa_adc], device 0: cviteka-adc 300a100.adc-0 [cviteka-adc 300a100.adc-0]Subdevices: 1/1Subdevice #0: subdevice #0
录音
首先设置麦克风音量,范围:0-24
$ amixer -Dhw:0 cset name='ADC Capture Volume' 24
设置完成后开始录音,将录音存储在 test.wav 文件中。
$ arecord -Dhw:0,0 -d 3 -r 48000 -f S16_LE -t wav test.wav & > /dev/null &
查看播放设备
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 1: cv182xadac [cv182xa_dac], device 0: cviteka-dac 300a000.dac-0 [cviteka-dac 300a000.dac-0]Subdevices: 1/1Subdevice #0: subdevice #0
播放
$ aplay -D hw:1,0 -f S16_LE test.wav
aplay 正常播放录音文件,同时扬声器发出声音。