EPD Update Procedure¶
The update procedure includes 8 steps as shown on the right side.
- Power on screen
- Reset the CoG driver
- Read the OTP data
- Initialize the COG driver
- Send the image
- Update the COG
- Stop DC/DC
- Power off screen
Power on screen¶
The initial state before start has VCC/VDD, /RESET, D/C, /CS, SDA, SCL kept at 0V.
In order to the inrush current will cause other issue. It is recommended to add start DC/DC when VCC/VDD is turned on.
Perform in the following order.
Step | Pin/Register | Data/Value | Name/Unit | Comment |
---|---|---|---|---|
GPIO | POWER | HIGH | External MOSFET power driver | |
GPIO | D/C | HIGH | Data if HIGH, command if LOW | |
GPIO | /RESET | HIGH | Panel reset, active LOW | |
GPIO | Panel /CS | HIGH | SPI chip select, active LOW | |
GPIO | !BUSY | INPUT | Input, floating | |
SPI | CLK | SPI clock | ||
SPI | SDA | SPI data |
Reset the CoG driver¶
Note
Included in function COG_reset()
Step | Pin/Register | Data/Value | Name/Unit | Comment |
---|---|---|---|---|
GPIO | POWER | HIGH | Set POWER HIGH | |
Delay | 200 | ms | Make sure POWER is stable | |
GPIO | RESET | HIGH | Set RESET HIGH | |
Delay | 2 | ms | ||
GPIO | RESET | LOW | Set RESET LOW | |
Delay | 4 | ms | ||
GPIO | RESET | HIGH | Set RESET HIGH | |
Delay | 20 | ms |
Proceed to next step “Read the OTP data”.
If the OTP data is already read and available, proceed to Initialise the COG driver.
Read the OTP data¶
Note
Included in function COG_getDataOTP()
This step is performed once, as long as the host retains the values. If the host loses the values, the host should perform this step again.
Info
The maximum clock speed of the display is 2.5MHz (Read).


