[RK3399][Android7.1] 调试笔记 --- 使用ADC芯片ES7243遇到的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kris_fei/article/details/84838536

Platform: RK3399
OS: Android 7.1
Kernel: v4.4.83

用途:

ES7243模块用于环形麦克场景时,采集的是音频播放的声音,然后采到之后回送到CPU,和麦克录取到的声音做消回声处理。


遇到问题:

  • 问题一:I2C通信失败,波形和电压都正常。
    原因一:
    ES7243的I2C受MCLK影响, 需要发送两个0101的MCLK,I2C才能工作。
    改动:
    在probe中使能mclk。
    原因二:
    I2C的地址是0x13,而不是0x10.
    原因三:
    I2C的线过长,读写的时候有干扰。
    改动:
    添加电容。

  • 问题二:tinycap不能录8通道(包含6录环麦)
    原因:
    驱动对通道数默认做了限制。
    改动:

static struct snd_soc_dai_driver es7243_dai0 = {
	.name = "ES7243 HiFi 0",
	.capture = {
		.stream_name = "Capture",
		.channels_min = 2,
		.channels_max = 8,
		.rates = es7243_RATES,
		.formats = es7243_FORMATS,
	 },
	.ops = &es7243_ops,
	.symmetric_rates = 1,
};
  • 问题三:出来的数据是单声道而不是双声道。
    原因:
    默认驱动使用的是TDM模式。
    改动:
    使用I2S模式。

寄存器调试:

驱动提供了寄存器的读写调试,路径 /sys/devices/platform/ff110000.i2c/i2c-1/1-0013/es7243_debug

读例子:
//读取0x00开始的16个寄存器
#echo 0010 > es7243

echo 0010 > es7243                                                             
[ 1787.143739] REG[0x00]: 0x01;  REG[0x01]: 0x0c;  REG[0x02]: 0x10;  REG[0x03]: 0x04;  
[ 1787.146729] REG[0x04]: 0x02;  REG[0x05]: 0x13;  REG[0x06]: 0x00;  REG[0x07]: 0x80;  
[ 1787.149371] REG[0x08]: 0x43;  REG[0x09]: 0x3f;  REG[0x0a]: 0xc0;  REG[0x0b]: 0xc0;  
[ 1787.151682] REG[0x0c]: 0x12;  REG[0x0d]: 0xa0;  REG[0x0e]: 0x40;  REG[0x0f]: 0xff;

参考:

数字音频接口

猜你喜欢

转载自blog.csdn.net/kris_fei/article/details/84838536