音频
1. 简介
Omni3576 开发板音频部分采用的是 ES8388 驱动芯片,ES8388 是一款高性能、低功耗且低成本的音频编解码器。它包含2通道ADC、2通道DAC、麦克风放大器、耳机放大器、数字音效以及模拟混音和增益功能。
2. 声音配置
查看声卡设备
luckfox@luckfox:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: rockchipes8388 [rockchip-es8388], device 0: dailink-multicodecs ES8323 HiFi-0 [dailink-multicodecs ES8323 HiFi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
luckfox@luckfox:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: rockchipes8388 [rockchip-es8388], device 0: dailink-multicodecs ES8323 HiFi-0 [dailink-multicodecs ES8323 HiFi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: rockchipdp0 [rockchip-dp0], device 0: rockchip-dp0 spdif-hifi-0 [rockchip-dp0 spdif-hifi-0]
Subdevices: 1/1
Subdevice #0: subdevice #0声卡的驱动目录
luckfox@luckfox:~$ ls /dev/snd/
by-path controlC0 controlC1 pcmC0D0c pcmC0D0p pcmC1D0p seq timercontrolC0
和controlC1
:用于声卡控制,C0 表示声卡 0,C1 表示声卡 1,对应上文的SOC自带的声音输出pcmC0D0c
:用于录音的 pcm 设备,最后面的“c”是 capture 的缩写,表示录音设备pcmC0D0p
和pcmC1D0p
:用于播放的 pcm 设备,最后面的“p”是 playback 的缩写,表示播放设备
luckfox@luckfox:~$ ls -l /dev/snd/by-path/
total 0
lrwxrwxrwx 1 root root 12 Oct 18 10:03 platform-dp0-sound -> ../controlC1
lrwxrwxrwx 1 root root 12 Oct 18 10:03 platform-es8388-sound -> ../controlC0
3. 测试
录音测试
arecord -Dhw:0,0 -f cd -r 44100 -c 2 -t wav test.wav
耳机测试(插上耳机会自动切换输入输出通道)
设置录音增益:
tinymix -D 0 set "Left Channel Capture Volume" 8
tinymix -D 0 set "Right Channel Capture Volume" 8
设置播放音量:
tinymix -D 0 set "Output 1 Playback Volume" 33 33
tinymix -D 0 set "Output 2 Playback Volume" 33 33
播放:
aplay -Dhw:0,0 -t wav /userdata/test.wav
录音:
arecord -Dhw:0,0 -f cd -r 44100 -c 2 -t wav /userdata/test.wav播放测试
aplay -Dhw:0,0 -t wav /userdata/test.wav
4. 设备树简介
Audio DTS 源文件在
kernel-6.10/arch/arm64/boot/dts/rockchip/luckfox-omni3576-codec.dtsi
已经定义,我们可以直接调用。/ {
es8388_sound: es8388-sound {
status = "okay";
compatible = "rockchip,multicodecs-card";
rockchip,card-name = "rockchip-es8388";
rockchip,format = "i2s";
rockchip,mclk-fs = <256>;
rockchip,cpu = <&sai1>;
rockchip,codec = <&es8388>;
rockchip,audio-routing =
"Headphone", "LOUT1",
"Headphone", "ROUT1",
"Speaker", "LOUT1",
"Speaker", "ROUT1",
"LINPUT2", "Main Mic",
"RINPUT2", "Main Mic",
"LINPUT2", "Headset Mic",
"RINPUT2", "Headset Mic";
};
};
&i2c2 {
status = "okay";
es8388: es8388@10 {
status = "okay";
#sound-dai-cells = <0>;
compatible = "everest,es8388", "everest,es8323";
reg = <0x10>;
clocks = <&mclkout_sai1>;
clock-names = "mclk";
assigned-clocks = <&mclkout_sai1>;
assigned-clock-rates = <12288000>;
pinctrl-names = "default";
pinctrl-0 = <&sai1m0_mclk>;
};
};
&sai1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&sai1m0_lrck
&sai1m0_sclk
&sai1m0_sdi0
&sai1m0_sdo0>;
};