I2S MIC on VIM3

Hello!
I’d like to add I2S mic (SPH0645LM4H-B), which has 3 pin: I2SB_LRCLK/I2SB_SCLK/I2SB_DIN1.
Which 3 gpio pins should I choose in 5?
I tried to write 3 gpio in VIM3.dts , but it didnt work,and saw nothing in /proc/asound/pcm/

What’s the system of your device? Android or Ubuntu?
You can see the I2S pin on GPIO Header

The sound card information is in this directory /proc/asound/card0/pcm1c/info
Selection_093

1 Like

Android. Still not work.The mic has 3 pin, which 3 from 29–33 should I connect?

I2SB_LRCLK connect PIN32(I2SB_LRCK)
I2SB_SCLK connect PIN29(I2SB_SCLK)
I2SB_DIN connect PIN33(I2SB_SDI)

1 Like

SO it’s GPIOA1, A2, A4 (VIM3_V12_Sch.pdf), RIGHT?
NEXT , I checked dts (kvim3.dts):
aml-audio-card,dai-link@1–>alsaPORT-i2s–>aml_tdmb–>
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1
&clkc CLKID_MPLL0
&clkaudio CLKID_AUDIO_SPDIFOUT_CTRL>;
pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;

         **tdmb_mclk ==GPIOA0, tdmout_b =GPIOA1, 2, 3, tdmin_b=GPIOA4**

------should I change to:
tdmb_mclk ==GPIOA1, tdmout_b =GPIOA2, tdmin_b=GPIOA4??
and the clocks ?

你好,你这边是否可以把问题重新梳理下,如下:

  • 硬件连接关系,需要完整一些,最好有完整的原理图
  • 关于你增加的模块,拍一个图Post上来
  • 此外,你上面说有问题,具体问题是怎样的?具体进一步的描述,比方是硬件通讯出错,还是没有声音?
  • 建议附上是完整Log

Good day!

你好!这样的,我外接了一个I2S的mic 三个管脚 三个GPIO,没声音。在查找原因,请你们帮我确认下哪些地方要改:

首先 aml-audio-card,dai-link@1 里的aml_tdmb 定义的管脚是pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;

你提供的信息太有限了,没法定位问题,建议按照上面方式补充下信息,包括使用的Mic型号资料等。

Mic型号是SPH0645LM4H-B。系统默认支持PDM,现在换成I2S的,我用的是GPIOAO7, 8, 10.把aml_tdmb置为OKEY,默认使用的管脚是<&tdmb_mclk &tdmout_b < &tdmin_b>,分别是GPIOA0, 1 2 3, 4.我改为:
tdmin_b:tdmin_b {
mux { /GPIOAO_7,8,10/
groups = “tdmb_slv_sclk_ao”,
“tdmb_slv_fs_ao”,
“tdmb_din1_ao”;

		function = "tdmb_in_ao";
	};
};但是没作用,我又把占用GPIOAO_10的设备aml_spdif置为disabled,还是不起作用。LOG显示:

[ 3.533936@2] failed parse loopback, ignore it
[ 3.533972@2] aml_card_probe error ret:-517
[ 3.534415@2] aml_tdm_platform_probe, tdm ID = 0, lane_cnt = 4
[ 3.534430@2] TDM id 0 i2s2hdmi:0
[ 3.534438@2] snd_tdm ff642000.audiobus:tdma: lane_mask_out = 0, lane_oe_mask_out = 0
[ 3.534579@2] No channel mask node Channel_Mask
[ 3.534642@2] meson-g12a-pinctrl pinctrl@ff634480: function ‘tdmb_in_ao’ not supported
[ 3.534645@2] meson-g12a-pinctrl pinctrl@ff634480: invalid function tdmb_in_ao in map table
[ 3.534651@2] meson-g12a-pinctrl pinctrl@ff634480: function ‘tdmb_in_ao’ not supported
[ 3.534654@2] meson-g12a-pinctrl pinctrl@ff634480: invalid function tdmb_in_ao in map table
[ 3.534660@2] meson-g12a-pinctrl pinctrl@ff634480: function ‘tdmb_in_ao’ not supported
[ 3.534662@2] meson-g12a-pinctrl pinctrl@ff634480: invalid function tdmb_in_ao in map table
[ 3.534672@2] snd_tdm: probe of ff642000.audiobus:tdmb failed with error -22
[ 3.534843@2] aml_tdm_platform_probe, tdm ID = 2, lane_cnt = 4
请教下,为什么管脚加载失败。我用的都是pinctrl-meson-g12a.c里定义的

