瑞芯微RK809音频驱动

RK809音频配置

  1. 内核配置打开SND_SOC_RK817项
    -> Device Drivers                                                                                                                                       │  
      -> Sound card support (SOUND [=y])                                                                                                                    │  
        -> Advanced Linux Sound Architecture (SND [=y])                                                                                                     │  
          -> ALSA for SoC audio support (SND_SOC [=y])                                                                                                      │  
            -> CODEC drivers 
              <*> Rockchip RK817 CODEC
  2. 设备树配置:在 rv1126-evb-v10.dtsi 中有RK809相关配置
  3. 对比正点原子的配置内容,正点原子使用的是默认配置,但是我们硬件连接与正点原子有所差别,所以我们需要修改这个位置
  4. 上面的0 1 2 3表示声道顺序,0开头表示优先使用sdi0,pinctrl-0中的四个配置就对应原理图中的四个配置
  5. 我们使用的是差分输入,所以还需要增加如下配置属性

RK809无法设置音量问题

  • 首先RK809要能录取音频,且有声音,只是无法设置音量
  1. 第一步:cat /proc/asound/cards 检查所有声卡状态
  2. 第二步:amixer -c0 cset numid=2 1 打开 LANE IN功能
  3. 第三步:arecord -Dhw:0,0 -c 2 -r 44100 -f S16_LE -d 10 /tmp/record.wav 使用LANE IN 录音,需要指定使用 rk809 集成的声卡
  4. 第四步:aplay -Dhw:0,0 /tmp/record.wav 播放录音,硅麦声卡不支持播放录音,这里需要指定使用LANE IN
  5. 第五步:arecord record.wav 这里执行后会卡住,直接ctrl+c结束就好
  6. 第六步:amixer contents 执行这个命令,查看是否有'Master Capture Volume'等音频设备控制项
  7. 第七步:amixer cset numid=4 0,0 将音量值设置为0
  8. 第八步:alsactl store -f ./asound.state 保存音频配置
  9. 第九步:将asound.state 配置放到 /etc/ 目录下
  10. 第十步:在/etc目录下创建一个文件 asound.conf 并添加如下内容
    pcm.!default
    {
        type asym
        playback.pcm "plug:softvol_ply"
        capture.pcm "plug:softvol_cap"
    }
    
    pcm.dmixer {
        type dmix
        ipc_key 5978293 # must be unique for all dmix plugins!!!!
        ipc_key_add_uid yes
        slave {
            pcm "hw:0,0"
            channels 2
            rate 48000
        }
        bindings {
            0 0
            1 1
        }
    }
    
    pcm.dsnooper {
        type dsnoop
        ipc_key 5978291 # must be unique for all dmix plugins!!!!
        ipc_key_add_uid yes
        slave {
            pcm "hw:0,0"
            channels 2
            rate 48000
        }    
        bindings {
            0 0
            1 1
        }
    }
    
    pcm.hooks_ply {
        type hooks
        slave.pcm "dmixer"
        hooks.0 {
            type ctl_elems
            hook_args [{
                name "Playback Path"
                preserve true
                value "SPK"
                lock false
            }]
        }
    }
    
    pcm.softvol_ply {
        type softvol
        slave.pcm "hooks_ply"
        control {
            name "Master Playback Volume"
            card 0
            device 0
        }
        min_dB -50.0
        max_dB 0.0
        resolution 101
    }
    
    pcm.hooks_cap {
        type hooks
        slave.pcm "dsnooper"
        hooks.0 {
            type ctl_elems
            hook_args [{
                name "Playback Path"
                preserve true
                value "Main Mic"
                lock false
            }]
        }
    }
    pcm.softvol_cap {
        type softvol
        slave.pcm "dsnooper"
        control {
            name "Master Capture Volume"
            card 0
            device 0
        }
        min_dB -50.0
        max_dB 0.0
        resolution 101
    }
    
  11. 第十一步:在etc/init.d 目录下创建文件 S49alsa 并设置可执行权限,然后添加如下内容
    #!/bin/sh
    
    #
    
    case "$1" in
    
      start)
    
        if [ -f "/userdata/asound.state" ];then
    
          alsactl restore -f /userdata/asound.state
    
        else
    
          alsactl restore -f /etc/asound.state
    
        fi
    
        ;;
    
      stop)
    
        alsactl store -f /userdata/asound.state
    
        ;;
    
      *)
    
        echo "Usage: $0 {start|stop}" 
    
        exit 1
    
        ;;
  12. 第十二步:重启开发板,开机自动启动S49alsa 就恢复音量设置了

音频相关命令操作

  • 注意:在获取音频时,需要先执行 amixer -c0 cset numid=2 1 打开 LANE IN功能
    cat /proc/asound/cards  检查所有声卡状态
    amixer -c0 cset numid=2 1  打开 LANE IN功能
    amixer -c0 cset numid=1 2  打开 SPK 功能,仅仅喇叭有声音输出
    amixer -c0 cset numid=1 3  打开 HP 功能,仅仅耳机有输出
    amixer -c0 cset numid=1 6  打开 HP 和 SPK 功能,两者都有输出
     
    arecord -c 2 -r 44100 -f S16_LE -d 10 /tmp/record.wav   使用硅麦录音,默认使用硅麦录音,可以不用指定声卡。
    arecord -Dhw:0,0 -c 2 -r 44100 -f S16_LE -d 10 /tmp/record.wav  使用LANE IN 录音,需要指定使用 rk809 集成的声卡
    aplay -Dhw:0,0 /tmp/record.wav   播放录音,硅麦声卡不支持播放录音,这里需要指定使用LANE IN 
    
    cat /sys/kernel/debug/regmap/0-0020-rk817-codec/registers   查看 codec 寄存器值
     cat /proc/asound/card1/pcm0c/sub0/status  查看声卡是否在运行中(在录音时才会显示running)
     
     使用RK官方测试程序: rkmedia_ai_test(示例仅支持保存至pcm文件。格式为s16_le。)
    【代码路径】
     external/rkmedia/examples/rkmedia_ai_test.c
    【快速使用】
     /usr/bin/rkmedia_ai_test
     使用方法:
     ./rkmedia_ai_test -v 99   (-v设置音量)
    
    //使用vlc查看裸音频
     vlc --demux=rawaud --rawaud-channels 2 --rawaud-fourcc s16l --rawaud-samplerate 16000 100.pcm
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值