Close

Reverse Engineering the Screen

A project log for Bistable LCD e-Paper eReader

eBook Reader based on Raspberry Pi RP2040 MCU and ZBD Bistable LCD

wenting-zhangWenting Zhang 01/30/2021 at 06:024 Comments

Origin

I first saw this screen on the ZBD EPOP 900 electronic shelf label (ESL). Thought it is going to be fun just reverse engineer them, so I bought a few of them:

PCB

After I got them, the first thing I tried was powering them up. And... I got nothing. After powering ON, they simply wait for the command to be sent over RF. Without knowing the RF protocol, I am simply unable to tell it to refresh the screen, so I cannot just use a logic analyzer to get the details about how the screen is being driven. I would have to start from scratch.

The PCB is not very complex, it is a small 2-layer PCB, with only one TI CC1110 MCU controlling everything. With some tracing, it is clear how the LCD is connected to the MCU. MCU also has control of the LCD voltage regulation and LCD bias generation. These are important information that will be used later.

MCU

Though I could potentially create my own board or just build a test circuit to drive the screen... but as a first step, I would like to work directly on the original board. So I would need to be able to program the MCU. TI CC1110 has a 8051 core and use the CC 2-wire debugger interface. Unfortunately, I don't have a CC-debugger... but, I have a Raspberry Pi. So with 2 GPIOs I am able to read and write to the internal flash!

I modified the ccprog utility originally targets the Edison to support Raspberry Pi 4, and you can find the modified version of the program here: https://github.com/zephray/cc1110-prog

With the tool it is also to make backup of the original firmware, so I can flash it back if I ever need to.

For compiling the code for it, I am using make + sdcc. It is available in the Raspbian repository. So, I can directly write my program, compile and download it to the board, all on the Raspberry Pi.

Screen

Now, this is the real hard part. There is no Datasheet or specification sheet I can find online for this screen. The board obviously doesn't tell me more other than where the power rail and the data bus are. The original firmware doesn't want to do anything about the screen unless I have a base station.

There is one hope, though. If I can know the driver IC on the screen, by following the IC pin bump, ITO trace, and FPC cable, I can get the full pinout of the screen. The question is how to know that. Well I don't know. But if I can find a IC, that has the right resolution (channel count), and has the right die size, it is very likely be it. By observing the screen and the traces, it is not hard to see that, they are using 2x240 channel column driver, 1x160 channel segment driver, and 1x240 channel segment driver but only using 200 channels. The 240 channel driver measures 7.6mm x 1mm. From the traces I can be sure it is 240 channel driver, not anything higher.

Of all the 240 channel LCD drivers I can find, here is a list of the die sizes:

None of them matches the one on the screen. That hope is gone.

One thing before I go further, the screen likely doesn't have a controller, but rather only have row and column drivers. This is purely based on experience, I have never seen any monochrome screen with more than 1 COG chips that has controller. If it has controller, it would just be 1 chip, doing both controlling and driving. If it doesn't have a controller, means I will not need to send any initialization commands to the screen. This make me confident that I can drive the screen without knowing much about it.

But how? Well I can always just guess. Here are the control signals usually present on a monochrome LCD without controller:

A typical connection diagram should look like this:

So I expect these pins to show up on this ZBD screen as well. Note this ZBD screen actually has 6 pins, so it probably has additional signal or the signal for segment and common are separated.

There are some additional help I can get from the LCD's ribbon cable, by following the trace there I can know which pins are for the segment, and which pins are for the common.

By just looking at the ribbon cable, I get the following list of the pin connection:

P1-2 is likely the digital power supply for the screen, because the traces for it are wider, and that line has 2x 100nF capacitor connected.

Just from this list, we can already infer the following:

After hours of trial and error, I get the following:

Now on to the timing part. Just like before, start with how standard LCD works.

With a normal STN LCD, the waveform on the control pins should look like this:

So I tried the same thing here, and it works just fine, given you have the correct delay.

The issue left seems to be that the voltage is too high. Back to the PCB, actually I have traced out that there are 2 pins that are being filtered by a 1st order RC filter and connected to the power supply circuit. P1.3 controls the voltage of DCDC output, and P1.4 controls the voltage of bias generation. RC filtering suggests that they are actually PWM signals. Yes, indeed these two pins connects to the TIMER 3 compare output. After setting the voltage lower, I can get a clear image (see the project album).

Source code for the driver so you could reproduce this on your own board:

https://github.com/zephray/zbd-epop-900-screen-demo/blob/master/main.c

Notes

Well it might sound like it was quite easy reverse engineer it, it was not. I wasn't aware that the voltage was controllable (thus not aware that I have the voltage entirely wrong), and I didn't realize that both P15 and P17 are both LP at first, caused lot of confusion at first. At the end I spent lot of time fighting with air. I am glad eventually I have sorted everything out.

Discussions

Giovanni wrote 03/20/2021 at 15:24 point

Awesome stuff. We have a discord server with lots of e-ink developers who are interested in crowd-developing e-paper/reflective displays: https://forum.ei2030.org/t/join-ei-2030-discord-server/125

  Are you sure? yes | no

Chris Jones wrote 03/10/2021 at 07:53 point

Have you checked out https://hackaday.io/project/175947-74-e-ink-shelf-label-used-as-a-weather-station

One of the contributors has some firmware he wrote that should allow you to update the screens wirelessly with the factory firmware.

  Are you sure? yes | no

Wenting Zhang wrote 03/10/2021 at 14:28 point

Yes I did. I had a quick chat with their team as well. Basically the answer I got was:

- The ESL I am using is incompatible (in terms of wireless protocol) with the Chroma series ESL they are targeting.

- They have already got the software to communicate with the exact ESL I am using. They even showed me a video it works.

- But they are not releasing the software/ source code at this point. They will have to clean it up before it is public.

Instead of waiting for them, I decided that I will just reverse engineer the screen myself.

  Are you sure? yes | no

Chris Jones wrote 03/20/2021 at 07:15 point

I understand that. I appreciate your dedication, awesome work, it seems like you have make quite alot of progress here.

I have a few of these displays so when I get some free time I will have to mess with them.

I was thinking about using them for a reminder display and maybe try to make some rudimentary epaper style picture frames. 

I know the resolution isn't too high but I figure they would work for low res wall art pieces..

  Are you sure? yes | no