Driving E-ink display

互联网上关于E-ink (电子墨水屏)以及如何驱动E-ink display资料非常少。无意中在Essential scrap上找到了关于E-ink的文章,非常好。


E-ink displays, such as the ED060SC4-V2, are easily available off eBay. They are sold as spare parts for e-book readers, but there is nothing to stop you from using them in your own hobby projects. Or is there?

The only problem is that there is very little documentation available on how to drive these displays. I have assembled below a list of the useful material I have found. All of this was found using Google:
Datasheet of the PrimeView ED060SC4 panel. It contains the pinouts and information on driving voltages, but only very basic description on how to drive it.
Datasheet of the Epson S1D13521 E-ink controller. This contains a lot of information on how the panel is driven, but a lot of it is also useless if you are driving the panel directly instead of through controller IC.
Schematics of G6 ebook reader using this panel. These help on the electronics design and also map the S1D13521 pins to the names used in ED060SC4V2 datasheet.
Source and gate driver brochures. These are the chips that are on the edges of the display panel.
Renesas’ presentation on driving E-ink screens. This contains a lot of general information on the E-ink technology.

Electrical connections

To drive a plain E-ink panel, you need to provide it with specified supply voltages and to drive the digital signals with the timing that it expects. Unlike with normal TFT-panels, E-ink screens do not have a minimum refresh rate so you can do this even on a very slow microcontroller.

Driving waveforms

Having the electrical connections figured out, there is the problem of what kind of signals to feed into the display panel. In theory, it is simple enough: just shift in some bits to the source driver register and step the gate driver register. In practise, however, there are a few gotchas..
At first I had some trouble getting anything to happen. It turned out to be a combination of badly connected cables, wrongly defined pinouts and various bugs. However, the first thing I did manage to get to display is this brute force pattern generated by dumping rand() output into the GPIO pins: That seems to be a good way of checking that all signals are connected and all voltages are ok.

1.Gate driver

The gate driver is definitely the easier one. Its purpose is to simply select one row of the panel for updating. How this is done is that you shift in a single “1” bit, and then “0” bits every time you want to advance to the next row. The “1” bit will shift through the register until it falls off the far end.

That video shows the active row driver line visible at the edge of the panel. Apparently the electrophoretic material extends a bit past the actual display area, so that anything that happens in the electrodes underneath becomes visible.
这里写图片描述
Gate driver waveforms.
Basically, to start a frame, you toggle GMODE (gate output enable) high and activate SPV (start pulse vertical, active low) for one CKV clock cycle. After that you toggle CKV for each row you want to advance. It seems that the gate driver is only on while the CKV is high, and also that the on-off ratio of CKV is important. It seems necessary to have CKV off much longer than it is on, otherwise the image leaks to other rows also. Probably some kind of residual charge which must be allowed to dissipate.

The following table lists the timings that I have found suitable for my panel:
这里写图片描述

2.Source driver

The source driver is not very complex either. You shift in 800 pixels of data, 2 bits per pixel. After all the data is in the shift register, you pulse the latch enable to store it into the latch. Then you pulse the output enable when you want to write out the row.
这里写图片描述
Source driver waveforms.
The SPH signal starts the row register, and should remain low for the duration of the row. Pixel data is shifted in 8 bits at a time, so that each byte contains information for 4 pixels. Therefore, a total of 200 pulses on CL clock signal. After the row has been shifted in, the LE (latch enable) signal is pulsed high to load the data into the output latch. Finally, to write the row, the OE signal should be raised simultaneously with the gate driver CKV signal.

This much was easy enough to guess based on the public information. However, doing just that, nothing happened. One crucial piece of information is still missing: the meaning of the 2 bits that define the state of each pixel:
这里写图片描述

3.Conclusion

These waveforms are enough to get basic images onto the E-Ink panel. In reality the subject is a lot more complex: there are all kinds of temperature dependencies and various ways how to switch pixels as quickly and accurately as possible. In fact, when you buy through the official channels instead of eBay, the panel manufacturer will provide a waveform file which contains all of the timings in some proprietary format.

Software driver

Actually drawing the graphics for the display is both the easiest and the hardest part. The basic algorithms for line drawing, fonts etc. have been known for decades, and there are a thousand implementations available online. However, there seems to be a lack of good open source graphics libraries for microcontrollers, and close to zero that could do display list rendering.

注:原文链接http://essentialscrap.com/

猜你喜欢

转载自blog.csdn.net/august_zh/article/details/78636797