Difference between revisions of "GDEW0154Z04"

From Exploitee.rs
Jump to navigationJump to search
(add info about partial refresh)
m (→‎Partial Refresh: I'm bad at wiki)
Line 273: Line 273:
Although the manual states that partial refresh is not supported, it is in fact possible to achieve in a limited fashion:
Although the manual states that partial refresh is not supported, it is in fact possible to achieve in a limited fashion:


1. Issue command 0x61 (Resolution Setting) to change the vertical resolution to something less than 200 pixels.
# Issue command 0x61 (Resolution Setting) to change the vertical resolution to something less than 200 pixels.
2. Issue commands 0x10/0x13 and send pixel data for the number of rows you specified.
# Issue commands 0x10/0x13 and send pixel data for the number of rows you specified.
3. Issue command 0x12 to refresh.
# Issue command 0x12 to refresh.


Result: Only the number of rows specified in step 1 are refreshed; the others remain unchanged.
Result: Only the number of rows specified in step 1 are refreshed; the others remain unchanged.

Revision as of 20:54, 24 May 2018

"Although the information we release has been verified and shown to work to the best our knowledge, we cant be held accountable for bricked devices or roots gone wrong."

GDEW0154Z04 is the controller for the Waveshare 1.54inch ePaper display module. This display module can be found for ~$30 online and is ideal for projects that require very little power consumption and infrequent updates. It features a black layer and a red layer.

Command Set

This controller accepts commands over SPI. While the basics are documented by the manufacturer, several commands and parameters are poorly or not documented.


Command Parameter bytes Description Notes
00 1 Panel Setting Parameter bits:
  • 0x80: Unknown, set in documentation.
  • 0x40: Unknown, set in documentation.
  • 0x20: Unknown, unset in documentation.
  • 0x10: If set, disables the red layer. This makes refreshes twice as fast, but can leave a red tint. It's possible to set this bit after drawing on the red layer; any unrefreshed pixels will remain red.
  • 0x08: If set, flips the image horizontally.
  • 0x04: If set, rotates the image 180 degrees.
  • 0x02: If unset, the display will not refresh.
  • 0x01: If unset, the display will not power on. (Image remains, but does not respond to commands.)
01 4 Power Setting First parameter bits:
  • 0x04: Unknown; if unset, the display seems to not work correctly.
  • 0x02: Same as 0x01?
  • 0x01: If set, use internal generation circuit for +VDH; if unset, use external source. (There does not seem to be any way to provide the external source with this module.)

Second parameter: unknown; documentation says it should always be zero.

Third parameter: Positive voltage for red LUT. Range 2.4 to 8.0V, step 0.2V. High 3 bits unused.

Fourth parameter: Negative voltage for red LUT. Range -2.4 to -8.0V, step 0.2V. High 3 bits unused.

02 0 Power Off Turn off logic. BUSY line will go low. Image remains on screen.
03 1 Gate Voltage
04 0 Power On Turn on logic.
06 3 Booster Soft Start Unknown use; possibly not supported by this controller.

Each parameter byte is a drive strength. The manual states that all should be zero, but in its example code uses values 0x07, 0x06, 0x05, and states that bits 3 and 4 are used as well.

0C 3 Soft Start Possibly same as 0x06 for a different controller.
10 varies Start Transmission (Black) Issue this command, then send data for black pixels.
11 ? RAM Data Entry Mode Possibly not supported by this controller.
12 0 Refresh Refreshes the display. Takes ~8 seconds (or 4 if red layer is disabled).
13 varies Start Transmission (Red) Issue this command, then send data for red pixels.
20 15 Upload Waveform (Black layer VCOM) Parameters are the waveform LUT data.
21 15 Upload Waveform (White)
22 15 Upload Waveform (Black)
23 15 Upload Waveform (G1) Unknown what G1 refers to. Doesn't seem to do anything.
24 15 Upload Waveform (G2) Unknown what G2 refers to.
25 15 Upload Waveform (Red layer VCOM)
26 15 Upload Waveform (Red layer white)
27 15 Upload Waveform (Red)
2C 1 VCOMVol Unknown. Possibly meant for another controller.
30 1 PLL Control Parameter bits 0-2 are N, 3-5 are M.

Manual suggests value 0x39 for temperatures >= 30, 0x2A otherwise. (But doesn't specify Celsius or Fahrenheit, and there's no way to read out the temperature with this module.) Changing these values can make the display refresh very slowly. I haven't found any value that makes it faster.

3A 1 Dummy Line Apparently sets the number of extra lines transferred but not shown. May be for another controller.
3B 1 Gate Time Unknown, maybe for another controller.
3C 1 Border Unknown, maybe for another controller.
40 0 Temperature Sensor Command (TSC) Returns 2-byte temperature over DOUT. However, this module does not expose DOUT, so this is not useful.
41 1 Temperature Sensor Setting Parameter: 0x80=use external sensor, 0x00=internal. (No way to connect external sensor to this module.)
42 3 TSW (Temperature Sensor Write?)
43 2 TSR (Temperature Sensor Read?)
44 2 Set RAM Area X Unknown, maybe for another controller.
45 4 Set RAM Area Y
4E 1 Set RAM Pointer X
4F 2 Set RAM Pointer Y
50 1 VCOMM & Data Interval Setting Parameter bits:
  • 0x10: If set, inverts the display (swaps black/white).
  • 0x0F: Unknown; mentioned in manual but not explained.
60 1 Unknown Undocumented; affects update region. Parameter:
  • 00 to 17: Updates normally.
  • 18: Blanks most pixels; updates the border; updates the display very faintly.
  • 19 to FF: Updates border only.
61 3 Resolution Setting Tells the controller the resolution of the display.
  • First parameter: vertical size.
  • Second parameter: horizontal size (high byte).
  • Third parameter: horizontal size (low byte).

This can be changed after drawing, allowing to refresh only some rows.

71 0 Get Status Useless, since no DOUT line.
80 1 Unknown Undocumented. If parameter bit 0x01 is set, the module shuts down immediately. (Will not respond to commands until powered on again.)
82 1 VCM_DC Setting Parameter: VCOM value (0 to -3.0V, step 0.1V). Anything beyond -3.0 is clamped to -3.0.
F0 1 Booster Source Voltage Unknown, maybe for different controller.


Partial Refresh

Although the manual states that partial refresh is not supported, it is in fact possible to achieve in a limited fashion:

  1. Issue command 0x61 (Resolution Setting) to change the vertical resolution to something less than 200 pixels.
  2. Issue commands 0x10/0x13 and send pixel data for the number of rows you specified.
  3. Issue command 0x12 to refresh.

Result: Only the number of rows specified in step 1 are refreshed; the others remain unchanged.

Probably a true partial refresh could be achieved if some command were found to set the number of columns and first row/column. (Changing horizontal resolution only distorts the image; it will still refresh the entire row.)

In addition, you can use command 0x00 to toggle the 180 degree rotation. The partial refresh will still affect the "top" N rows, so this allows you to refresh only the "bottom" N rows, with the caveat that you must rotate the image data you send.

You can also turn off the red layer (using command 0x00) and issue a partial refresh; the refreshed rows' red layer will go blank, but the remaining rows are unaffected. This allows for faster refreshing (only 4 seconds instead of 8) if you don't need any red pixels in those rows.

Command 0x60 may be interesting for this as well?