3568 Linux 录音无声音问题 RK809 —— 单端输入错配为差分输入
问题描述
3568 Linux 播音正常,但使用gnome-sound-recorder录音,无声音。后面发现是录到的声音特别小,在图形界面上将麦克风输入的增益调到150%也改善不大。
分析
既然播音正常,说明 I2S 总线、时钟配置以及 RK809 的基础通信大概率是没问题的。所以怀疑录音没声音是因为 Ubuntu 上层音频服务(PulseAudio/PipeWire)的路由没配好,或者是 ALSA 层的混音器(Mixer)里录音通道被静音了。分层排查:
确认 ALSA 录音设备节点:
首先看系统有没有正确识别到录音设备。在终端执行:
arecord -l
可以看到输出是有识别到RK809的
**** CAPTURE 硬體裝置清單 ****
card 0: rockchiprk809co [rockchip,rk809-codec], device 0: fe410000.i2s-rk817-hifi rk817-hifi-0 [fe410000.i2s-rk817-hifi rk817-hifi-0]
子设备: 0/1
子设备 #0: subdevice #0
绕过上层直接用 ALSA 录音: 验证硬件层是否畅通.
配好 Mixer 后,暂时不管 Ubuntu 里的各种声音设置,直接用底层命令强行录一段 5 秒的音频试试(假设设备是 hw:0,0):
arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav
录完之后用 aplay test.wav 听一下。
- 如果有声音: 说明驱动和硬件完全没问题,锅 100% 在 Ubuntu 的 PulseAudio/PipeWire,或者 ALSA UCM (Use Case Manager) 配置上。
- 如果还是纯静音: 那说明问题比想象的底层。可能是 RK809 的 Mic Bias(麦克风偏置电压)没打开,这时候可能还得回头瞄一眼设备树里的
mic-in-vsel之类的属性,或者用寄存器工具看一下 RK809 相关的 ADC 寄存器状态。
报错
arecord: main:852: 音乐打开错误: 设备或资源忙
这是因为 Ubuntu 桌面的音频服务(通常是 PulseAudio 或 PipeWire)一开机就把声卡硬件死死霸占了。你加了 -D hw:0,0 参数,等于是想绕过系统直接抢硬件的独占权,系统肯定不让。
用 pasuspender 命令可以把 PulseAudio 暂时挂起,强制把硬件让出来给 arecord 用:
pasuspender -- arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav
播放使用
pasuspender -- aplay -D hw:0,0 test.wav
发现实际上是有声音的,只是非常小声,于是重新使用桌面的录音软件,发现也是这个情况。
实际原因
查看设备树发现问题,原理图的mic输入是单端的,但是设备树的配置是差分,改为单端的即可:
diff --git a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
index 013cf30dd..3f7194517 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
@@ -928,6 +928,5 @@ &pwm5 {
&rk809_codec {
/delete-property/ spk-ctl-gpios;
+ /delete-property/ mic-in-differential;
};

留下评论