此外、每当我尝试将时钟(McASP1_ACLKR (位时钟)- P9_42)与示波器连接时、我都看不到任何脉冲。 似乎该引脚上没有适当的时钟信号。 我该如何进行调试和修复?
有什么想法吗?
Parag
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
我尝试将 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
结果相同。 我已经从器件树的简单音频卡的编解码器组件中删除了以下内容。
-时钟=<&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。