Connections for I2S echo sample

I was facing some buffer issues while setting up I2S, so I decided to flash and test out the i2s echo sample provided in the sample programs in the SDK. I changed the DT_NODELABEL to use i2s0 for both I2S_RX_NODE and I2S_TX_NODE. I also added debug print statements to print out the values captured by the mic as follows:

while (k_sem_take(&toggle_transfer, K_NO_WAIT) != 0) {
			void *mem_block;
			uint32_t block_size;
			int ret;

			ret = i2s_read(i2s_dev_rx, &mem_block, &block_size);
			if (ret < 0) {
				printk("Failed to read data: %d\n", ret);
				break;
			} else if(ret == 0) {
				// printk("Successfully read data (%d)...\n", block_size);
			}
			
			int16_t *sample_data = (int16_t *)mem_block;
			for (int i = 0; i < block_size / BYTES_PER_SAMPLE; ++i) {
				printk("Sample %d: %d\n", i, sample_data[i]);
			}

			process_block_data(mem_block, SAMPLES_PER_BLOCK);

			ret = i2s_write(i2s_dev_tx, mem_block, block_size);
			if (ret < 0) {
				printk("Failed to write data: %d\n", ret);
				break;
			} else if(ret == 0) {
				// printk("Successfully wrote data (%d)\n\n", block_size);
			}
		}

(There are no build or flash errors in this code)

This helps me make sure that the mic is being interfaced properly as it prints -1 whenever some pin connections are wrong, otherwise it will print corresponding values captured by mic. So I believe I have interfaced the microphone properly. However, I'm facing issues interfacing the speaker now as I cannot hear anything from the speaker and it seems the data is being sent properly as there are no errors.

Here are the pin connections I made:

Mic: INMP441 MEMS MIC

SD: P0.15 (DOUT)

L/R: GND

WS: P0.16 (FSYNC)

SCK: P0.14 (BCLK)

Speaker: I2S MAX98357 Amp

DIN: P0.13 (DIN)

LRC: P0.16 (FSYNC)

BCLK: P0.14 (BCLK)

SD: NC

GAIN: GND

End result which Im planning to achieve: Receive audio from USB or BLE over I2S and play it to the speakers. I tried implementing a tone generator for the i2s_write function as well but that didn't work either.

  • Hello,

    Sorry for the late reply.

    However, I'm facing issues interfacing the speaker now as I cannot hear anything from the speaker and it seems the data is being sent properly as there are no errors.

    Have you tried capturing a logic trace on the I2S pins for the speaker using a logic analyzer? Just to check that there actually is data coming on these pins?

    What HW are you testing this on? nRF5340 audio DK? nRF5340 DK? Custom board?

    Best regards,

    Edvin

  • Yes, I tried recording the signal with the help of an digital oscillator. This is what I got:

    The DIN, BCLK and LRC pins have 1.3 MHz signal, and DOUT has 460-470 KHz signal. I tried changing the frequency of the sine wave that is being generated but that didn't change anything.

    What HW are you testing this on? nRF5340 audio DK? nRF5340 DK? Custom board?

    I'm using a nRF5340 Audio DK for my development

Related