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_example_drive_a_64x32_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->conf.tx_start=1; //commenting out this line fixes the issue with slow TCP transmission and slow ping replies
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!