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/AM3359:I2S 麦克风配置

Guru**** 2538955 points
Other Parts Discussed in Thread: PCM5102A, PCM1864

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/677078/linux-am3359-i2s-microphone-configuration

器件型号:AM3359
主题中讨论的其他器件:PCM5102APCM1864

工具/软件:Linux

我尝试将 I2S 麦克风(https://www.adafruit.com/product/3421)与 BeagleBone Black 连接。 我遵循了文章(http://www.ti.com/lit/an/sprac97/sprac97.pdf)、并按照文章中的建议更新了器件树和 Linux 内核。  

器件树的 I2S 组件(用于麦克风)作为 dtsi 包含在主器件树源代码中。 dtsi 的内容如下所示


&am33xx_pinmux {
        mcasp1_pins: mcasp1_pins {
             pinctrl-single,pins = <
                /* sink must enable receivers */
                0x1a0 0x23
                /* P9_42 mcasp1_aclkx - bit clock */
                0x1a4 0x23
                /* P9_27 mcasp1_fsx - frame sync */
                0x1a8 0x23
                /* P9_41 mcasp1_axr0 - i2s input */
             >;
        };
};

&mcasp1 {
        #sound-dai-cells = <0>;
        pinctrl-names = "default";
        pinctrl-0 = <&mcasp1_pins>;
        status = "okay";
        op-mode = <0>;
        tdm-slots = <2>;
        num-serializer = <4>;
        serial-dir = < /* 1 TX 2 RX 0 unused */
                2 0 0 0
                >;
        rx-num-evt = <1>;
        tx-num-evt = <1>;
};

/ {
        pcm5102a: pcm5102a {
                #sound-dai-cells = <0>;
                compatible = "ti,pcm5102a";
                status = "okay";
        };

        sound1: sound@1 {
                compatible = "simple-audio-card";
                simple-audio-card,name = "PCM5102a";
                simple-audio-card,format = "i2s";
                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";
                };
        };
};


I have also compiled the kernel with a new driver pcm5102 as suggested in the document. Finally, I see the driver listed in the output of the arecord command.

root@arm:/sys/class/gpio# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: PCM5102a [PCM5102a], device 0: davinci-mcasp.0-pcm5102a-hifi pcm5102a-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0


但是、每当我尝试录制音频时、我都无法获取任何音频数据。 音频文件是格式、但无论我尝试录制音频的时间长短、文件大小始终为44字节。 显然、文件中没有数据。  

使用 arecord 命令进行记录时出现错误、如下所示

arecord -d 10 -Dhw:0,0 -f dat audio.wav
Recording WAVE 'audio.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
arecord: pcm_read:2032: read error: Input/output error

此外、每当我尝试将时钟(McASP1_ACLKR (位时钟)- P9_42)与示波器连接时、我都看不到任何脉冲。 似乎该引脚上没有适当的时钟信号。 我该如何进行调试和修复?

有什么想法吗?

Parag

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

    您能否从 DTS 文件中删除这两行并报告结果?

    简单音频卡、编解码器{
    #sound-di-cells =<0>;
    sound-dai =<&pcm5102a>;
    -时钟=<&McASP1_Fck>;
    -时钟名称="MCLK";
    };

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

    结果相同。 我已经从器件树的简单音频卡的编解码器组件中删除了以下内容。

    -时钟=<&McASP1_Fck>;
    -时钟名称="MCLK";

    帧同步、位时钟和数据上的信号如下所示。

    帧速率:46.9KHz

    位时钟速率:1.5MHz

    数据:32.76 KHz (即使没有录制或播放任何内容!!! 记录时、它在32.76至32.78 KHz 之间变化)

    所记录的声音与之前一样是连续收缩的噪声。

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

    [引用用户="Parag Sharma"]

    帧同步、位时钟和数据上的信号如下所示。

    帧速率:46.9KHz

    位时钟速率:1.5MHz

    [/报价]

    对于 Fs、我们应该具有48kHz 的频率;对于 BCLK、我们应该具有1.536MHz 的频率。 这可能是一个问题。 您可以检查 Raspberry Pi 中的 FS/BCLK 值、并在此处与这些值进行比较。 您还可以检查 AM335x TI 电路板(EVM 或 Starterkit)上的 FS/BCLK 值、并在此处与这些值进行比较。

    此外、在您发送的链接中、我们还提供了"I2S 是一款小型、低成本 MEMS 麦克风、其范围约为50Hz - 15KHz、适用于所有常规音频录制/检测。" 这是否意味着在提供46.9KHz 时、支持的最大 FS 为15KHz?

    [引用用户="Parag Sharma"]

    数据:32.76 KHz (即使没有录制或播放任何内容!!! 记录时、它在32.76至32.78 KHz 之间变化)

    所记录的声音与之前一样是连续收缩的噪声。

    [/报价]

    这看起来不正确。 当没有 FS/BCLK 信号时、数据引脚上应该没有音频数据。 这可能是硬件故障。 您是否只能尝试回放模式、在回放模式下、您在 FS/BCLK/数据引脚上观察到什么?

    此致、
    帕维尔

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

    您好、Pavel、

    感谢您的指导。 最后、我想知道数据引脚(McASP1_AXR0)为什么在不录制/播放时始终具有某些信号。 BeagleBone DTS (AM335x-bone-common.dts)具有 clkout2_pins 的设置、该设置将时钟设置为同一引脚(P9_41)。 在我评论这一点的那一刻、一切都开始按预期工作。  

    我终于能够使用 I2S 麦克风和 BeagleBone Black 录制声音了。  

    3个月的努力令人惊叹,但每一点都值得。 我学到了很多。 非常感谢 Pavel。