ESP32, ili9488, 8 Bit Parallel Choppy animation when scrolling Tabs with LVGL generated objects

@reso I am implementing with two cores now. Just wondering I can run the GUI in the loop under one task, how to I get TFT_eSPI running on the second core as it does not have any command in the loop?

i.e. how do you get TFT_eSPI and lvgl running in independent cores on the esp32?

Also @embeddedt do you know if you still can’t run tasks on both cores as per

If you aren’t deploying this code into a real product, I would give FreeRTOS tasks on multiple cores another try. From what I’ve seen, you find out very quickly if simultaneous cores are a problem, as things crash/don’t work. :wink:

LVGL tasks don’t run on multiple cores as they are really periodic timers, not tasks.

Just as a FYI, I have setup the buffers like this to get around the memory issue:

lv_color_t* buf1 = (lv_color_t*)malloc(DISP_BUF_SIZE * sizeof(lv_color_t));
    lv_color_t* buf2 = (lv_color_t*)malloc(DISP_BUF_SIZE * sizeof(lv_color_t));

    lv_init();

    /* Initialize SPI or I2C bus used by the drivers */
    lvgl_driver_init();

    uint32_t size_in_px = DISP_BUF_SIZE;
    lv_disp_buf_init(&disp_buf, buf1, buf2, size_in_px);

I run the display update on a separate core like this:


    xTaskCreatePinnedToCore(
        displayTask,
        "displayUpdateTask",
        10000,      /* Stack size in words */
        NULL,
        0,
        NULL,
        0);         /* Core ID */

Make sure that you use Semaphore to ensure that the display task does not mess with your other tasks when you share data between you display and background processing.
I was playing around with the core and Core 0 gave me more performance then core 1, even when I made sure my background tasks where running on the other core. (ESP32) I still need to wrap my head around that…

On ESP32 with a ILI9341 I noticed that the performance is not great, but for the hobby project acceptable. I am using the lvgl_port_esp32 drivers.

Do you generate the parallel output yourself or using a library? Looking at the datasheets, it seems that min write cycle for the ILI9341 is 450ns (~2Mhz) while the ILI9488 is 30ns (~30Mhz) so the library may throttle it down for the ILI9341.

BTW, do you know if on the ILI9488 8bit two cores, the bottleneck is LVGL drawing in memory or the pixel transfer to the TFT? You could double the latter by using 16bits transfers.

I haven’t used the ILI chips, but I think people tend to overclock some component of the transaction past what the datasheet recommends, so the speed of the 9341 might be faster than you think.