Read operation of 4-line SPI
Step | Pin/Register | Data/Value | Name/Unit | Comment |
---|---|---|---|---|
GPIO | /CS | LOW | Select | |
GPIO | D/C | LOW | Command mode | |
SPI3 | 0xb9 | SPI3 = SCK, SDIO, CS plus D/C | ||
GPIO | D/C | HIGH | Data mode | |
SPI3 | Read 1 byte | Read dummy data | ||
SPI3 | Read 128 bytes | Read 128 bytes of data | ||
GPIO | /CS | HIGH | Unselect |
Store the OTP data in memory to avoid reading it at each update.
Proceed to the next step.
Initialize the COG Driver¶
Note
Included in function COG_initial()
Warning
The maximum clock speed of the display is 20MHz (Write).
Warning
Requires both CS master and slave pins
Step | Register | CS pin | Data/Value | Name/Unit | Comment |
---|---|---|---|---|---|
SPI | 0x01 | Both | OTP[0x10], 0x00 | DCTL | 2 bytes of data, first DCTL then 0x00 |
Send the Image¶
Note
Included in function COG_sendImageDataNormal()
and COG_sendImageDataFast()
Step | Register | CS Pin | Data/Value | Name/Unit | Comment |
---|---|---|---|---|---|
SPI | 0x13 | Both | OTP[0x15+6] | DUW+6 | DUW: there is 6 bytes’ data that are read from 0x15…0x1A of OTP memory. |
SPI | 0x90 | Both | OTP[0x0c+4] | DRFW+4 | DRFW: there is 4 bytes’ data that are read from 0x0C…0x0F of OTP memory. |
SPI | 0x91 | Both | 0x12 | ||
SPI | 0x12 | Master | OTP[0x12+3] | RAM_RW+3 | RAM_RW: there is 3 bytes’ data that are read from 0x12…0x14 of OTP memory. |
SPI | 0x10 | Master | DRAM1+n | DRAM1: the data is the NEW image data that you want displaying next moment. | |
SPI | 0x12 | Master | OTP[0x12+3] | RAM_RW+3 | RAM_RW: there is 3 bytes’ data that are read from 0x12…0x14 of OTP memory. |
SPI | 0x11 | Master | DRAM2+n | Normal update – See note below DRAM2 image is dummy data. It just needs to be filled with the enough amount of 0x00. |
|
Fast update – See note below DRAM2 image is the OLD image data that already displayed on the EPD. |
|||||
SPI | 0x12 | Slave | OTP[0x12+3] | RAM_RW+3 | RAM_RW: there is 3 bytes’ data that are read from 0x12…0x14 of OTP memory. |
SPI | 0x10 | Slave | DRAM1+n | DRAM1: the data is the NEW image data that you want displaying next moment. | |
SPI | 0x12 | Slave | OTP[0x12+3] | RAM_RW+3 | RAM_RW: there is 3 bytes’ data that are read from 0x12…0x14 of OTP memory. |
SPI | 0x11 | Slave | DRAM2+n | Normal update – See note below DRAM2 image is dummy data. It just needs to be filled with the enough amount of 0x00. |
|
Fast update – See note below DRAM2 image is the OLD image data that already displayed on the EPD. |
Content of DRAM1 and DRAM2
Normal update | Fast update | |
---|---|---|
DRAM1 | DRAM1: the data is the NEW image data that you want to display next moment. | DRAM1: the data is the NEW image data that you want displaying next moment. |
DRAM2 | Normal update – DRAM2 image is dummy data. It just needs to be filled with the enough amount of 0x00. | Fast update – DRAM2 image is the OLD image data that already displayed on the EPD. |
Size n | 9.7” | 12” |
---|---|---|
DRAM1 | 40320 bytes | 46080 bytes |
DRAM2 | 40320 bytes | 46080 bytes |
The EPD needs to receive both first and second frame data each updating.
The index of the first frame is 0x10 and the second frame is 0x11.
The data of image frame, one bit represents 1 pixel.

