前文 milkv-duo/duo256 麦克风测试 中已经介绍了如何使用麦克风,本文介绍使用 SG200X 自带的 Audio DAC 功能 通过 PAM8403 输出音频。
SG200X 芯片自带 Audio DAC,在芯片的第 4 脚输出,开发板的 34 脚。
由于 milkv-duo256 板子上没有带功放芯片,所以需要外接功放芯片,这里使用的是 PAM8403。
PAM8403 是一颗输出功率为3W的 D 类音频功率放大器 IC,在 4Ω 负载和 5V 电源条件下,提供高达 3W 输出 功率。
DAC 驱动
当前最新版本的 duo-buildroot-sdk (v1.1.4) 默认已经支持 Audio ADC,在内核中已经加载。
ADC 在设备树 build/boards/default/dts/cv181x/cv181x_base.dtsi
中配置如下:
dac: dac@0300A000 {
compatible = "cvitek,cv182xadac";
reg = <0x0 0x0300A000 0x0 0x100>;
clocks = <&i2s_mclk 0>;
clock-names = "i2sclk";
};
ALSA 配置
duo-buildroot-sdk 默认已经配置好 ALSA 相关工具,可以直接使用。配置文件位于 buildroot-2021.05/configs/milkv-duo256m-sd_musl_riscv64_defconfig
,其中已经配置好录音和播放设备,如下:
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_ALSA_UTILS_ARECORDMIDI=y
运行
正常启动进入 Linux 后,可在 Linux 命令行中查看设备:
$ ls /dev/snd
controlC0 controlC1 pcmC0D0c pcmC1D0p timer
- controlC0:用于声卡控制,C0 表示声卡0,对应上文的录音设备。
- controlC1:用于声卡控制,C1 表示声卡1,对应上文的播放设备。
- pcmC0D0c:用于录音的 pcm 设备,最后面的 “c” 是 capture 的缩写,表示录音
- pcmC1D0p:用于播放的 pcm 设备,最后面的 “p” 是 play 的缩写,表示放音
- timer :定时器
- 查看播放设备
$ 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/1
Subdevice #0: subdevice #0
- 播放音频
$ aplay -D hw:1,0 -f S16_LE test.wav
Playing WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
test.wav 是之前录音的音频文件,播放成功。其中:
- -D hw:1,0: 指定播放设备。hw:1,0表示使用第二个声卡的第一个硬件设备
- -f S16_LE: 设置播放格式为16位小端(Little Endian)PCM 编码,这是音频处理中常用的一种格式。
- test.wav: 这是输出的音频文件名。