IT8951 Eink.com 16 bit parallel controllers - martinberlin/cale-idf GitHub Wiki

  • Size: Various sizes, 6" (1448x1072), 7.8" (1872x1404 is the first to be tested)
  • Sold by: Waveshare. Wiki link, IT8951 Datasheet
  • Controller: IT8951

it8951_einkdotcom

  • Status: Being implemented.
  • Arduino ESP32 class: GxEPD2
  • Input: SPI or USB with Eink demo software. Alternatively slow I2C.
  • Output: 16 bit parallel interface
  • Notes: Take care when connecting epaper 40 pin FPC to the IC controller. The notation 1 - 40 in eink FPC should coincide with the PCB marks, connecting it upside down will not work and you might damage your IT8951. SPI connector is on the other side of the PCB just below the 30 pin FPC.

Working pins for the Waveshare IT8951

CONFIG_EINK_SPI_MOSI=23
CONFIG_EINK_SPI_CLK=18
CONFIG_EINK_SPI_CS=14
CONFIG_EINK_RST=33
CONFIG_EINK_BUSY=12
CONFIG_EINK_SPI_MISO=27

SPI detail of preamble before data

IT_preamble_before_data

  • It's still not defined if I will add an ESP-IDF class for this. Taking in account that:
  1. You will need an 3.3v to 5V step up booster to feed the Eink PCB if you want to power this up with a Lion 3.7V Battery
  2. It's a complex build since you need the IT8951 PCB plus the step-up and the ESP32 combined
  3. It's slow compared to the speed you can get feeding the IT8951 via USB and you will need a big battery to feed all this construction

Anyways I will try to make the class but I'm not highly motivated to do so. That means it can take a while. Pull request's accepted and I will give credits and support if anyone has success implenting this in a CalEPD class.

So far the alternative solution is to use LovyanGFX that has great support and it's compatible with IT8951 and ESP-IDF. Here an example on how this may look like: /main/www-jpg-render/main/jpg-render-it8951.cpp#L51

To add the submodule:

git add submodule https://github.com/lovyan03/LovyanGFX.git components/LovyanGFX

This is already done in feature/45-it8951 branch. So just run:

git submodule update --init --recursive 

In order to fetch this component.

Pin configuration for SPI

GND  -> ESP32 Ground
5V   -> ESP32 usb/5v PIN 
RST  Reset pin (Low active)         -> Any Output capable GPIO 
CS   Chip select (Low active)       -> Any Output capable GPIO 
HRDY Busy stats pin (Low when busy) -> ESP32 GPIO X needs only Input capabilities
MOSI Data in for the epaper         -> ESP32 GPIO 23
MISO Data out                       -> To read device info from ESP32
CLK  Clock                          -> GPIO 18

// Check working pin configuration in config-examples/lolin32-pro 

If you are working with a Lipo 3.7 v battery you will need a boost up converter to feed the IT8951 with 5 volts. The 5v should be strong and exact for this configuration to work correctly.

Remember to run

idf.py menuconfig

And enable in Component config --> ESP32-specific --> Support for external RAM

SPI Command & Parameters

This SPI has no DC signal to differentiate between command or data cycle, so every packet needs to contain a preable word to signalize if it's data or command. This are the preambles:

Packet Type    Preamble word (16 bit)
Command        0x6000 
Write Data     0x0000 
Read Data      0x1000  

For SPI read/write cycle please check page 25 of the Datasheet.