Example
The first byte represents the 1st…8th pixels of the first line.
The second byte represents the 9th…16th pixels of the first line, and so on.
Data 1 represents a black colour pixel and data 0 represents a white colour pixel.
Update the COG¶
Note
Included in function COG_update()
Step | Register | CS Pin | Data/Value | Name/Unit | Comment |
---|---|---|---|---|---|
SPI | 0x05 | Both | 0x7d | ||
Delay | 50 | ms | |||
SPI | 0x05 | Both | 0x00 | ||
Delay | 1 | ms | |||
SPI | 0xd8 | Both | OTP[0x1c] | MS_SYNC | MS_SYNC is read from 0x1C of OTP memory |
SPI | 0xd6 | Both | OTP[0x1d] | BVSS | BVSS is read from 0x1D of OTP memory |
SPI | 0xa7 | Both | 0x10 | ||
Delay | 2 | ms | |||
SPI | 0xa7 | Both | 0x00 | ||
Delay | 10 | ms | |||
SPI | 0x44 | Master | 0x00 | ||
SPI | 0x45 | Master | 0x80 | ||
SPI | 0xa7 | Master | 0x10 | ||
Delay | 2 | ms | |||
SPI | 0xa7 | Master | 0x00 | ||
Delay | 10 | ms | |||
SPI | 0x44 | Master | 0x06 | ||
SPI | 0x45 | Master | indexT | Normal update – See note below indexT = 0x28 + tempC |
|
Fast update – See note below indexT = tempC + 0x28 +0x80 |
|||||
SPI | 0xa7 | Master | 0x10 | ||
Delay | 2 | ms | |||
SPI | 0xa7 | Master | 0x00 | ||
Delay | 10 | ms | |||
SPI | 0x44 | Slave | 0x00 | ||
SPI | 0x45 | Slave | 0x80 | ||
SPI | 0xa7 | Slave | 0x10 | ||
Delay | 2 | ms | |||
SPI | 0xa7 | Slave | 0x00 | ||
Delay | 10 | ms | |||
SPI | 0x44 | Slave | 0x06 | ||
SPI | 0x45 | Slave | indexT | Normal update – See note below indexT = 0x28 + tempC |
|
Fast update – See note below indexT = tempC + 0x28 +0x80 |
|||||
SPI | 0xa7 | Slave | 0x10 | ||
Delay | 2 | ms | |||
SPI | 0xa7 | Slave | 0x00 | ||
Delay | 10 | ms | |||
SPI | 0x60 | Both | OTP[0x0b] | TCON | TCON is read from 0x0B of OTP memory |
SPI | 0x61 | Master | OTP[0x1b] | STV_DIR | STV_DIR is read from 0x1B of OTP memory |
SPI | 0x02 | Both | OTP[0x11] | VCOM | VCOM is read from 0x11 of OTP memory |
Calculation of indexT from tempC temperature in C
Normal update | Fast update | |
---|---|---|
Definition | indexT is an index of the normal update. | indexT is an index of the fast update. |
Range | The acceptable range of temperature is -15°C to +60°C and 1°C per step. | The acceptable range of temperature is +0°C to +50°C and 1°C per step. |
Check tempC | -15 <= tempC <= +60 | 0 <= tempC <= +50 |
Value indexT | indexT = 0x28 + tempC | indexT = (tempC + 0x28) + 0x80 |
Low value check | if indexT < 0x25, indexT = 0x25 | if indexT < 0xa8, indexT = 0xa8 |
High value check | if indexT > 0x64, indexT = 0x64 | if indexT > 0xda, indexT = 0xda |
Danger
Operating outside the acceptable temperature range may damage the panel.
Start DC/DC¶
There are 32-bytes data for describing the sequence of soft-start.
Entry | Data/Value | Comment |
---|---|---|
Stage 1 | OTP[0x28+8] | Stage 1 of DC/DC sequence |
Stage 2 | OTP[0x30+8] | Stage 2 of DC/DC sequence |
Stage 3 | OTP[0x38+8] | Stage 3 of DC/DC sequence |
Stage 4 | OTP[0x40+8] | Stage 4 of DC/DC sequence |
The full sequence has 4 stages.
The parameters for each stage take 8 bytes. There are two formats for the stage.

