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.

[参考译文] PCM1864:对于 AM5729中的每个串行引脚,我在2个通道中只获得1个通道

Guru**** 1127450 points
Other Parts Discussed in Thread: PCM1864, TIDA-01454
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1085559/pcm1864-i-am-getting-only-1-channel-out-of-2-for-each-serial-pin-in-am5729

部件号:PCM1864
在“线程”中讨论的其他部件:Tida-01454BeagleBoneBeagleTestPCM5102A

大家好,我想将 TIDA-01454 CMB 的8个信道记录到 BeagleBone AI 中。 由于 CMB 使用两个 PCM1864 ADC 构建,而且它也是 Beagle 主板,我按照本指南(https://www.ti.com/lit/an/sprac97/sprac97.pdf)进行了一些更改(Channels_max=16)。

我的处境与这种情况类似: https://e2e.ti.com/support/audio-group/audio/f/audio-forum/949983/pcm3168a-pcm3168aevm-obsoleted-send-me-the-pcb-files 

我成功地录制了 CMB 拥有的8个麦克风中的4个(我只需轻触麦克风检查该麦克风是否正常工作)的音频。 但我想记录8个频道。 目前工作的麦克风是 MIC1,MIC4,MIC5和 MIC8,尽管我要说噪音很大。CMB 有4个数据输出引脚,我想每个引脚传输2个通道,所以问题是每个引脚都是单声道而不是立体声。 这可能是因为 DTS 存在问题,因此这是我的 DTS 文件:

pcm5102a: pcm5102a { 

     #sound-dai-cells = <0>; 

     compatible = "ti,pcm5102a"; 

     status = "okay"; 

  }; 

   

   

  sound {compatible = "simple-audio-card"; 

    simple-audio-card,format = "i2s"; 

    simple-audio-card,name = "PCM5102a"; 

    simple-audio-card,bitclock-master = <&sound1_master>; 

    simple-audio-card,frame-master = <&sound1_master>; 

    simple-audio-card,bitclock-inversion; 

     

     

    simple-audio-card,cpu { 

            sound-dai = <&mcasp1>; 

    }; 

    sound1_master: simple-audio-card,codec { 

        #sound-dai-cells = <0>; 

        sound-dai = <&pcm5102a>; 

          //clocks = <&mcasp1_fck>; 

          //clock-names = "mclk"; 

      }; 

  }; 

&mcasp1 { 

    #sound-dai-cells = <0>; 

    pinctrl-names = "default"; 

    pinctrl-0 = <&mcasp1_pins>; 

    status = "okay"; 

    op-mode = <0>; /* MCASP_IIS_MODE */ 

    tdm-slots = <2>; 

    num-serializer = <4>; 

    serial-dir = < /* 1 TX 2 RX 0 unused */ 

        2 2 0 0 0 0 0 0 0 0 2 2

      >; 

    rx-num-evt = <4>; 

    tx-num-evt = <4>; 

};


串行目录就是这样,因为我使用 McAfee SP1_axr0,McAfee SP1_axr1,McAfee SP1_10和 McAfee SP1_axr11,这些是 Beaglbone AI 中提供的。 我将 J5 (CMB)中的数据1-miniDSP,DATA2-miniDSP,DATA3-miniDSP 和 DATA4-miniDSP 连接到我的 BeagleBone 中的以下引脚:

P9.18b                               173 fast rx       0 mcasp 0 d0       mcasp@48460000 (mcasp1_pins)
P9.17b                               174 fast rx       0 mcasp 0 d1       mcasp@48460000 (mcasp1_pins)
P9.30                                183 fast rx       0 mcasp 0 d10      mcasp@48460000 (mcasp1_pins)
P9.28                                184 fast rx       0 mcasp 0 d11      mcasp@48460000 (mcasp1_pins)


我还将 Data1-miniDSP,LRCLK 和 BCLK 连接到外部 I2S DAC 进行测试,我可以听到 MIC1和 MIC2。 因此,我可以确保输出是立体声的。 我的问题是,当将输出连接到 BeagleBone 并进行记录时,我只能为每个被测设备获得这两个通道中的一个。 我检查了所有这些部件,以防外部 I2S DAC 出现问题:

数据1正在提供 MIC1和 MIC2

数据2正在提供 MIC5和 MIC6

数据3提供了 MIC3和 MIC4

数据4提供了 MIC7和 MIC8

如果有帮助,以下是 myDummy 编码解码器:

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>

#include <sound/soc.h>

static struct snd_soc_dai_driver pcm5102a_dai = {
	.name = "pcm5102a-hifi",
	.playback = {
		.channels_min = 2,
		.channels_max = 2,
		.rates = SNDRV_PCM_RATE_8000_192000,
		.formats = SNDRV_PCM_FMTBIT_S16_LE |
			   SNDRV_PCM_FMTBIT_S24_LE |
			   SNDRV_PCM_FMTBIT_S32_LE
	},
	.capture = { 

		.stream_name = "Capture", 

		.channels_min = 1, 

		.channels_max = 16, 

		.rates = SNDRV_PCM_RATE_8000_192000, 

		.formats = SNDRV_PCM_FMTBIT_S16_LE | 

			SNDRV_PCM_FMTBIT_S24_LE | 

			SNDRV_PCM_FMTBIT_S32_LE 

	}, 
};

static struct snd_soc_codec_driver soc_codec_dev_pcm5102a;

static int pcm5102a_probe(struct platform_device *pdev)
{
	return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_pcm5102a,
			&pcm5102a_dai, 1);
}

