RK3588 音频设备树、调试与性能调优

RK3588 音频设备树、调试与性能调优

1. 先确认真实拓扑

源码中存在某驱动不等于板级启用。以运行 DTS 和 /proc/device-tree 为准:

1
2
3
4
5
6
machine sound node
├─ CPU sound-dai -> i2s/pdm/spdif
├─ codec sound-dai -> external/internal/hdmi codec
├─ format/master
├─ routing/widgets
└─ clocks/pinctrl/jack/amp

2. RK3588 SoC 节点

rk3588s.dtsi 包含多组:

  • I2S/TDM;
  • legacy I2S;
  • PDM;
  • S/PDIF TX/RX;
  • VAD;
  • digital codec。

多数默认 disabled,由板级 DTS 选择,避免引脚和时钟冲突。

本树 rockchip_linux_defconfig 已启用 I2S/TDM、PDM、SPDIF/SPDIFRX、HDMI machine 等,但没有显式启用旧 SND_SOC_ROCKCHIP_I2S 和 VAD。因此使用 RK3588 的 I2S2/I2S3 旧 IP 或 VAD 时,必须检查最终 .config,不能只看 DTS 节点。

3. DTS 核对清单

  • status = "okay"
  • compatible 与驱动 match;
  • clocksclock-names
  • assigned clock parent/rate;
  • resets;
  • DMA phandle/name;
  • pinctrl;
  • power domain;
  • CPU/codec sound-dai
  • dai-format
  • bitclock/frame master;
  • TDM slots/masks;
  • audio-routing;
  • GPIO amp/mute/jack;
  • codec I2C address/regulator/MCLK。

4. 启动检查

1
2
3
4
5
6
zcat /proc/config.gz | grep -E 'CONFIG_SND|ROCKCHIP'
dmesg | grep -Ei 'snd|asoc|audio|i2s|pdm|spdif|codec|defer'
cat /proc/asound/cards
cat /proc/asound/pcm
aplay -l
arecord -l

若 card 不出现,先查 probe/bind;若 card 出现但无声,再查 params、route、clock 和物理信号。

5. 分层测试

  1. aplay -l 确认设备;
  2. --dump-hw-params 确认能力;
  3. hw:C,D 排除插件;
  4. 固定 48 kHz/S16_LE/2ch;
  5. 观察 BCLK/LRCK/data;
  6. 检查 DMA IRQ;
  7. 再启用 PipeWire/PulseAudio/GStreamer。

6. XRUN

1
2
3
cat /proc/asound/card0/pcm0p/sub0/status
cat /proc/interrupts
top -H

调优顺序:

  • 增大 period/buffer;
  • 查 realtime throttling;
  • 查 IRQ/CPU affinity;
  • 查 cpufreq/idle;
  • 查 DMA contention;
  • 查 clock drift/ASRC;
  • 查应用是否及时供数。

不要先通过无限增大 buffer 掩盖驱动 pointer/IRQ 错误。

7. 低延迟

  • 使用 hw:
  • 选硬件原生 rate/format;
  • 2~4 periods 起步;
  • realtime thread + memory lock;
  • 避免运行时频繁 clock/power切换;
  • 将音频 IRQ 和应用线程放到负载稳定 CPU;
  • 验证 thermal throttling。

低延迟与低功耗相冲突,应以 XRUN 和端到端测量决定。

8. 多媒体边界

RKMPP/VPU 处理压缩视频/图像,不负责 ALSA PCM 调度。容器中的 AAC/Opus 等通常由用户态/其他解码器解码后送 ALSA;只有显式 compress/DSP offload 才绕开普通 PCM。

9. HDMI

  • DRM connector 必须 connected;
  • ELD 必须有效;
  • mode set 后重新验证;
  • sink 只报 2ch 时不能强制多声道;
  • 多 HDMI/DP connector 要确认 card/device 映射。

10. PDM/VAD

  • 检查 DMIC clock 和 pinctrl;
  • 验证 channel mapping;
  • 关闭 AGC/HPF 做基线;
  • VAD 阈值需在真实噪声环境标定;
  • suspend wake 要验证 wakeup-source 和电源域。

11. 动态调试

1
2
3
mount -t debugfs none /sys/kernel/debug
echo 'file sound/soc/* +p' > /sys/kernel/debug/dynamic_debug/control
echo 'file sound/soc/rockchip/* +p' > /sys/kernel/debug/dynamic_debug/control

量产环境谨慎开启,日志会改变实时性。

12. 结论

RK3588 音频问题应按“card 绑定 → hw_params → clock/pin → DMA/IRQ → route/codec → 用户态”逐层定位。只看 aplay 错误或只改 mixer,通常无法定位跨 ASoC、clock、DMA、DRM 的问题。

文章互动

阅读 --

留言

0 条留言

正在加载留言…