该记录文档为项目调试记录,记录调试过程中遇到的相关要点问题,主要为了后续时间久了后,出现相关问题的时候,方便查阅了解项目之前的调试情况,或者需要从以前的调试记录中得到一些有用的调试信息。
ALC5651 声卡驱动调试
文章目录
硬件电路
板子上硬件设计的声音回放通路是:
- RK3399 I2S2 -> RK3399 HDMI TX -> HDMI 电视机
- RK3399 I2S1 -> RT5651 CODEC ->hp/line out、
录音通路:
- 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的也一样。