WiFi Transmit Slowed by using I2S Parallel with DMA
Posted: Tue Feb 20, 2018 7:43 am
Hi there,
I am using the display driver given in this example: https://esp32.com/viewtopic.php?f=17&t=3188#p14940 and github here: https://github.com/ESP32DE/I2S_parallel ... 32_display
It uses the parallel mode of the I2S driver with DMA to drive an LED display.
My problem: transmitting TCP packets is very slow (several seconds, or not at all) when the I2S parallel driver is transmitting data. Receiving packets is ok.
I have checked this by pinging the ESP32 with my PC and it has a very slow response. Wireshark shows the same. I have also tried using an example web socket server, and the packets are received by the ESP32 fine, but transmitting has this same delay.
If I never enable the I2S paralell transmit, the problem goes away (the ESP32 ping reply arrives in ~12ms).
Part of i2s_paralell.c in the example I am using, commenting out the last line fixes the issue:
Is there some way the DMA used by I2S is interfering with the lwip output buffer or the wifi transmit buffer? I have looked at the lwip functions but I am getting lost. Any help or ideas would be appreciated!
I am using the display driver given in this example: https://esp32.com/viewtopic.php?f=17&t=3188#p14940 and github here: https://github.com/ESP32DE/I2S_parallel ... 32_display
It uses the parallel mode of the I2S driver with DMA to drive an LED display.
My problem: transmitting TCP packets is very slow (several seconds, or not at all) when the I2S parallel driver is transmitting data. Receiving packets is ok.
I have checked this by pinging the ESP32 with my PC and it has a very slow response. Wireshark shows the same. I have also tried using an example web socket server, and the packets are received by the ESP32 fine, but transmitting has this same delay.
If I never enable the I2S paralell transmit, the problem goes away (the ESP32 ping reply arrives in ~12ms).
Part of i2s_paralell.c in the example I am using, commenting out the last line fixes the issue:
Code: Select all
//Start dma on front buffer
dev->lc_conf.val=I2S_OUT_DATA_BURST_EN | I2S_OUTDSCR_BURST_EN | I2S_OUT_DATA_BURST_EN;
dev->out_link.addr=((uint32_t)(&st->dmadesc_a[0]));
dev->out_link.start=1;
dev->conf.tx_start=1; //commenting out this line fixes the issue with slow TCP transmission and slow ping replies