常用的Audio调试工具

图片

调试思路

硬件方面:

(1)硬件供电与软件配置的domian一致,否则可能会造成功能异常,甚至芯片损坏等。

(2)使用示波器测量硬件信号:时钟和数据。测量时钟频率,幅度,占空比,jitter等是否符合协议规范(比如:当⼯作电压为3.3v,而实际时钟信号只有2v时,导致采集不到数据,原因可能是被外设拉低,或者对地短路,或者软件电压配置不正确等)。

软件方面:

(1)确认driver和配置dts,进入系统用i2cdetect -y -a X确认能否正确识别到音频设备。

(2)通过 procfs 确认声卡注册成功以及时钟是否设置正确。

(3)最后进行播录音测试,验证功能。

整体调试步骤如下:

第1步:确认引脚调用情况

cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins | grep i2s

第2步:确认声卡是否识别

 i2cdetect -y -a X

第3步:确认声卡是否注册成功

# cat /proc/asound/cards0 [rockchiprk809co]: rockchip_rk809- - rockchip,rk809-codecrockchip,rk809-codec7 [Loopback ]: Loopback - LoopbackLoopback 1
# ls /dev/snd/by-path controlC7 pcmC0D0p pcmC7D0p pcmC7D1pcontrolC0 pcmC0D0c pcmC7D0c pcmC7D1c timer

第4步:查看时钟设置是否正确​​​​​​​

cat /sys/kernel/debug/clk/clk_summary | grep -E "i2s0|mclk"cat /sys/kernel/debug/clk/clk_summary | grep i2s0_8ch_mclkoutcat /sys/kernel/debug/clk/clk_summary | egrep "i2s0|pll"

排查思路

(1)声卡注册失败

  • 确认声卡驱动配置编译进系统;

  • 根据 kmsg 定位原因:DAI,CODEC 或者 Machine,比如如下log表示DAI未注册上

[ 0.584114] rk-multicodecs vad-sound: ASoC: CPU DAI (null) not registered

  • DAI fail:当 DMA 通道资源不足时,导致 DAI 注册失败,关闭其他使用 DMA 的模块,再次确认。

  • CODEC fail:使用万用表 和 示波器 测量 CODEC 电压,时钟;

  • 配合 i2c-tools 确认 i2c 设备通信是否正常。

(2)播放无声

  • 确认音频源为非静音文件;

  • 使用 aplay 或者 tinyplay 播放,定位问题是发生在用户态还是内核态;

  • 播放等待10秒以上确认是否为 I/O error 问题;

  • 使用 amixer 或者 tinymix 检查 CODEC 内部 DAC 通路是否打开,音量是否静音

  • 查看 寄存器 配置,配合芯⽚⼿册或者 CODEC ⼿册确认配置是否正确:IOMUX,DAI,CODEC。

  • 使⽤ 万⽤表 和 ⽰波器 测量电压,时钟,数据。确认电压,时钟正常,数据线上有波形;

  • 测量CODEC 近端 模拟输出信号是否正常,测量 PA 使能 gpio 电平,逐级定位问题点。

(3)录音无声

  • CODEC 端通过信号发生器生成 1k0 波形输入;

  • 使用 arecord 或者 tinycap 录音,定位问题是生在用户态还是内核态;

  • 录音等待10秒以上确认是否为 I/O error 问题;

  • 使用 amixer 或者 tinymix 检查 CODEC 内部 ADC 通路是否打开,音量是否静音;

  • 查看 寄存器 配置,配合芯片册或者 CODEC 手册确认配置是否正确:IOMUX,DAI,CODEC。

  • 使用万用表 和示波器测量电压,时钟,数据。确认电压,时钟正常,数据线上有波形;测量CODEC 近端模拟输⼊信号是否正常,逐级定位问题点。

(4)I/O error

播放录⾳10秒以上⽆响应时内核 log 打印: playback/capture write error DMA or IRQ trouble?

  • 通过 寄存器 查询 DAI 控制器 FIFO COUNT寄存器,是否已经停止计数;

  • 通过 procfs 查看 dma 中断是否更新: cat /proc/interrupts | grep dma;

  • 通过 寄存器 查询 DMA 控制器 channel status 寄存器(偏移地址:0x100)是否异常停止;

  • DAI 工作于 slave 时,请确保外设时钟在 DAI 的整个⽣命周期持续提供,如果无法保证,请保持常开。

欢迎关注“嵌入式分享”,持续更新!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