Open-source DMA driver enables flicker-free HUB75 LED panels on ESP32-S3
StubbyDevs released a driver that uses the ESP32-S3's LCD_CAM peripheral with GDMA to drive SM16380 S-PWM HUB75 LED panels without flicker or tearing.
Summary
The driver targets SM16380 S-PWM HUB75 panels, which are incompatible with common HUB75 libraries because each driver chip has independent frame memory and PWM generation. Row scanning runs in hardware with zero CPU overhead. Frame updates splice in at scan pass boundaries to eliminate tearing. A 128×64 panel achieves approximately 67 fps. The implementation runs on a $10 ESP32-S3 board using the LCD_CAM peripheral in i80 mode, with CLK encoded as a data bit rather than the LCD write strobe. Color depth is 4 bits per channel.
How the driver avoids flicker
- Uses ESP32-S3 LCD_CAM peripheral in i80 mode with GDMA, sending one 16-bit word per bus cycle
- CLK carried as a data bit rather than the LCD write strobe, an unconventional signaling choice
- Row scan operates in hardware with no CPU time; new frames splice in at end of scan pass to prevent tearing
- Color depth: 4 bits per channel
- Speed bottleneck is PSRAM bandwidth, not the panel itself
- Includes examples: color bars, plasma demo with fps printout, two-panel 256×64 layout, scrolling text via Adafruit_GFX
- Protocol documentation in
extras/PROTOCOL.md
Why it matters
The driver fills a gap for makers using low-cost S-PWM HUB75 panels, which were unsupported by existing libraries. Running on a $10 ESP32-S3 with minimal CPU overhead makes high-quality LED animations accessible for hobbyist and small-scale commercial projects.
Original reference: blog.adafruit.com →