Audio: MEMS Digital Microphone
To compile module:
http://raspberrypi.stackexchange.com/questions/39845/how-compile-a-loadable-kernel-module-without-recompiling-kernel
Edit asoc-i2s-loader.c
vi asoc-i2s-loader.c make insmod asoc-i2s-loader.ko dmesg arecord -D hw:0 -c2 -r 48000 -f S32_LE -t wav -v file.wav
Before insmod:
# lsmod Module Size Used by bnep 12051 2 hci_uart 19956 1 btbcm 7916 1 hci_uart bluetooth 365511 22 hci_uart,bnep,btbcm 8192cu 582217 0 brcmfmac 222720 0 brcmutil 9092 1 brcmfmac cfg80211 543027 2 8192cu,brcmfmac rfkill 20851 5 bluetooth,cfg80211 snd_soc_bcm2835_i2s 6546 0 snd_soc_core 179915 1 snd_soc_bcm2835_i2s snd_compress 10384 1 snd_soc_core snd_pcm_dmaengine 5894 1 snd_soc_core snd_pcm 97226 2 snd_pcm_dmaengine,snd_soc_core snd_timer 23904 1 snd_pcm snd 70032 4 snd_compress,snd_timer,snd_soc_core,snd_pcm bcm2835_gpiomem 3940 0 uio_pdrv_genirq 3923 0 fixed 3285 0 uio 10204 1 uio_pdrv_genirq i2c_dev 6913 0 fuse 99603 3 ipv6 406279 70
After insmod:
Module Size Used by snd_soc_simple_card 6297 0 snd_soc_simple_card_utils 5196 1 snd_soc_simple_card asoc_i2s_loader 2761 0 bnep 12051 2 hci_uart 19956 1 btbcm 7916 1 hci_uart bluetooth 365511 22 hci_uart,bnep,btbcm 8192cu 582217 0 brcmfmac 222720 0 brcmutil 9092 1 brcmfmac cfg80211 543027 2 8192cu,brcmfmac rfkill 20851 5 bluetooth,cfg80211 snd_soc_bcm2835_i2s 6546 2 snd_soc_core 179915 3 snd_soc_simple_card_utils,snd_soc_bcm2835_i2s,snd_soc_simple_card snd_compress 10384 1 snd_soc_core snd_pcm_dmaengine 5894 1 snd_soc_core snd_pcm 97226 2 snd_pcm_dmaengine,snd_soc_core snd_timer 23904 1 snd_pcm snd 70032 4 snd_compress,snd_timer,snd_soc_core,snd_pcm bcm2835_gpiomem 3940 0 uio_pdrv_genirq 3923 0 fixed 3285 0 uio 10204 1 uio_pdrv_genirq i2c_dev 6913 0 fuse 99603 3 ipv6 406279 54
static struct asoc_simple_card_info snd_rpi_simple_card_info = { .card = "snd_rpi_simple_card", // -> snd_soc_card.name .name = "simple-card_codec_link", // -> snd_soc_dai_link.name .codec = "snd-soc-dummy", // -> snd_soc_dai_link.codec_name // Available codecs can be found in /sys/kernel/debug/asoc/codecs // .platform = "20203000.i2s", // -> snd_soc_dai_link.platform_name .platform = "3f203000.i2s", // // ASoC platform strings can be found in /sys/kernel/debug/asoc/platforms
// Note: use SND_SOC_DAIFMT_CBS_CFM instead of SND_SOC_DAIFMT_CBS_CFS // if I²S device must be in slave state. .daifmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS, .cpu_dai = { // .name = "20203000.i2s", // -> snd_soc_dai_link.cpu_dai_name .name= "3f203000.i2s", .sysclk = 0 }, .codec_dai = { .name = "snd-soc-dummy-dai", // Available dais can be found in /sys/kernel/debug/asoc/dais .sysclk = 0 }, };
https://github.com/nejohnson2/rpi-i2s
https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-and-test
https://raspberrypi.stackexchange.com/questions/70897/help-reading-audio-data-from-i2s-microphones