跳到主要内容

音频

1. 简介

Omni3576 开发板音频部分采用的是 ES8388 驱动芯片,ES8388 是一款高性能、低功耗且低成本的音频编解码器。它包含2通道ADC、2通道DAC、麦克风放大器、耳机放大器、数字音效以及模拟混音和增益功能。

2. 声音配置

  1. 查看声卡设备

    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
  2. 声卡的驱动目录

    luckfox@luckfox:~$ ls /dev/snd/
    by-path controlC0 controlC1 pcmC0D0c pcmC0D0p pcmC1D0p seq timer
    • controlC0controlC1:用于声卡控制,C0 表示声卡 0,C1 表示声卡 1,对应上文的SOC自带的声音输出
    • pcmC0D0c:用于录音的 pcm 设备,最后面的“c”是 capture 的缩写,表示录音设备
    • pcmC0D0ppcmC1D0p:用于播放的 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. 测试

  1. 录音测试

    arecord -Dhw:0,0  -f cd -r 44100 -c 2 -t wav test.wav 
  2. 耳机测试(插上耳机会自动切换输入输出通道)

    设置录音增益:
    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
  3. 播放测试

    aplay -Dhw:0,0 -t wav /userdata/test.wav

4. 设备树简介

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