或者说要添加I2S的MIC,dts应该怎样配置

官方的系统,默认情况下,应该是有声卡信息的,先确定一下
/proc/asound/card0/pcm1c/info

可以用adb命令去录制一下,录制好后再播放file.wav文件

# adb shell
# su
# cd /sdcard
# tinycap  file.wav -D 0 -d 1 -c 2

默认情况是有声卡的,但是录的没声音。
修改GPIO之后,声卡就一个都不会生成。/proc/asound下没有card0

录音的时候,用示波器测量一下这几个管脚的信号
管脚配置应该是对的,你录音的时候是有打印信息的,先确保你那个MIC输入是不是正常的

[ 7034.358110] aml_tdm_open
[ 7034.358672] audio_ddr_mngr: toddrs[0] registered by device ff642000.audiobus:tdmb
[ 7034.358775] set mclk:11289600, mpll:22579200, get mclk:11289593, mpll:22579186
[ 7034.358779] asoc aml_dai_set_tdm_fmt, 0x4011, edde5110, id(1), clksel(1)
[ 7034.358781] aml_dai_set_tdm_fmt(), fmt not change
[ 7034.358786] dump_pcm_setting(edde5110)
[ 7034.358788] \x09pcm_mode(1)
[ 7034.358790] \x09sysclk(11289600)
[ 7034.358792] \x09sysclk_bclk_ratio(4)
[ 7034.358794] \x09bclk(2822400)
[ 7034.358796] \x09bclk_lrclk_ratio(64)
[ 7034.358798] \x09lrclk(44100)
[ 7034.358800] \x09tx_mask(0x3)
[ 7034.358802] \x09rx_mask(0x3)
[ 7034.358804] \x09slots(2)
[ 7034.358806] \x09slot_width(32)
[ 7034.358808] \x09lane_mask_in(0x2)
[ 7034.358810] \x09lane_mask_out(0x1)
[ 7034.358812] \x09lane_oe_mask_in(0x0)
[ 7034.358814] \x09lane_oe_mask_out(0x0)
[ 7034.358816] \x09lane_lb_mask_in(0x0)
[ 7034.358819] aml_dai_set_tdm_sysclk(), mpll no change, keep clk
[ 7034.358821] aml_dai_set_tdm_sysclk(), mclk no change, keep clk
[ 7034.358824] set mclk:11289600, mpll:22579200, get mclk:11289593, mpll:22579186
[ 7034.358827] aml_dai_set_clkdiv, div 4, clksel(1)
[ 7034.358834] aml_dai_set_bclk_ratio, select I2S mode
[ 7034.358839] tdmin set lane 1
[ 7034.358844] Not init vad
[ 7034.359000] Not init vad
[ 7034.359007] asoc-aml-card auge_sound: tdm prepare capture
[ 7034.360743] aml_dai_tdm_prepare Expected toddr src:TDMIN_B
[ 7034.366939] tdm capture mute: 0
[ 7034.366978] Not init vad
[ 7034.366998] asoc-aml-card auge_sound: tdm capture enable

[ 3.620537@0] no register datain_datalb_total,it also can work
[ 3.620538@0] parse loopback:, lb mode:0
[ 3.620541@0] datain_src:4, datain_chnum:8, datain_chumask:3f
[ 3.620542@0] datalb_src:2, datalb_chnum:8
[ 3.620544@0] datalb_chswap:0x0,datalb_chmask:3
[ 3.620546@0] failed parse loopback, ignore it
[ 3.621624@0] aml_pdm_probe
[ 3.829353@0] asoc-aml-card auge_sound: control 2:0:0:I2SIn CLK:0 is already present
[ 3.829359@0] snd_tdm ff642000.audiobus:tdmb: ASoC: Failed to add I2SIn CLK: -16
[ 3.829361@0] aml_dai_tdm_probe, failed add snd spdif controls
[ 3.829367@0] asoc-aml-card auge_sound: control 2:0:0:I2SIn CLK:0 is already present
[ 3.829371@0] snd_tdm ff642000.audiobus:tdmc: ASoC: Failed to add I2SIn CLK: -16
[ 3.829373@0] aml_dai_tdm_probe, failed add snd spdif controls
[ 3.829381@0] aml_pdm_dai_probe
[ 3.829383@0] aml_dai_spdif_probe
[ 3.829397@0] aml_dai_spdif_probe
[ 3.829402@0] asoc-aml-card auge_sound: control 2:0:0:I2SIn CLK:0 is already present
[ 3.829406@0] snd_tdm ff642000.audiobus:i2s2hdmi: ASoC: Failed to add I2SIn CLK: -16
[ 3.829407@0] aml_dai_tdm_probe, failed add snd spdif controls
[ 356.499336@3] asoc-aml-card auge_sound: tdm prepare----capture
[ 356.503108@3] aml_dai_tdm_prepare Expected toddr src:TDMIN_B
[ 356.509847@3] asoc-aml-card auge_sound: tdm capture enable
[ 370.509982@0] asoc-aml-card auge_sound: tdm capture stop
[ 370.510085@0] aml_dai_tdm_hw_free(), disable mclk for TDM-B[ 398.519105@0] ffs_retry_malloc_buffer
[ 398.519198@0] ffs_retry_malloc_buffer
[ 398.521022@0] ffs_retry_malloc_buffer