The REPEAT field contains the data format used for this stage and the number of times to repeat it.
- Bit 7 MSB defines the format used in this stage. It should be 1.
- Bits 6 to 0 contain the number of times to repeat.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
REPEAT | FORMAT | Number of times to repeat the sequence | ||||||
1 | nREPEAT = REPEAT & 0x7f |
Info
Example: 0x87 or 0b10000111 means repeat the sequence 7 times.
Danger
If bit 7 MSB of REPEAT is equal to 0, please contact support.
The content of the stage includes 8 bytes.
Format1
Byte | Field | Comment | Used by register |
---|---|---|---|
0 | FORMAT = REPEAT & 0x80 | Must be 0x80 | |
nREPEAT = REPEAT & 0x7f | Define the number of times to repeat the stage | ||
1 | PHL_INI | Define the initial value of PHL, the first data of the register 0x51 | 0x51 |
2 | PHH_INI | Define the initial value of PHH, the second data of the register 0x51 | 0x51 |
3 | PHL_VAR | The byte represents the changing value of PHL with each iteration REPEAT iteration | |
4 | PHH_VAR | The byte represents the changing value of PHH with each REPEAT iteration | |
5 | BST_SW_a | Set the power on/off manager at the start of the phase | 0x09 |
6 | BST_SW_b | Set the power on/off manager at the end of the phase | 0x09 |
7 | SCALE = DELAY & 0x80 | The scale for delay time at the end of the stage | |
nDELAY = DELAY & 0x7f | The delay time at the end of the stage |
Both PHL_VAR_n and PHH_VAR_n could be negative numbers, represented by a 2’s complement.
Info
Example: -5 equals 0xfb
The DELAY field contains the scale and the duration of the delay for the end of the stage.
- Bit 7 defines the scale of the delay. It should be 1.
- Bits 6…0 contain the duration of the delay.
The DELAY field includes the scale in bit 7 and the delay time in bits 6…0 for the end of the stage.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
DELAY | SCALE | DELAY & 0x7f Delay time | ||||||
1 | Scale in milliseconds nDELAY = DELAY & 0x7f ms |
Info
Example: 0x82 or 0b10000010 means a delay of 2 ms.
Danger
If bit 7 MSB of DELAY is equal to 0, please contact support.
For each of the four stages,
- Set the variables
Step | Variable | Data/Value | Name/Unit | Comment |
---|---|---|---|---|
Calculate | FORMAT | STAGE[0x00] | FORMAT = STAGE[0x00] & 0x80 = 0x80 | |
Calculate | nREPEAT | STAGE[0x00] | nREPEAT = STAGE[0x00] & 0x0f | |
Calculate | iPHL | STAGE[0x01] | iPHL = STAGE[0x01] = PHL_INI | |
Calculate | iPHH | STAGE[0x02] | iPHH = STAGE[0x02] = PHH_INI | |
Calculate | PHL_VAR | STAGE[0x03] | PHL_VAL = STAGE[0x03] | |
Calculate | PHH_VAR | STAGE[0x04] | PHH_VAR = STAGE[0x04] | |
Calculate | BST_SW_a | STAGE[0x05] | BST_SW_a = STAGE[0x05] | |
Calculate | BST_SW_b | STAGE[0x06] | BST_SW_b = STAGE[0x05] | |
Calculate | SCALE | STAGE[0x07] | SCALE = STAGE[0x07] & 0x80 | |
Calculate | nDELAY | STAGE[0x07] | ms | nDELAY = STAGE[0x07] & 0x7f |
- Repeat the loop nREPEAT times
Warning
Requires both CS master and slave pins
Step | Pin/Register | Data/Value | Name/Unit | Comment |
---|---|---|---|---|
SPI | 0x09 | BST_SW_a | ||
Calculate | iPHL | Variable iPHL = iPHL + PHL_VAL | ||
Calculate | iPHH | Variable iPHH = iPHH + PHH_VAL | ||
SPI | 0x51 | iPHL | ||
iPHH | ||||
SPI | 0x09 | BST_SW_b | ||
Delay | nDELAY | ms | if SCALE = 0x80 |
Send the Update Command¶
Warning
Requires both CS master and slave pins
Step | Register | CS Pin | Data/Value | Name/Unit | Comment |
---|---|---|---|---|---|
GPIO | !BUSY | HIGH? | Wait for !BUSY = HIGH | ||
SPI | 0x15 | Both | 0x3c |
Stop DC/DC¶
Note
Included in function COG_stopDCDC()
Warning
Requires both CS master and slave pins
Step | Pin/Register | Data/Value | Name/Unit | Comment |
---|---|---|---|---|
GPIO | !BUSY | HIGH? | Wait for !BUSY = HIGH | |
SPI | 0x09 | 0x7b | ||
SPI | 0x05 | 0x5d | ||
SPI | 0x09 | 0x7a | ||
Delay | 15 | ms | ||
SPI | 0x09 | 0x00 |
Power the screen off¶
Step | Pin/Register | Name/Unit | Name/Unit | Comment |
---|---|---|---|---|
GPIO | D/C | LOW | Data if HIGH, command if LOW | |
GPIO | /RESET | LOW | Panel reset, active low | |
GPIO | Panel /CS | LOW | SPI chip select, active low | |
GPIO | !BUSY | Input, floating | ||
GPIO | POWER | LOW | External MOSFET power driver | |
SPI | CLK | SPI clock | ||
SPI | SDA | SPI data |
The EPD update procedure is completed.