[RK3399][Android7.1]ALC5651 声卡驱动调试

该记录文档为项目调试记录,记录调试过程中遇到的相关要点问题,主要为了后续时间久了后,出现相关问题的时候,方便查阅了解项目之前的调试情况,或者需要从以前的调试记录中得到一些有用的调试信息。

ALC5651 声卡驱动调试

硬件电路

板子上硬件设计的声音回放通路是:

  1. RK3399 I2S2 -> RK3399 HDMI TX -> HDMI 电视机
  2. RK3399 I2S1 -> RT5651 CODEC ->hp/line out、

录音通路:

  1. mic -> RT5651 CODEC ->RK3399 I2S1

RT5651声卡是双codec声卡,但这个项目只用到了一个codec,原理图上也只接了一组I2S出来,耳机座设计是国标。

在这里插入图片描述
I2C上原理图标注的是I2C1,但实际接到主控那边是I2C4,代码目前配置的是I2C4

在这里插入图片描述

另外,这个I2C4的时钟时序要配置,不然通讯会报错,时序配置上升沿需要延时300ns,下降沿要延时15ns。

    i2c-scl-rising-time-ns = <300>;
    i2c-scl-falling-time-ns = <15>;

调试过程

1.确认声卡是否注册成功:

rk3399_mid:/ # cat /proc/asound/cards
 0 [ROCKCHIPSPDIF  ]: ROCKCHIP_SPDIF - ROCKCHIP,SPDIF
                      ROCKCHIP,SPDIF
 1 [realtekrt5651co]: realtek_rt5651- - realtek,rt5651-codec
                      realtek,rt5651-codec

2.确认声卡1是5651的,然后查看时钟是否有分配,5651用的是i2s0:

rk3399_mid:/ # cat /d/clk/clk_summary | grep i2s
    clk_i2s1_div                          0            0           0          0 0  
       clk_i2s1_frac                      0            0           0          0 0  
          clk_i2s2_div                    0            0   800000000          0 0  
             clk_i2s2_frac                0            0    40000000          0 0  
          clk_i2s0_div                    0            1   800000000          0 0  
             clk_i2s0_frac                0            1    11289600          0 0  
                clk_i2s0_mux              0            1    11289600          0 0  
                   clk_i2s0               0            1    11289600          0 0  
                      clk_i2sout_src           0            0    11289600          0 0  
                hclk_i2s2                 1            2   100000000          0 0  
                hclk_i2s1                 0            0   100000000          0 0  
                hclk_i2s0                 1            2   100000000          0 0  
 clk_i2sout                               0            0           0          0 0  
 clk_i2s2_mux                             0            1           0          0 0  
    clk_i2s2                              0            1           0          0 0  
 clk_i2s1_mux                             0            0           0          0 0  
    clk_i2s1                              0            0           0          0 0                 

3.通路验证
查看声卡支持哪些控制命令:

tinymix -D 1

Headphone 调试,命令行输入命令使能通路:

tinymix -D 1 "RT5651 ASRC Switch" 0
tinymix -D 1 "DAC MIXL INF1 Switch" 1
tinymix -D 1 "DAC MIXR INF1 Switch" 1
tinymix -D 1 "Stereo DAC MIXL DAC L1 Switch" 1
tinymix -D 1 "Stereo DAC MIXR DAC R1 Switch" 1
tinymix -D 1 "OUT MIXL DAC L1 Switch" 1
tinymix -D 1 "OUT MIXR DAC R1 Switch" 1
tinymix -D 1 "HPOVOL L Switch" 1
tinymix -D 1 "HPOVOL R Switch" 1
tinymix -D 1 "HPO MIX HPVOL Switch" 1
tinymix -D 1 "HPO MIX HPVOL Switch" 1
tinymix -D 1 "HPO L Playback Switch" 1
tinymix -D 1 "HPO R Playback Switch" 1

然后播放wav音乐,注意这个测试的wav音乐需要2个通道、44.1khz、16bit的,否则输出的是噪音,播放:

tinyplay /sdcard/002.wav  -D 1 -d 0

4.用命令调通底层声音回放通路后,hal层确认codec的通路设置。

HAL层的配置文件默认是读card0的配置,一般来说,有codec的情况下card0都是codec,所以配置也就用的codec的配置。但3399上使能hdmi-dp-sound声卡后,hdmi-dp-sound驱动会比simple-audio-card注册早,也就是hdmi-dp-sound声卡是card0,配置用的是默认的配置,所以会导致codec的声卡没有声音输出。目前修改方法是通路初始化默认去读card2 codec的配置,然后hdmi声卡改为1,rt5651声卡的通路配置全部配置成card2。

调试时遇到的问题

1.I2C通讯不成功,串口打印timeout, ipd: 0x00, state: 1

这个问题是硬件I2C 两根线上的两个上拉电阻没上,示波器量不到波形。

2.Codec 声卡驱动加载不成功,识别到DEVICE ID后报错退出

串口打印:[ 1.024931] rt5651 1-001a: Device with ID register 0xffffffc0 is not rt5651
这个问题是I2C设备没挂对导致,原理图上标识的是I2C1,实际挂到I2C4。

3.耳机插入检测不到

dts配置好检测引脚后,耳机插入还是没反应,检查是硬件上的接线接错了,飞线后插入耳机,驱动检测正常。

4.带MIC耳机检测不到ADC值问题

由于硬件没将检测引脚接到ADC IN上,所以驱动无法根据ADC值判断耳机是否带麦,主控那边硬件没有将线接出来,导致无法调试,需要硬件改版,LINE OUT的也一样。

发布了247 篇原创文章 · 获赞 93 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/103327391