帮忙分析下,tmb时钟出错?另外tdmb里的 samesource_sel = <3> 代表spdif,是什么意思?刚好spdif占用了mic要用的GPIO10,这会引起冲突吗

你就用官方的固件验证,不要用你自己修改的去验证,官方的I2S信号时钟都是OK的,只是i2s_din没有验证,按我上面说的先确认清楚先

你好,有设备了但是没声音。LOG:
[ 3.599765@1] aml_pdm_probe
[ 3.599904@1] asoc-aml-card auge_sound: control 2:0:0:I2SIn CLK:0 is already present
[ 3.599909@1] snd_tdm ff642000.audiobus:tdmb: ASoC: Failed to add I2SIn CLK: -16
[ 3.599911@1] aml_dai_tdm_probe, failed add snd spdif controls
[ 3.599917@1] asoc-aml-card auge_sound: control 2:0:0:I2SIn CLK:0 is already present
[ 3.599921@1] snd_tdm ff642000.audiobus:tdmc: ASoC: Failed to add I2SIn CLK: -16
[ 3.599923@1] aml_dai_tdm_probe, failed add snd spdif controls
[ 3.599931@1] aml_pdm_dai_probe
[ 3.599933@1] aml_dai_spdif_probe
[ 3.599947@1] aml_dai_spdif_probe
[ 3.599951@1] asoc-aml-card auge_sound: control 2:0:0:I2SIn CLK:0 is already present
[ 3.599955@1] snd_tdm ff642000.audiobus:i2s2hdmi: ASoC: Failed to add I2SIn CLK: -16
[ 3.599957@1] aml_dai_tdm_probe, failed add snd spdif controls
帮分析下

你好,现在我把spdif删了,打印和你的差不多了。但是还没有声音,没波形:
[ 401.490021@2] mclk is not configured
[ 401.490194@2] asoc-aml-card auge_sound: tdm prepare----capture
[ 401.493856@2] aml_dai_tdm_prepare Expected toddr src:TDMIN_B
[ 401.499647@2] asoc-aml-card auge_sound: tdm capture enable
[ 401.747135@2] ASoC: multicodec <-> TDM-C No matching channels
[ 401.747229@3] ASoC: multicodec <-> TDM-B No matching channels
[ 401.753216@2] aml_pdm_open, stream:1
[ 401.756989@2] enter aml_pdm_close type: 1
[ 401.901119@3] audio_dsp: IEC958_mode_codec= 0, IEC958 type 2 CH PCM
[ 401.901741@3] audio_dsp: last mode 0,now 0
[ 406.735017@3] ASoC: multicodec <-> TDM-C No matching channels
[ 406.735238@3] aml_pdm_open, stream:1
[ 406.739126@3] enter aml_pdm_close type: 1
[ 406.741883@0] ASoC: multicodec <-> TDM-B No matching channels
[ 407.122232@2] audio_dsp: IEC958_mode_codec= 0, IEC958 type 2 CH PCM
[ 407.122914@2] audio_dsp: last mode 0,now 0
请教一些,mclk is not configured是怎么回事?我确认过GPIO没写错

我问下你这个I2S的MIC问题后来解决了没?我最近也想测试下A311D下I2S的MIC

后面我专门验证过,MIC是正常的,你用官方的固件验证就好

HI:
问下我们MIC管脚这样的接法image ,需要如何改动内核的配置支持?