RK3288 Android5.1下的RT5640调试

goodman 2020-04-23 19:40:24 5169

首先交代下运行环境:
RK3288+Android5.1 mid版本
原来开发板上用的音频Codec是RT5631,现在板子上换了RT5640,拿到板子后首先Google一把,收到了CSDN的一篇文章,按他的说法是RT3224和RT5640是pin2pin的,软硬件完全兼容,使用RT3261的驱动即可,我实际在Android5.1上测试不行。于是还是使用了RT5640试了下,发现有有有声音,一路没有声音。修改过程记录如下:

1.修改config

路径kernel/arch/arm/configs/rockchip_defconfig:

CONFIG_SND_RK_SOC_RT5640=y

2.添加DTS

路径kernel/arch/arm/boot/dts/rk3288-tb_8846.dts:

    rockchip-rt5640 {
        status = "okay";
        compatible = "rockchip-rt5640";
        dais {
            dai0 {
                audio-codec = <&rt5640>;
                audio-controller = <&i2s>;
                format = "i2s";
                //continuous-clock;
                //bitclock-inversion;
                //frame-inversion;
                //bitclock-master;
                //frame-master;
            };
            dai1 {
                audio-codec = <&rt5640>;
                audio-controller = <&i2s>;
                //format = "i2s";
                format = "dsp_a";
                //continuous-clock;
                bitclock-inversion;
                //frame-inversion;
                //bitclock-master;
                //frame-master;
            };
        };
    };

&i2c2 {
    status = "okay";

    rt5640: rt5640@1c {
        compatible = "rt5640";
        reg = <0x1c>;
        codec-en-gpio = <1>;//sdk default high level
        spk-num= <2>;
        modem-input-mode = <1>;
        lout-to-modem_mode = <1>;
        spk-amplify = <2>;
        playback-if1-data_control = <0>;
        playback-if2-data_control = <0>;
        status = "okay";
    };

};

编译完成后烧写进去IN1P IN1N可以出声音了,但是IN2P IN2N死活没有声音,经过2天读RT5640 datasheet,终于搞定了问题,需要在kernel/sound/soc/codecs/rt5640.c里面做如下修改:

static struct rt5640_init_reg init_list[] = {
    {RT5640_GEN_CTRL1   , 0x3f01},//fa[12:13] = 1'b; fa[8~11]=1; fa[0]=1
    {RT5640_ADDA_CLK1   , 0x1114},//73[2] = 1'b
    {RT5640_MICBIAS     , 0x3030},//93[5:4] = 11'b
    .....
    ....
        {RT5640_REC_L2_MIXER    , 0x007d},//Mic1 -> RECMIXL
//  {RT5640_REC_R2_MIXER    , 0x007d},//Mic1 -> RECMIXR  // close by lwx
//  {RT5640_REC_L2_MIXER    , 0x006f},//Mic2 -> RECMIXL
    {RT5640_REC_R2_MIXER    , 0x006f},//Mic2 -> RECMIXR  // open  by lwx
    {RT5640_STO_ADC_MIXER   , 0x3020},//ADC -> Sto ADC mixer
    .....
    .....

修改完成后IN2P IN2N也可以输入声音了。

3.调试技巧

调试工具就是tinycap tinymix tinyplay编译进android系统即可

#采集声音
tinycap  test.wav
#播放声音
tinyplay  test.wav
#控制并改特定的寄存器
 tinymix

还有2个超级有用的命令,可以实时修改codec的寄存器,可写,对于调试codec来说实在太方便了。

#读寄存器
cat sys/kernel/debug/asoc/RK_RT5640/rt5640.2-001c/codec_reg

#写寄存器
echo '01 007D' > sys/kernel/debug/asoc/RK_RT5640/rt5640.2-001c/codec_reg
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
goodman
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
关于作者
goodman

goodman

wooshang@126.com

原创18
阅读8.1w
收藏6
点赞23
评论12
打赏用户 0
我要创作
分享技术经验,可获取创作收益
分类专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
goodman
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区