<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Adafruit I2S MEMS Microphone interface with nRF5340 DK</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/101540/adafruit-i2s-mems-microphone-interface-with-nrf5340-dk</link><description>Hi, 
 I am trying to connect and acquire the signal from the Adafruit I2S MEMS Microphone using I2s communication with my board (nRF5340 DK). Because I am new in this controller, I was looking to use a sample program as a starting point, specifically</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 14 Jul 2023 10:06:12 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/101540/adafruit-i2s-mems-microphone-interface-with-nrf5340-dk" /><item><title>RE: Adafruit I2S MEMS Microphone interface with nRF5340 DK</title><link>https://devzone.nordicsemi.com/thread/436434?ContentTypeID=1</link><pubDate>Fri, 14 Jul 2023 10:06:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:503546da-8d92-4a1f-9e79-a0eecf7e402c</guid><dc:creator>Einarh</dc:creator><description>&lt;p&gt;Maybe you can use i2s_buf_read, and print the contents of the buffer?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/hardware/peripherals/audio/i2s.html#c.i2s_buf_read"&gt;https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/hardware/peripherals/audio/i2s.html#c.i2s_buf_read&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;-Einar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adafruit I2S MEMS Microphone interface with nRF5340 DK</title><link>https://devzone.nordicsemi.com/thread/436429?ContentTypeID=1</link><pubDate>Fri, 14 Jul 2023 09:40:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:cea41bfa-321d-4ab0-846e-4fb6875a7bb7</guid><dc:creator>Agus</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I downloaded the sample again and I only took the codec part out. This time I checked with an oscilloscope the I2S signals and after configuring it properly for my MEMS microphone, the signals are all correct.&lt;/p&gt;
&lt;p&gt;However now I would like to print in the serial port the audio values, but couldn&amp;#39;t manage to find the way. I took a look on the i2s_read() and i2s_write() but after checking the documentation I think is not what I need.&amp;nbsp; Could you suggest one function such as&amp;nbsp;i2s_pop_sample() -from the Arduino library driver/i2s.h.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I will leave the MEMS microphone configuration for other users:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;&amp;amp;pinctrl {
	i2s0_default_alt: i2s0_default_alt {
		group1 {
			psels = &amp;lt;NRF_PSEL(I2S_SCK_M, 0, 7)&amp;gt;,
				&amp;lt;NRF_PSEL(I2S_LRCK_M, 0, 12)&amp;gt;,
				&amp;lt;NRF_PSEL(I2S_SDIN, 1, 06)&amp;gt;;
		};
	};
};


&amp;amp;clock {
	hfclkaudio-frequency = &amp;lt;11289600&amp;gt;;
};

i2s_rxtx: &amp;amp;i2s0 {
	status = &amp;quot;okay&amp;quot;;
	pinctrl-0 = &amp;lt;&amp;amp;i2s0_default_alt&amp;gt;;
	pinctrl-names = &amp;quot;default&amp;quot;;
	clock-source = &amp;quot;ACLK&amp;quot;;
};&lt;/pre&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="text"&gt;#define SAMPLE_FREQUENCY &amp;#160; &amp;#160;44100
#define SAMPLE_BIT_WIDTH &amp;#160; &amp;#160;32
#define BYTES_PER_SAMPLE &amp;#160; &amp;#160;sizeof(int16_t)
#define NUMBER_OF_CHANNELS &amp;#160;1
/* Such block length provides an echo with the delay of 100 ms. */
#define SAMPLES_PER_BLOCK &amp;#160; ((SAMPLE_FREQUENCY / 10) * NUMBER_OF_CHANNELS)
#define INITIAL_BLOCKS &amp;#160; &amp;#160; &amp;#160;2
#define TIMEOUT &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; 1000
&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adafruit I2S MEMS Microphone interface with nRF5340 DK</title><link>https://devzone.nordicsemi.com/thread/436230?ContentTypeID=1</link><pubDate>Thu, 13 Jul 2023 11:39:11 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:57aad710-98fb-4f2a-8119-d636b3aefca7</guid><dc:creator>Einarh</dc:creator><description>&lt;p&gt;I would suggest you try to make the unmodified sample work, only changing the overlay to match your hardware, before you start modifying the sample code.&lt;/p&gt;
&lt;p&gt;The sample already supports nRF5340 after all.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s much easier to debug that way.&lt;/p&gt;
&lt;p&gt;-Einar&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adafruit I2S MEMS Microphone interface with nRF5340 DK</title><link>https://devzone.nordicsemi.com/thread/436012?ContentTypeID=1</link><pubDate>Wed, 12 Jul 2023 13:55:21 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9a96c7a6-cf2b-48cb-afe1-f4747b7b3458</guid><dc:creator>Agus</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Sorry for the late response, I tried many different ways but still I can&amp;#39;t make it work.&lt;/p&gt;
&lt;p&gt;I checked the nRF5340 Audio example, and came to the conclusion there is no need for the audio codec in my case, since I don&amp;#39;t have to process any data, I just have to collect it from the I2S interface.&lt;/p&gt;
&lt;p&gt;I modified the I2S echo sample, my goal is just to print the audio data from the I2S MEMS microphone (SPH0645):&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/sys/printk.h&amp;gt;
#include &amp;lt;zephyr/drivers/i2s.h&amp;gt;
#include &amp;lt;zephyr/drivers/gpio.h&amp;gt;
#include &amp;lt;string.h&amp;gt;


