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.

[参考译文] PCMD3180:器件配置问题(I2S 数据问题)

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1291884/pcmd3180-device-configuration-issues-i2s-data-issues

器件型号:PCMD3180

您好!

我是代表我负责一个项目的团队发布此帖子、该项目涉及使用 MEMS 麦克风(SPH0641LU4H-1)录制超声波声音以及使用 PCM3180将 PDM 转换为 I2S 音频输出。 我在运行 Ubuntu 服务器的 Raspberry PI 0 2 W 上读取 I2S 数据。 我认为麦克风已成功输出 PDM 数据、并且我已根据数据表中的应用图验证了 PCMD3180连接。 我似乎在记录垃圾的数据从麦克风,不知道如何进行。

我的理论是、PCM3180芯片的设置脚本存在问题。 这其中一部分是由于数据表中的潜在矛盾导致的。 请参阅下图、其中建议在设置过程中覆盖保留的寄存器位。

附件是我编写的设置脚本:

#!/bin/sudo bash

# PCMD3180启动顺序

#将 GPIO 引脚4置为低电平

sudo gpioset gpiochip0 4=0

睡眠0.5

回波"正在启动 PCDM3180启动顺序..."

回波"将 SHDNZ 引脚切换为高电平..."

sudo gpioset gpiochip0 4=1

回波"PCMD3180..."

ECHO "正在启用 i2c 总线的调试选项。。。"

ECHO "正在发送0x81到 P0_R2、设置内部 Areg..."

i2cset -y 1 0x4C 0x02 0x81

休眠1#等待1秒钟以便寄存器初始化



#将 PCMD3180设置为音频主设备

#将 GPIO1配置为 MCLK 输入

回显"将 GPIO1配置为 MCLK 输入。。。"

i2cset -y 1 0x4C 0x21 0xA0

#将设备配置为主设备,MCLK=MCLK 12 MHz

回显"将 PCMD3180配置为音频总线主控。。。"

i2cset -y 1 0x4C 0x13 0x80

# FS = 192k、BCLK = 6.144 MHz、BCLK/FSYNC 比率= 64

回波"采样率= 192kHz、BCLK = 12.288 MHz、 BCLK/FSYNC 比率= 128..."

i2cset -y 1 0x4C 0x14 0x62

#将设备配置为 I2S 模式

i2cset -y 1 0x4C 0x07 0x40

#通过 I2C 写入 P0_R60将 CH1_INSRC 配置为数字 PDM 输入

回显"将 CH1_INSRC 配置为数字 PDM 输入。。。"

i2cset -y 1 0x4C 0x3C 0x40

#通过 I2C 写入 P0_R65将 CH2_INSRC 配置为数字 PDM 输入

回显"将 CH2_INSRC 配置为数字 PDM 输入。。。"

i2cset -y 1 0x4C 0x41 0x40

#通过 I2C 写入 P0_R70将 CH3_INSRC 配置为数字 PDM 输入

#echo "Configuring CH3_INSRC as Digital PDM Input..."

#i2cset -y 1 0x4C 0x46 0x40

#通过 I2C 将 CH4_INSRC 配置为数字 PDM 输入写入 P0_R75

#echo "Configuring CH4_INSRC as Digital PDM Input..."

#i2cset -y 1 0x4C 0x4B 0x40

#i2cdump -y 1 0x4c

#通过 I2C 写入 P0_R34将 PDMCLK_GPO1配置为 PDMCLK

回显"将 PDMCLK_GPO1配置为 PDMCLK..."

i2cset -y 1 0x4C 0x22 0x41

#通过 I2C 写入 P0_R35将 PDMCLK_GPO2配置为 PDMCLK

回显"将 PDMCLK_GPO2配置为 PDMCLK..."

i2cset -y 1 0x4C 0x23 0x41

#通过 I2C 写入 P0_R36将 PDMCLK_GPO2配置为 PDMCLK

#echo "Configuring PDMCLK_GPO3 as PDMCLK..."

#i2cset -y 1 0x4C 0x24 0x41

#通过 I2C 写入 P0_R37将 PDMCLK_GPO3配置为 PDMCLK

#echo "Configuring PDMCLK_GPO4 as PDMCLK..."

#i2cset -y 1 0x4C 0x25 0x41

#通过 I2C 将 PDMIN1_GPI1和 PDMIN2_GPI2配置为 PDMIN1和 PDMIN2写入 P0_R43

回显"将 PDMIN1_GPI1和 PDMIN_GPI2配置为 PDMIN1和 PDMIN2..."

i2cset -y 1 0x4C 0x2B 0x40

#通过 I2C 将 PDMIN3_GPI3和 PDMIN4_GPI4配置为 PDMIN3和 PDMIN4写入 P0_R44

#echo "Configuring PDMIN_GPI3 and PDMIN_GPI4 as PDMIN3 and PDMIN4..."

#i2cset -y 1 0x4C 0x2C 0x67

#通过 I2C 写入 P0_R115来启用输入 Ch1-8

回波"正在启用 PDM 输入通道1..."

i2cset -y 1 0x4C 0x73 0xC0

#通过 I2C 写入 P0_R116将 ASI 输出 Ch1输入到 CH-8插槽

回波"正在启用 ASI 输出通道1..."

i2cset -y 1 0x4C 0x74 0xC0

#通过 I2C 配置频率为768kHz 的 PDMCLK 写入 P0_R31

回波"将麦克风切换到低功耗模式(PDMCLK = 0.768 MHz)..."

i2cset -y 1 0x4C 0x1F 0x42

#通过 I2C 为 PDM 转换器和 PLL 加电写入 P0_R117

回波"正在为 PLL 时钟发生器和 PDM 转换器供电..."

i2cset -y 1 0x4C 0x75 0x60

#睡眠1

#将 PDMCLK_DIV 从768kHz 更改为3.072 MHz

回波"将麦克风转换到超声波模式(PDMCLK = 3.072 MHz)..."

i2cset -y 1 0x4C 0x1F 0x40



下面是一个 i2cdump 输出、显示设置脚本运行后每个寄存器的状态:

这里是从 PCMD3180传输到 RPi 的 SDOUT、FSYNC 和 BCLK 信号的示波器输出。

顶部的 SDOUT

底部的 FSYNC:6.2v 峰峰值、包含噪声。 约5.2us 周期

底部- 5.8MHz 上的 BCLK、6.2V 峰峰值

除此之外、我正在尝试使用 Linux arecord 命令将 I2S 数据输出到.wav 文件中。 此时我迷路了、不知道如何继续解决此问题。 如有任何帮助,将不胜感激。

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

    将很快回复

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

    大家好、我的团队和我仍在努力解决此问题、非常感谢您提供任何帮助。

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

    作为起点,我建议安装 Pure Path Console 3软件。 借助此软件、可以轻松设置 PCMD3180 I2C 命令。 该软件还具有可读脚本、