《线程》中讨论的其他部件:Tida-01454, BeagleBone, PCM1864, Beagle, PCM5102A, 测试
大家好,我想将 TIDA-01454 CMB 的8个信道记录到 BeagleBone AI 中。 由于 CMB 使用两个 PCM1864 ADC 构建,而且它也是 Beagle 主板,我按照本指南(https://www.ti.com/lit/an/sprac97/sprac97.pdf)进行了一些更改(Channels_max=16)。
#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 拥有的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>; };
我将 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
那么,什么问题呢? 如何获得所有的漫画?