This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Linux
我正在尝试解决嵌入式 Linux 系统上的 tlv320aic3104的麦克风输入削波问题。 为了实现这一点、我尝试在输入混合之前降低增益、然后再进入可编程增益放大器。
数据表指示我可以使用 MIC2L/R 来保留 ADC 控制寄存器(表23)。 第0页/寄存器17)要实现此目的、但我没有为我提供用户空间访问权限的 Linux 驱动程序。 相反、它似乎将该寄存 器映射到左 PGA 混频器的"Mic2L 开关"和"Mic2R 开关"。 通过查看驱动程序代码(Linux/sound/soc/codecs/tlv320aic3x.c)、可以看到正在声明此小工具选项、如下所示:
//左 PGA 混频器(用于 tlv320aic3104)*/
静态常量结构 snd_kcontrol_new aic3104_left_PGA_Mixer_control[]={
SoC_DAPM_SINGLE_AIC3X ("Line1L 开关"、LINE1L_2_LADC_CTRL、3、1、1)、
SoC_DAPM_SINGLE_AIC3X ("Line1R 开关"、LINE1R_2_LADC_CTRL、3、1、1)、
SoC_DAPM_SINGLE_AIC3X ("Mic2L 开关"、MIC3LR_2_LADC_CTRL、4、1、1)、
SoC_DAPM_SINGLE_AIC3X ("Mic2R 开关"、MIC3LR_2_LADC_CTRL、0、1、1)、
};
在打开 Mic2L 开关的情况下、i2cget 返回0x0F (0dB 增益)值、而在关闭时返回0xff (未连接)
我发现宏的定义为:
#define SOC_DAPM_SINGLE_AIC3X (xname、reg、shift、mask、invert)\
SoC_SINGLE_EXT (xname、reg、SHIFT、MASK、INVERK、 \
snd_soc_dapm_get_volsw、snd_soc_dapm_put _volsw_aic3x)
因此、作为黑暗中的一个镜头、我已经将其更改为这个、并重建了:
SoC_DAPM_SINGLE_AIC3X ("Mic2L 开关"、MIC3LR_2_LADC_CTRL、4、0xF、0)、
SoC_DAPM_SINGLE_AIC3X ("Mic2R 开关"、MIC3LR_2_LADC_CTRL、0、0xF、0)、
我希望这可以让我能够完全访问该寄存器、但这似乎使设置消失了、因此看起来没有效果。
最后请注意、我使用的是2014版驱动程序。 我已经将其与 github.com/torvalds/linux 上的最新版本进行了比较、但看不到可以解决此问题的任何差异。
我们非常感谢您的任何帮助或建议。
您好、Steve、
感谢您回来。 我通过将输入范围降至编解码器来解决了这个问题。 我发现的一个问题是、提供的基准电压为1.8V、但在进入编解码器上的 MIC2R 和 MIC2L 引脚之前、470nF 电容器的另一侧、基准电压为1.2V。 这意味着信号一直达到0V 电压轨并被削波。 您是否对电压为何会更低有任何见解?
AVDD 和2个 DRVDD 引脚连接到3V3电源、我测量到该电源在大约3.1V 时略低。
IOVDD 也连接到3V3电源、但数据表似乎表明它通常为1.8V、最大为3.6V。 我猜这不会导致我看到的问题。
DVDD 连接到1V8电源、即我测得的正确值。
DVSS、AVSSI、AVSS2和 DRVSS 引脚均接地。
McASP/I2S 看起来工作正常、I2C 也是如此
有什么想法、为什么我在 MIC2L 和 MIC2R 引脚上获得1.2V 基准电压?
Keith、