#if DT_NODE_EXISTS(DT_NODELABEL(i2s_rxtx))
#define I2S_RX_NODE  DT_NODELABEL(i2s_rxtx)
#define I2S_TX_NODE  I2S_RX_NODE
#else
#define I2S_RX_NODE  DT_NODELABEL(i2s_rx)
#define I2S_TX_NODE  DT_NODELABEL(i2s_tx)
#endif

#define SAMPLE_FREQUENCY    44100 //-&amp;gt; 44100kHz
#define SAMPLE_BIT_WIDTH    24 
#define BYTES_PER_SAMPLE    sizeof(int32_t)//32 bits
#define NUMBER_OF_CHANNELS  1 //1
/* Such block length provides an echo with the delay of 100 ms. */
#define SAMPLES_PER_BLOCK   ((SAMPLE_FREQUENCY / 10) * NUMBER_OF_CHANNELS)
#define INITIAL_BLOCKS      2
#define TIMEOUT             1000

#define BLOCK_SIZE  (BYTES_PER_SAMPLE * SAMPLES_PER_BLOCK)
#define BLOCK_COUNT (INITIAL_BLOCKS + 2)
K_MEM_SLAB_DEFINE_STATIC(mem_slab, BLOCK_SIZE, BLOCK_COUNT, 4);

static K_SEM_DEFINE(toggle_transfer, 1, 1);

static bool configure_streams(const struct device *i2s_dev_rx,
			      const struct i2s_config *config)
{
	int ret;
	ret = i2s_configure(i2s_dev_rx, I2S_DIR_RX, config);
	if (ret &amp;lt; 0) {
		printk(&amp;quot;Failed to configure RX stream: %d\n&amp;quot;, ret);
		return false;
	}
	return true;
}

