BSP调试#08:Audio(RK3588)

描述

本合集的是我当初调试 RK3588 平台时的原始笔记——只保留了那些踩过坑的问题接口,没出过问题的内容全删掉了。文章框架如下:RK3588

其中,“调试过程”章节可能有点意思(记录了我踩过的坑),其他章节无关紧要。

硬件设计

RK3588RK3588

软件配置

dts 配置

RK3588

内核配置

RK3588

调试过程

【问题描述】:配置后,声卡已经正常生成,但发现无法正常播、录音。

 

【问题分析】:开始时,我比较怀疑是声卡控件操作不对导致。结果再三确认不是,这下彻底没有头绪。只能“死马当活马医”,下面一通操作猛如虎。

查看引脚定义时,发现 gpio1-21 不太正常,进一步排查确认引脚存在复用。

RK3588

修改后

RK3588

验证 1:确认 MCLK 是否有时钟输出

RK3588

验证结果:无 MCLK 时钟输出。经测试发现,播放音频时,无 MCLK 时钟输出。接下来需要解决时钟问题。

但是,确认一番后并没有发现问题。

dts配置确认没有问题。引脚正常调用,没被占用。

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

检查 MCLK 时钟,也没问题。

  •  
  •  
cat /sys/kernel/debug/clk/clk_summary | grep -E "i2s0|mclk" cat /sys/kernel/debug/clk/clk_summary | grep i2s0_8ch_mclkout
RK3588

那为什么主时钟 MCLK 没有输出呢?后面验证发现, MCLK 时钟只有在正常播放或录制音频过程时,才会有输出

  • 播放音频时(正常情况下)

MCLK(主时钟):输出 12.288M 时钟 ;

SCLK(音频数据位时钟):输出 3M 时钟;

LRCK(音频数据左右声道时钟):输出 48kHz 采样率(与主时钟 12.288M 匹配);

SDO0:变化的频率输出。接音频芯片的 DAC 音频数据脚(DSDIN ),输入的音频数据经过音频芯片的内部解码转换后通过 LOUT/ROUT 输出。

SDI0:无变化。接音频芯片的 ADC 音频数据脚(ASDOUT)。

  • 录制音频时(正常情况下)

MCLK:输出 11.2896M 时钟 ;

SCLK:输出 2.8M 时钟;

LRCK:输出 44kHz 采样率(与主时钟 11.2896M 匹配);

SDO0:无变化;

SDI0:变化的频率输入。

说明:不同音频时钟会有所不同,测试遇到录音时时钟为 11.2896M,播放音频时钟为 12.288M。

 

 

【问题解决】:替换 spl 阶段的 bin 文件。将其他平台的rk3588_spl_vx.xx.bin 文件拷贝过来尝试,发现从 RK3568-SDK 中的rk3588_spl_v1.12.bin 可以解决该问题。

RK3588

拷贝过来同时修改RK3588MINIALL.ini 文件解决该问题。

  •  
vim ./rk3588/RK3588_LINUX6.1/rkbin/RKBOOTRK3588MINIALL.ini 
RK3588

功能验证

录音

  •  
arecord -D hw:0,0 -d 5 -f cd -t wav test.wav

播放

  •  
  •  
  •  
gst-play-1.0 test.wavaplay -Dplughw:0,0 test.wavaplay -D hw:0,0 --period-size=1024 --buffer-size=4096 -r 48000 -c 2 -f  test

(完)


本人专注 Linux 驱动 & Linux/Android BSP 开发调试,可接外包项目/技术支持/问题定位。有需求或交个朋友可加微信:【Chen_WeChat2025】。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分