I'm happy to use any name for the buffer memory on these controllers, I just want to avoid any confusion as to how it is used: that it is external to the MCU/FPGA, is internal to the controller IC on the display FPC, has very asymmetric write/read timings, and is constantly read by the controller to refresh the display without affecting the write timings or access. It's what the Ilitek ILI9341 (320×240) and ILI9488 (480×320) datasheets use, so I didn't even bother to check any dictionary for the correct term. Should I use VRAM for this in the future, or just "display module framebuffer" or "display module graphics RAM" or something else?
The display modules I use do export the TE pin which informs the external MCU/FPGA of a completed refresh allowing the external one to start writing the contents of a new frame without tearing, plus have a register which can be read –– at 150ns cycles or max. 6.7 MHz –– to obtain the scan line currently being updated.
Just to clarify, my favourite display is
- 2.8" 320×240 IPS, ER-TFT028A2-4
50-pin 0.5mm pitch FPC, ILI9341 controller, max. 15 MHz writes (66ns), physical size 70mm×50mm, active area 57.6mm×43.2mm, 0.18mm×0.18mm square pixels, optional capacitive touch panel uses separate 6-pin FPC, and backlight is four white LEDs in parallel with common cathode connection having 3.2V–3.4V forward voltage at 70mA–80mA current
but
- 2.4" 320×240 IPS, ER-TFT024IPS-3
50-pin 0.5mm pitch FPC, ST7789 controller, max. 15 MHz writes (66ns), physical size 60mm×43mm, active area 48.96mm×36.72mm, 0.153mm×0.153mm square pixels, backlight is four white LEDs in parallel with common anode having 3.2V–3.4V forward voltage at 70mA–80mA current
- 3.5" 480×320 IPS, ER-TFT035IPS-6
50-pin 0.5mm pitch FPC, ILI9488 controller, max. 33 MHz writes (30ns), physical size 83mm×55mm (85mm×57mm with optional capacitive touch panel in the same FPC), active area 73.44mm×48.96mm, 0.153mm×0.153mm square pixels, and backlight is six white LEDs in parallel with common anode for all, two common cathodes for each group of three LEDs, having 3.0V–3.2V forward voltage at 110mA–120mA current
all have a compatible 50-pin FPC and very similar controllers too. Then there are
- 3.2" 320×240 IPS, ER-TFT032IPS-3.2
40-pin 0.5mm pitch FPC, ST7789V2 controller, max. 15 MHz writes (66ns), physical size 78mm×55mm, active area 64.8mm×48.6mm, 0.2025mm×0.2025mm square pixels, optional capacitive touch, backlight is four white LEDs in parallel, 3.2V–3.4V forward voltage at 110mA–120mA current
- 3.92" 320×320 IPS, ER-TFT3.92-1
40-pin 0.5mm pitch FPC, ST7796S controller, max. 15 MHz writes (66ns), physical size 84mm×84mm, active area 70mm×71mm, 0.21mm×0.22mm pixels (<5% from square), optional capacitive touch, backlight is two parallel chains of five white LEDs in series, forward voltage 15V–16V at 30mA–40mA current; no TE pin
- 4.3" 800×480 IPS, ER-TFT043-9
40-pin 0.5mm pitch FPC, NT35510 controller, physical size 104mm×61mm, active area 93.6mm×56.16mm, 0.117mm×0.117mm square pixels, and backlight is two parallel chains of five series white LEDs with 15V–16V forward voltage at 30mA–40mA current; no TE pin
have 16-bit parallel 8080-style buses and can be used in the same fashion, although the pinouts vary. All these have a controller with built-in memory for the contents, and can be used like I do (with video updates synchronized with the display, but only changes need to be sent). While the last two do not have an output pin to indicate completion of display refresh, they do support command 0x45 that returns the scan line currently being refreshed, so one can do active polling to avoid tearing.
The annoying thing with these small panels is driving the backlight without flicker. With series white LEDs there are efficient boost converters working in the MHz range. With parallel LEDs, although I have 5V at sufficient currents available, losses are converted to heat, and although 0.2W or so of heat isn't that much, it does need to be get rid of, and the enclosures I use are small (routers, switches, NAS boxes, et cetera). An MCU/FPGA-programmable current efficient buck controller from 5V (to around 3V) with resistor-settable maximum current (80mA–120mA) operating at 300kHz - 2MHz would be
nice. I've already found out that all the displays I have have very well balanced backlight LEDs, so my
thread from 2022 on backlighting was overly cautious: I've not needed to balance backlight LEDs ever.