大家好、
我们的产品采用 TLV320ADC3140编解码器。 我们希望使用 TDM 模式录制4Ch 模拟麦克风。
但是、我们始终记录失败、并显示以下消息:
ACRECORD:PCM_READ:2221:读取错误:输入/输出错误
ALSA 记录命令:
# arecord -f dat -t wav -c 4 4ch.wav
这个编解码器 MCLK、BCLK、FCLK 是从一个时钟发生器输入的。
示波器测量信号分别为24.576MHz、3.072MHz 和48kHz。
CPU 端正在使用 MCASP2。 AXR5通过 tlv320adc3140的 SDOUT 进行 Rx 连接。
ACLKX、AFSX 也是来自时钟发生器的输入。
ACLKX= 3.072MHz。
AFSX = 48kHz
下面是我的设备树:
&main_pmx0 {
mcasp2_pins_default: mcasp2-pins-default {
pinctrl-single,pins = <
AM62X_IOPAD(0x0178, PIN_INPUT, 2) /* (AC20) RGMII2_TD3.MCASP2_ACLKX */
AM62X_IOPAD(0x0174, PIN_INPUT, 2) /* (AD21) RGMII2_TD2.MCASP2_AFSX */
AM62X_IOPAD(0x0184, PIN_INPUT, 2) /* (AE23) RGMII2_RD0.MCASP2_AXR2 */
AM62X_IOPAD(0x0164, PIN_OUTPUT, 2) /* (AA19) RGMII2_TX_CTL.MCASP2_AXR4 */
AM62X_IOPAD(0x0168, PIN_INPUT, 2) /* (AE21) RGMII2_TXC.MCASP2_AXR5 */
>;
};
};
/* Redefine rgmii2 pins avoid pinctrl conflict */
&main_rgmii2_pins_default {
pinctrl-single,pins = <
AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */
AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */
AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */
AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */
AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */
AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */
AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */
>;
};
&main_i2c2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c2_pins_default>;
clock-frequency = <400000>;
tlv320adc3140: audio-codec@4c {
status = "okay";
#sound-dai-cells = <0>;
compatible = "ti,tlv320adc3140";
reg = <0x4c>;
pinctrl-names = "default";
pinctrl-0 = <&audio_mic_rst_pins_default>;
ti,mic-bias-source = <0>;
ti,pdm-edge-select = <1 1 1 1>;
ti,gpio-config = <10 0>;
ti,gpi-config = <0 0 0 0>;
ti,gpo-config-1 = <0 0>;
ti,gpo-config-2 = <0 0>;
ti,gpo-config-3 = <0 0>;
ti,gpo-config-4 = <0 0>;
ti,slot-mapping = <0 1 2 3>;
ti,asi-tx-driver = <0>;
reset-gpios = <&main_gpio1 6 GPIO_ACTIVE_HIGH>;
};
};
&tlv320_mclk {
clock-frequency = <24576000>;
};
&mcasp1 {
status = "disabled";
};
&mcasp2 {
status = "okay";
#sound-dai-cells = <0>;
pinctrl-names = "defualt";
pinctrl-0 = <&mcasp2_pins_default>;
op-mode = <0>;
tdm-slots = <4>;
//assigned-clock-rates = <24576000>;
num-serializer = <6>;
serial-dir = <
0 0 1 0 1 2
>;
tx-num-evt = <32>;
rx-num-evt = <32>;
};
&codec_audio {
/delete-property/ simple-audio-card,widgets;
/delete-property/ simple-audio-card,routing;
simple-audio-card,format = "i2s";
simple-audio-card,widgets = "Microphone", "Mic";
simple-audio-card,routing =
"MIC1P", "Mic",
"MIC1M", "Mic",
"MIC2P", "Mic",
"MIC2M", "Mic",
"MIC3P", "Mic",
"MIC3M", "Mic",
"MIC4P", "Mic",
"MIC4M", "Mic";
//mclk-fs = <512>;
simple-audio-card,bitclock-master = <&sound_cpu>;
simple-audio-card,frame-master = <&sound_cpu>;
sound_cpu: simple-audio-card,cpu {
sound-dai = <&mcasp2>;
clocks = <&tlv320_mclk>;
dai-tdm-slot-num = <4>;
dai-tdm-slot-width = <32>;
dai-tdm-slot-rx-mask = <1 1 1 1>;
};
simple-audio-card,codec {
sound-dai = <&tlv320adc3140>;
dai-tdm-slot-num = <4>;
dai-tdm-slot-width = <32>;
dai-tdm-slot-tx-mask = <1 1 1 1>;
};
};
记录时、下面是 i2c 寄存器。

是否有任何内容出错?