int main(void)
{
	int ret;
	const struct device *const i2s_dev_rx = DEVICE_DT_GET(I2S_RX_NODE);
	struct i2s_config config;
	printk(&amp;quot;I2S echo sample\n&amp;quot;);
	if (!device_is_ready(i2s_dev_rx)) {
		printk(&amp;quot;%s is not ready\n&amp;quot;, i2s_dev_rx-&amp;gt;name);
		return 0;
	}
	config.word_size = SAMPLE_BIT_WIDTH;
	config.channels = NUMBER_OF_CHANNELS;
	config.format = I2S_FMT_DATA_FORMAT_I2S;
	config.options = I2S_OPT_BIT_CLK_MASTER | I2S_OPT_FRAME_CLK_MASTER;
	config.frame_clk_freq = SAMPLE_FREQUENCY;
	config.mem_slab = &amp;amp;mem_slab;
	config.block_size = BLOCK_SIZE;
	config.timeout = TIMEOUT;
	if (!configure_streams(i2s_dev_rx, &amp;amp;config)) {
		return 0;
	}

	printk(&amp;quot;Streams started\n&amp;quot;);
	for (;;) {
		k_sem_take(&amp;amp;toggle_transfer, K_FOREVER); //Bloquea hasta que esta disponible
		ret = i2s_trigger(i2s_dev_rx, I2S_DIR_RX, I2S_TRIGGER_START);
		if (ret != 0) {
			printk(&amp;quot;i2s_trigger failed with %d error\n&amp;quot;, ret);
			return 0;
		}
		while (k_sem_take(&amp;amp;toggle_transfer, K_NO_WAIT) != 0) {
			void *mem_block;
			uint32_t block_size;
			ret = i2s_read(i2s_dev_rx, &amp;amp;mem_block, &amp;amp;block_size);
			if (ret &amp;lt; 0) {
				printk(&amp;quot;Failed to read data: %d\n&amp;quot;, ret);
				break;
			}
			unsigned int* value_ptr = (unsigned int*)mem_block;
    		unsigned int value = *value_ptr;
   			printk(&amp;quot;Received audio data: %u\n&amp;quot;, value);
		}
	}
	return 0;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;My overlay file is the following one:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2021 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

 &amp;amp;pinctrl {
	i2s0_default_alt: i2s0_default_alt {
		group1 {
			psels = &amp;lt;NRF_PSEL(I2S_SCK_M, 0, 7)&amp;gt;,
				&amp;lt;NRF_PSEL(I2S_LRCK_M, 0, 12)&amp;gt;,
				//&amp;lt;NRF_PSEL(I2S_SDOUT, 1, 13)&amp;gt;,
				&amp;lt;NRF_PSEL(I2S_SDIN, 1, 6)&amp;gt;;
		};
	};
};

&amp;amp;clock {
	hfclkaudio-frequency = &amp;lt;11289600&amp;gt;;
};

i2s_rxtx: &amp;amp;i2s0 {
	status = &amp;quot;okay&amp;quot;;
	pinctrl-0 = &amp;lt;&amp;amp;i2s0_default_alt&amp;gt;;
	pinctrl-names = &amp;quot;default&amp;quot;;
	clock-source = &amp;quot;ACLK&amp;quot;;
};
&amp;amp;arduino_adc {
	io-channel-map = &amp;lt;0 &amp;amp;adc 0&amp;gt;, &amp;lt;1 &amp;amp;adc 1&amp;gt;, &amp;lt;2 &amp;amp;adc 2&amp;gt;, &amp;lt;3 &amp;amp;adc 3&amp;gt;, &amp;lt;4 &amp;amp;adc 4&amp;gt;, &amp;lt;5 &amp;amp;adc 5&amp;gt;;
};

&amp;amp;arduino_header {
	gpio-map = &amp;lt;0 0 &amp;amp;gpio0 4 0&amp;gt;,
			   &amp;lt;1 0 &amp;amp;gpio0 5 0&amp;gt;,
			   &amp;lt;2 0 &amp;amp;gpio0 6 0&amp;gt;,
			   &amp;lt;3 0 &amp;amp;gpio0 7 0&amp;gt;,
			   &amp;lt;4 0 &amp;amp;gpio0 25 0&amp;gt;,
			   &amp;lt;5 0 &amp;amp;gpio0 26 0&amp;gt;,
			   &amp;lt;6 0 &amp;amp;gpio1 0 0&amp;gt;,
			   &amp;lt;7 0 &amp;amp;gpio1 1 0&amp;gt;,
			   &amp;lt;8 0 &amp;amp;gpio1 4 0&amp;gt;,
			   &amp;lt;9 0 &amp;amp;gpio1 5 0&amp;gt;,
			   &amp;lt;10 0 &amp;amp;gpio1 6 0&amp;gt;,
			   &amp;lt;11 0 &amp;amp;gpio1 7 0&amp;gt;,
			   &amp;lt;12 0 &amp;amp;gpio1 8 0&amp;gt;,
			   &amp;lt;13 0 &amp;amp;gpio1 9 0&amp;gt;,
			   &amp;lt;14 0 &amp;amp;gpio1 10 0&amp;gt;,
			   &amp;lt;15 0 &amp;amp;gpio1 11 0&amp;gt;,
			   &amp;lt;16 0 &amp;amp;gpio1 12 0&amp;gt;,
			   &amp;lt;17 0 &amp;amp;gpio1 13 0&amp;gt;,
			   &amp;lt;18 0 &amp;amp;gpio1 14 0&amp;gt;,
			   &amp;lt;19 0 &amp;amp;gpio1 15 0&amp;gt;,
			   &amp;lt;20 0 &amp;amp;gpio1 2 0&amp;gt;,
			   &amp;lt;21 0 &amp;amp;gpio1 3 0&amp;gt;;
};
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;And in my prj.conf I only have this line:&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;CONFIG_I2S&lt;/span&gt;&lt;span&gt;=y&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;I expected a continous output with the values of what the MEMS microphone detects, but all I get is this:&lt;br /&gt;*** Booting Zephyr OS build v3.3.99-ncs1 ***&lt;br /&gt;I2S echo sample&lt;br /&gt;Streams started&lt;br /&gt;Received audio data: 0&lt;br /&gt;Received audio data: 0&lt;br /&gt;Received audio data: 0&lt;br /&gt;Received audio data: 0&lt;br /&gt;Failed to read data: -5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;The microphone works well, it worked in another controller. I don&amp;#39;t know what I am doing wrong, it looks like it doesn&amp;#39;t detect the microphone...&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Thank you in advance.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Adafruit I2S MEMS Microphone interface with nRF5340 DK</title><link>https://devzone.nordicsemi.com/thread/434925?ContentTypeID=1</link><pubDate>Thu, 06 Jul 2023 10:47:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:273e9ae2-42a6-4fab-bcd8-58600d8dfdc5</guid><dc:creator>Einarh</dc:creator><description>&lt;p&gt;Hi&lt;/p&gt;
&lt;p&gt;The I2S Echo sample is probably the best starting point, but I would recommend having a look at the nRF5340 Audio application, specifically how it sets up an audio stream with I2S and how it deals with the audio codec:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/applications/nrf5340_audio/README.html"&gt;https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/applications/nrf5340_audio/README.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let me know if you get stuck on anything specific.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Einar&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>