Waveshare ESP32-S3-Touch-LCD-2.1 + LVGL 8 — Continuous horizontal "ghost scrolling" on ST7701S RGB panel

mjolnir117
Posts: 1
Joined: Wed May 27, 2026 2:22 pm

Waveshare ESP32-S3-Touch-LCD-2.1 + LVGL 8 — Continuous horizontal "ghost scrolling" on ST7701S RGB panel

Postby mjolnir117 » Wed May 27, 2026 2:26 pm

Hardware:

Waveshare ESP32-S3-Touch-LCD-2.1 (480×480 round display)

ST7701S driver, 16-bit RGB parallel interface, framebuffer in PSRAM

CST820 capacitive touch (I2C), QMI8658 IMU on same board

Arduino ESP32 2.0.x / IDF 4.4

Problem: The display continuously shows a horizontal "scrolling" or "ghosting" artifact — ghost images of the scene content appear shifted left and right and cycle through as if the screen is panning. It looks like a screen transition animation (slide left/right) firing on a loop, but it happens even when no screen transitions are triggered in code.

What we've ruled out:

✅ Not LVGL touch indev scrolling — removed the touch indev driver entirely, still happens

✅ Not handleTouch() firing false long-presses — disabled touch polling entirely, still happens

✅ Not a screen transition bug — confirmed no lv_scr_load_anim() calls fire during the jitter

✅ Not related to the QMI8658 accelerometer (no driver loaded, movement correlation was coincidental)

✅ Gestures disabled on CST820 (wrote 0x00 to motion mask register 0xD0)

What we suspect: The artifact looks exactly like what happens when LVGL's full_refresh=1 with a single PSRAM framebuffer causes a 460KB memcpy that overlaps with the RGB DMA scan. We've tried:

Vsync semaphore (wait before draw, wait after draw)

Full-screen LVGL draw buffer to reduce flush count to 1 per frame

relax_on_idle=1 on the RGB panel config

Change-only UI updates (only call lv_label_set_text when sensor data changes)

None have fully resolved it. The display is usable but the constant subtle horizontal shimmer is visible, especially on the background image which has fine detail.

Question: Has anyone successfully eliminated tearing/ghosting on the ST7701S RGB panel with IDF 4.4 (no bounce buffer support)? Is there a way to properly double-buffer or page-flip with this panel + LVGL 8 on this IDF version, short of upgrading to IDF 5.x which adds bounce buffers?

Video of what I am seeing is above... don't click unmute, there was a separate issue with the buzzer I have resolved (or at least I think it is separate...)

What is my project?

Trying to make an interior/exterior sensor display for my L300 delica. There is an older 60mm gauge that used to show this that broke so trying to learn about hardware a bit... very new!
Attachments
PXL_20260527_045257737.MP.jpg
PXL_20260527_045257737.MP.jpg (443.35 KiB) Viewed 54 times
PXL_20260527_051016418.jpg
PXL_20260527_051016418.jpg (520.54 KiB) Viewed 54 times


Who is online

Users browsing this forum: Applebot, Baidu [Spider], PetalBot and 2 guests