I2S full duplex

vardelean
Posts: 8
Joined: Sun Jun 04, 2017 8:07 pm

I2S full duplex

Postby vardelean » Fri Aug 10, 2018 2:00 am

Hi everyone,

Is there a way to get I2S to work in full duplex mode using DMA and 2 separate buffers, one for read and one for write?
I can get it to send data using i2s_write, but I can't get it to simultaneously read with i2s_read the data I send out, like I would expect form a full duplex operation.

My config info looks like this:

Code: Select all

i2s_config_t i2s_config = {
	 .mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX,               // Full duplex
        .sample_rate = SAMPLE_RATE,
        .bits_per_sample = 16,
        .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,                           //2-channels
        .communication_format = I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB,
        .dma_buf_count = 16,
        .dma_buf_len = 128,
        .use_apll = false,
        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1                                //Interrupt level 1
    };
    i2s_pin_config_t pin_config = {
        .bck_io_num = 26,
        .ws_io_num = 25,
        .data_out_num = 22,
        .data_in_num = 23                                                      
    };
    i2s_driver_install(I2S_NUM, &i2s_config, 0, NULL);
    i2s_set_pin(I2S_NUM, &pin_config);
    

And somewhere in main I'm trying to send data with 0 timeout to get the function to return right away followed by the receive function:

Code: Select all

err = i2s_write(I2S_NUM, samples_tx, samples, &i2s_bytes_write, 0);
err = i2s_read(I2S_NUM, samples_rx, samples, &i2s_bytes_read, 100);
The data is going out from the I2S DOUT pin, bit clock and ws clock are fine, (checked out with the logic analyzer) and I connected DOUT into DIN, but my receive buffer is always empty.

What's even more interesting is that i2s_bytes_read is always equal to i2s_bytes_write, even if I remove the connection between DOUT and DIN.

I'm using an ESP32_Core_board_V2.

Many thanks!

Who is online

Users browsing this forum: Bing [Bot] and 327 guests