器件型号: PCMD3140
我有一个四通道 PDM 输入编解码器 PCMD3140IRTER、我想启用语音活动检测 (VAD)。 我注意到、在您网站的驱动程序部分、驱动程序似乎不支持它: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/sound/soc / codecs/tlv320adcx140.c
通读数据表时、它引用了以下文档:
www.ti.com/.../sbaa490a.pdf
从第 10 页的示例 2 开始、我尝试从中获取灵感、将 VAD 功能添加到驱动程序中:
w 9C 00 00 #转至页 0
w 9C 02 81 #通过 I2C 写入 P0_R2 来唤醒器件、退出睡眠模式
D 10 #等待 16ms
w 9c 00 00 #转至第 9 页
w 9c 50 00 72 59 dc #–7dB 阈值
w 9C 00 00 #转至页 0
w 9c 3c 40 #通道 1 配置为数字麦克风 PDM 输入
W 9c 41 40 #通道 2 配置为数字麦克风 PDM 输入
W 9c 73 C0 #输入通道 1 和 2 已启用
W 9c 74 C0 # ASI 输出通道 1 和 2 已启用
W 9c 21 21 # GPIO1 作为 IRQ
W 9c 22 41 # GPO1 作为 PDM CLK
w 9c 2b 45 # GPI1 作为 Ch1/2 DMIC 数据
w 9c 20 00 # GPI1 负边沿作为 Ch1
w 9c 00 01 #转至第 1 页
W 9c 1e 00 #通道 1 作为 VAD 输入、用户模式、内部时钟
w 9c 1f 00 #在记录模式下禁用 VAD
w 9c 00 00 #转到第 0 页
W 9c 75 21 #启用 VAD
但是、我注意到了不一致的地方:脚本说要转到第 9 页、但在数据表中、我在第 9 页上找不到任何用户可访问的寄存器、并且命令中出现错误w 9c 00 00 # go to page 9 (00!= 09)。 我尝试了第 9 页和第 0 页、但这两种情况下都没有获得所需的结果。
即使使用示波器并将这些命令添加到驱动程序后、我也看不到 GPIO1 上有任何中断活动、即使我在器件树中包含了以下内容:
pcmd3140_codec: pcmd3140_codec@4e {
compatible = "ti,tlv320adc3140";
reg = <0x4e>;
ti,pdm-edge-select = <1 1 1 1>;
ti,gpi-config = <4 5 0 0>;
ti,gpio-config = <2 1>;
ti,gpo-config-1 = <4 1>;
pcmd3140_port: port {
#address-cells = <1>;
#size-cells = <0>;
pcmd3140_tx_endpoint: endpoint@0 {
reg = <0>;
remote-endpoint = <&sai1a_endpoint>;
};
};
};
即使绕过驱动程序并使用该i2cset工具手动发出命令、也会得到相同的结果:
i2cset -y 0 0x4e 0x00 0x00 #转至页 0
i2cset -y 0 0x4e 0x02 0x81 #唤醒器件
睡眠 0.016 #等待 16ms
i2cset -y 0 0x4e 0x00 0x09 #转到第 9 页(从 0x00 更正)
i2cset -y 0 0x4e 0x50 0x00 0x72 0x59 0xDC I #–7dB 阈值
i2cset -y 0 0x4e 0x00 0x00 #转至页 0
i2cset -y 0 0x4e 0x3C 0x40 #通道 1 配置为数字麦克风 PDM 输入
i2cset -y 0 0x4e 0x41 0x40 # Ch2 配置为数字麦克风 PDM 输入
i2cset -y 0 0x4e 0x73 0xC0 #输入通道 1 和 2 已启用
i2cset -y 0 0x4e 0x74 0xC0 # ASI 输出通道 1 和 2 已启用
i2cset -y 0 0x4e 0x21 # GPIO1 作为 IRQ
i2cset -y 0 0x4e 0x22 0x41 # GPO1 作为 PDM CLK
i2cset -y 0 0x4e 0x2B 0x45 # GPI1 作为 Ch1/2 DMIC 数据
i2cset -y 0 0x4e 0x20 0x00 # GPI1 负边沿作为通道 1
i2cset -y 0 0x4e 0x00 0x01 #转至第 1 页
i2cset -y 0 0x4e 0x1E 0x00 #通道 1 作为 VAD 输入、用户模式、内部时钟
在记录模式下禁用 i2cset -y 0 0x4e 0x1F 0x00 # VAD
i2cset -y 0 0x4e 0x00 0x00 #转至页 0
i2cset -y 0 0x4e 0x75 0x21 #启用 VAD
您能否提供任何指导或分享已包含 VAD 支持的驱动程序实施方案?
提前感谢。
