版权声明:本文为博主原创文章,未经博主允许不得转载。 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;