Skip to content

Update GxEPD2 driver for GDEY075Z08 / UC8179 display - #59

Merged
RomanAlexandroff merged 3 commits into
mainfrom
display_GxEPD2_driver_update
Aug 19, 2026
Merged

RomanAlexandroff merged 3 commits into
mainfrom
display_GxEPD2_driver_update

Conversation

@RomanAlexandroff

Copy link
Copy Markdown
Owner

Summary

This PR updates the project to use the correct GxEPD2 driver for the actual E-Ink display and controller used by the device.

The project previously used GxEPD2_750c_Z08, which is intended for displays using the GD7965 controller. The actual display is the Good Display GDEY075Z08 7.5" tri-color panel, which uses the UC8179 controller.

The GxEPD2 library has since added a dedicated GxEPD2_750c_GDEY075Z08 driver, so this PR migrates the project to that driver.

Changes

  • Updated the GxEPD2 library to a newer version containing:
    • GxEPD2_750c_GDEY075Z08.h
    • GxEPD2_750c_GDEY075Z08.cpp
  • Replaced the old GxEPD2_750c_Z08 driver with GxEPD2_750c_GDEY075Z08.
  • Updated the display object type and constructor accordingly.
  • Updated all relevant display-driver references and includes.
  • Adjusted the display buffer configuration to fit the available ESP32-C3 RAM.
  • Kept the display buffer at GxEPD2_750c_GDEY075Z08::HEIGHT / 4, which allows the device to operate reliably without crashing.
  • Verified that the new driver works with the existing GDEY075Z08 + DESPI-C02 + XIAO ESP32-C3 hardware.

Important discovery

The previous driver was not actually intended for the display/controller combination used by this project.

The old configuration was:

Display:    GDEY075Z08
Controller: UC8179
Driver:     GxEPD2_750c_Z08

The new configuration is:

Display:    GDEY075Z08
Controller: UC8179
Driver:     GxEPD2_750c_GDEY075Z08

The dedicated driver was added to GxEPD2 relatively recently, while the version of GxEPD2 previously used by this project was several years old. Consequently, the project had been using a driver intended for a different controller without realizing it.

Display refresh performance

The driver migration also allowed the display refresh behaviour to be investigated further.

With the old driver, the GxEPD2 diagnostics repeatedly reported approximately 20-second BUSY timeouts:

_PowerOn     : ~20 s
_Update_Full : ~20 s
_PowerOff    : ~20 s
_Update_Part : ~20 s

This resulted in display updates taking more than one minute.

With the correct GDEY075Z08 driver, the measurements are approximately:

_Update_Full : ~16.8 s
_Update_Part : ~16.8 s
_PowerOn     : ~0.127 s
_PowerOff    : ~0.040 s

The display therefore no longer experiences the previous ~20-second BUSY timeouts for every operation.

The new driver has also been tested on the actual remote device, and the display has been confirmed to render the images correctly.

RAM / display buffer

During the migration, the device initially crashed when attempting to instantiate the display with the full display height as the buffer height.

Using:

GxEPD2_3C<GxEPD2_750c_GDEY075Z08,
          GxEPD2_750c_GDEY075Z08::HEIGHT / 4>

resolved the crash and allowed the display to operate normally.

The MAX_DISPLAY_BUFFER_SIZE configuration was also investigated. The project's previous custom / 2 modification was retained where appropriate, but increasing the available display buffer alone was not sufficient to make the full-height buffer fit into the available RAM.

The / 4 height configuration is therefore currently retained as the stable configuration.

Verification

The updated firmware was deployed to the actual device and verified remotely.

Confirmed:

  • The device boots successfully.
  • The device no longer crashes because of the display object allocation.
  • The GDEY075Z08 display renders the image correctly.
  • Black and red content are displayed correctly.
  • Full and partial refreshes execute successfully.
  • The previous repeated ~20-second BUSY timeout behaviour is no longer present.
  • Display refresh timing is substantially improved.

Related issue

This work is closely related to the existing E-Ink display refresh performance investigation.

The remaining display-refresh behaviour and the application's display-update logic are being tracked separately so that this PR remains focused on the driver migration.

Notes

The display drawing logic itself is due for a larger refactoring. Unexpected display refreshes have been observed during some wake-up cycles even when no visible display change is expected. This behaviour is documented separately and is intentionally not addressed by this PR.

@RomanAlexandroff RomanAlexandroff left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The astonishing amount of deletions is just files of other displays drivers having been removed from the GxEDP2 library in the "libraries" folder of this repository

@RomanAlexandroff
RomanAlexandroff merged commit c425ab2 into main Aug 19, 2026
5 of 6 checks passed
@RomanAlexandroff
RomanAlexandroff deleted the display_GxEPD2_driver_update branch August 19, 2026 07:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Issue] Excessive E-Ink display refresh time and BUSY pin timeouts

1 participant