audio调试:数字麦(DMIC)如何配置

        本文介绍rk3588平台DMIC的配置;首先了解下,常见的数字麦有纯pdm麦和通过一些codec芯片将数字麦转换为i2s信号输入到SOC;纯pdm麦就是直接进入SOC的pdm接口,走的是PDM信号,原理图如下所示;PDM信号就是两个线,一根数据线一根时钟线。

        阵列麦是PDM麦常见的形式,如下原理图;纯pdm麦的dts配置需要使用dummy_codec,内核要打开CONFIG_SND_SOC_DUMMY_CODEC=y;dts配置可以参考如下

sound_micarray: sound-micarray {
	compatible = "simple-audio-card";
	simple-audio-card,format = "i2s";
	simple-audio-card,name = "rockchip,sound-micarray";
	simple-audio-card,mclk-fs = <256>;
	simple-audio-card,dai-link@0 {
		format = "pdm";
		cpu {
			sound-dai = <&pdm0>;
			};
		codec {
			sound-dai = <&dummy_codec>;
			};
	};
};
pdm有全映射设置,rockchip,path-map = <int int int int>,需要和硬件上接的一致。

        使用codec芯片rt5651,es7210等,接入到SOC,即数字MIC,接的引脚是codec芯片上的引脚,不是SOC的PDM;最后转换成i2s信号输入主控。以3588平台为例,数字麦的dts参考如下:

rt5651_sound: rt5651-sound {
	status = "okay";
	compatible = "rockchip,multicodecs-card";
	rockchip,card-name = "rockchip-rt5651";
	hp-det-gpio = <&gpio1 RK_PC0 GPIO_ACTIVE_HIGH>;
	io-channels = <&saradc 3>;
	io-channel-names = "adc-detect";
	keyup-threshold-microvolt = <1800000>;
	poll-interval = <100>;
	rockchip,format = "i2s";  //通过i2s进入到SOC
	rockchip,mclk-fs = <256>;
	rockchip,cpu = <&i2s0_8ch>;
	rockchip,codec = <&rt5651>;
	pinctrl-names = "default";
	pinctrl-0 = <&hp_det>;
	play-pause-key {
		label = "playpause";
		linux,code = <KEY_PLAYPAUSE>;
		press-threshold-microvolt = <2000>;
	};
};
	
	rt5651: rt5651@1a {
		status = "okay";
        #sound-dai-cells = <0>;
        compatible = "realtek,rt5651";
        reg = <0x1a>;
        clocks = <&cru I2S0_8CH_MCLKOUT>;
        clock-names = "mclk";
        assigned-clocks = <&cru I2S0_8CH_MCLKOUT>;
        assigned-clock-rates = <11289600>;  //mclk
        realtek,dmic-en = "ture"; //数字麦的使能
       };

        声卡生成之后,就使用tinycap指定es7210或rt5651声卡进行录音,录音时用示波器测量看看7202的pdm_clkpdm_sdi是否有波形产生。

        如何兼容2个数字麦,即主板自带的一个数字麦+外接小板的数字麦;两个数字麦的clk是不一样的,所以dts怎么配置呢? 在&pdm0节点把两个clk同时配置上就可以了。

pdm0: pdm@fe4b0000 {
compatible = "rockchip,rk3588-pdm";
reg = <0x0 0xfe4b0000 0x0 0x1000>;
clocks = <&cru MCLK_PDM0>, <&cru HCLK_PDM0>;
clock-names = "pdm_clk", "pdm_hclk";
dmas = <&dmac0 4>;
dma-names = "rx";
pinctrl-names = "default";
pinctrl-0 = <&pdm0m0_clk  //板载数字麦时钟
			&pdm0m0_clk1  //外接数字麦时钟
			&pdm0m0_sdi0
			&pdm0m0_sdi1
			&pdm0m0_sdi2>;
#sound-dai-cells = <0>;
status = "disabled";
};

        多个数字麦怎么录音呢?同一组pdm,录音时去设置通道就行了,直接tinycap +通道2/4/6/8。例如下面这个,硬件上看PDM_SDI0_M0接在809,PDM_SDI1_M0接在es7202,PDM_SDI2_M0接在es7202;所以总共可以录6路,使用tinycap直接录6通道就可以了,其中:

        PDM_SDI0_M0管脚是0-1通道,

        PDM_SDI1_M0管脚是2-3通道,

        PDM_SDI2_M0管脚是4-5通道。

        PDM_SDI0_M0是接在RK809上的,所以0-1通道就是它的数据。

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值