static int pcm5102a_remove(struct platform_device *pdev)
{
	snd_soc_unregister_codec(&pdev->dev);
	return 0;
}

static const struct of_device_id pcm5102a_of_match[] = {
	{ .compatible = "ti,pcm5102a", },
	{ }
};
MODULE_DEVICE_TABLE(of, pcm5102a_of_match);

static struct platform_driver pcm5102a_codec_driver = {
	.probe		= pcm5102a_probe,
	.remove		= pcm5102a_remove,
	.driver		= {
		.name	= "pcm5102a-codec",
		.of_match_table = pcm5102a_of_match,
	},
};

module_platform_driver(pcm5102a_codec_driver);

MODULE_DESCRIPTION("ASoC PCM5102A codec driver");
MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
MODULE_LICENSE("GPL v2");

以及我的 CMB 配置:

uint8_t U1_PCM1864_CONFIG[][2] = { 

{0x00, 0x00}, // Change to Page 0 

{0x01, 0x40}, // PGA CH1_L to 32dB 

{0x02, 0x40}, // PGA CH1_R to 32dB 

{0x03, 0x40}, // PGA CH2_L to 32dB 

{0x04, 0x40}, // PGA CH2_R to 32dB 

{0x05, 0x86}, // Enable SMOOTH PGA Change; Independent Link PGA; 

{0x06, 0x41}, // Polarity: Normal, Channel: VINL1[SE] 

{0x07, 0x41}, // Polarity: Normal, Channel: VINR1[SE] 

{0x08, 0x44}, // Polarity: Normal, Channel: VINL3[SE] 

{0x09, 0x44}, // Polarity: Normal, Channel: VINR3[SE] 

{0x0A, 0x00}, // Secondary ADC Input: No Selection 

{0x0B, 0x44}, // RX WLEN: 24bit; TX WLEN: 24 bit; FMT: I2S format 

{0x10, 0x03}, // GPIO0_FUNC - SCK Out; GPIO0_POL - Normal 

{0x11, 0x50}, // GPIO3_FUNC - DOUT2; GPIO3_POL - Normal 

{0x12, 0x04}, // GPIO0_DIR - GPIO0 - Output 

{0x13, 0x40}, // GPIO3_DIR � GPIO3 - Output 

{0x20, 0x11}  // MST_MODE: Master; CLKDET_EN: Disable 

}; 

  

uint8_t U2_PCM1864_CONFIG[][2] = { 

{0x00, 0x00}, // Change to Page 0 

{0x01, 0x40}, // PGA CH1_L to 32dB 

{0x02, 0x40}, // PGA CH1_R to 32dB 

{0x03, 0x40}, // PGA CH2_L to 32dB 

{0x04, 0x40}, // PGA CH2_R to 32dB 

{0x05, 0x86}, // Enable SMOOTH PGA Change; Independent Link PGA; 

{0x06, 0x41}, // Polarity: Normal, Channel: VINL1[SE] 

{0x07, 0x41}, // Polarity: Normal, Channel: VINR1[SE] 

{0x08, 0x44}, // Polarity: Normal, Channel: VINL3[SE] 

{0x09, 0x44}, // Polarity: Normal, Channel: VINR3[SE] 

{0x0A, 0x00}, // Secondary ADC Input: No Selection 

{0x0B, 0x44}, // RX WLEN: 24bit; TX WLEN: 24 bit; FMT: I2S format 

{0x10, 0x00}, // GPIO0_FUNC – GPIO0; GPIO0_POL - Normal 

{0x11, 0x50}, // GPIO3_FUNC - DOUT2; GPIO3_POL - Normal 

{0x12, 0x00}, // GPIO0_DIR - GPIO0 - Input 

{0x13, 0x40}, // GPIO3_DIR � GPIO3 - Output 

{0x20, 0x01}  // MST_MODE: Slave; CLKDET_EN: Enable 

};

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当您能够从数据线上的所有多指标类集调查中获得输出时,ADC 是否正常。

    不幸的是,我的经验领域包括 ADC,我无法支持 BeagleBone

    我很抱歉...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,ADC 看起来正常。 如果有人在 DTS 和驾驶员方面有经验,我希望能得到帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不幸的是,我们的团队目前在这方面没有经验。