audio之mclk异常分析以及通道映射

1.mclk异常分析

        (以调试tlv320aic为例)当录音失败时,需要测量下i2s的信号,包括sclk,lrck,sdi以及mclk;常遇到mclk异常,也就是示波器测量到其频率的波形不稳定,频率大小对不上,电压和幅值也不对,例如下图所示:

        设备树上看到的频率为12288000,但实际测量为2.8M;那么在dts中配置上assigned-clock-rates = <12288000>;然后检查下TLV320aic驱动里面,在开启录音的时候,是否有调用到clk_prepare_enable(mclk); 有些codec驱动没有这个clk_prepare_enable,那就自己添加上去验证;驱动修改如下在aic31xx_codec_probe添加:dts和驱动修改后,编译升级固件,此时mclk的波形幅值都是正确的,并且能测量到是12.28MHz,波形也是稳定的

2.mclk没有信号输出

        录音时,mclk没有信号输出;首先要确保mclk的引脚是复用正确的,可以通过该指令去查看cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins;下图可见是正常的,那么mclk这个引脚当作普通的gpio是否可以正常的拉高拉低,如果不行的话,那就是硬件上的问题了。

        当mclk的复用,电压之类的都正常,那么录音的时候还是没有波形信号输出,只能再去检查下dts的clock配置;

        clocks = <&cru I2S3_MCLKOUT>; 
        clock-names = "mclk";
        assigned-clocks = <&cru I2S3_MCLKOUT>, <&cru I2S3_MCLK_IOE>;
        assigned-clock-rates = <12288000>;
        assigned-clock-parents = <&cru I2S3_MCLKOUT_TX>, <&cru I2S3_MCLKOUT>;     

  #####该问题,mclk没有出来,主要是assigned-clock-parents当时配置为<&cru I2S3_MCLKOUT_TX>,
  少了一个 <&cru I2S3_MCLKOUT>;

        在驱动代码中可以看到,i2s3有两个clock-parent,如下,代码中找到关键词“CLK_SET_RATE_PARENT”,其对应的有两个 即I2S3_MCLKOUT_TX,I2S3_MCLKOUT; 而assigned-clocks就查找关键字“MUXGRF",其对应了I2S3_MCLKOUT和I2S3_MCLK_IOE;

3.通道引脚的映射

        例如一个i2s下面挂载着2个tlv320aic芯片,使用SDO1和SDO2输出,那么此时需要进行通道映射,在i2s的节点下面添加配置rockchip,i2s-tx-route = <2 1 0 3>; 其实是<SDO0 SDO1 SDO2 SDO3>这样的顺序排列, 也就是说把SDO0这个寄存器写入2,也就是使能了path2(56通道),SDO1写入了1,使能了path1(34通道),SDO2写入了0,使能了path0(12通道),SDO3写入了3,使能了path3(78通道);由于一个SDO是2通道,所以需要4通道的音源去播放才行。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值