
瑞芯微RK809音频驱动
瑞芯微RV1126中的RK809音频驱动开发
·
RK809音频配置
- 内核配置打开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
- 设备树配置:在 rv1126-evb-v10.dtsi 中有RK809相关配置
- 对比正点原子的配置内容,正点原子使用的是默认配置,但是我们硬件连接与正点原子有所差别,所以我们需要修改这个位置
- 上面的0 1 2 3表示声道顺序,0开头表示优先使用sdi0,pinctrl-0中的四个配置就对应原理图中的四个配置
- 我们使用的是差分输入,所以还需要增加如下配置属性
RK809无法设置音量问题
- 首先RK809要能录取音频,且有声音,只是无法设置音量
- 第一步:cat /proc/asound/cards 检查所有声卡状态
- 第二步:amixer -c0 cset numid=2 1 打开 LANE IN功能
- 第三步: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
- 第五步:arecord record.wav 这里执行后会卡住,直接ctrl+c结束就好
- 第六步:amixer contents 执行这个命令,查看是否有'Master Capture Volume'等音频设备控制项
- 第七步:amixer cset numid=4 0,0 将音量值设置为0
- 第八步:alsactl store -f ./asound.state 保存音频配置
- 第九步:将asound.state 配置放到 /etc/ 目录下
- 第十步:在/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 }
- 第十一步:在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 ;;
- 第十二步:重启开发板,开机自动启动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
更多推荐
所有评论(0)