13

I am particularly interested in the ED060XC3 that is in the kindle paperwhite (I think that is the right one anyway).

I can't find a freely available datasheet. Would it be possible to reverse engineer a driver from the kindle firmware?

There are acutally 3 interfaces (display, backlight , touchscreen) but the display interface would be the most important and interesting. I intend to purchase one for use with an FPGA if I can determine if it is possible to operate it first.

From what I understand the module itself may not contain a controller but I would have to implement an EPD controller in my FPGA like this.

You can see images of the screen here: aliexpress

7

I don't have an actual answer but here's a few leads.

Freescale has some chips in the i.MX6 family with the EPD interface:

https://community.freescale.com/docs/DOC-93622

I think the signals are described in the CPU datasheet, but not the protocol. Even with the older devices when a dedicated controller had to be used, its datasheet would describe only the controller and not the panel.

Apollo controller datasheet (first generation, used in Sony PRS-500), made by Philips (later PVI):
http://openinkpot.org/raw-attachment/wiki/Device/V3/Screen/Apollo_eInk_screen_controller_datasheet.pdf

The second generation controller (Metronome) was made by E-Ink but they in fact used an Actel ProASIC3 FPGA as can be seen on my photos of PRS-505 innards:

http://www.flickr.com/photos/21729510@N03/2111017270/in/set-72157603454047408

So in theory you might be able to extract the bitstream and RE it or just reuse in your own FPGA. However, it would work only with the first-gen Vizplex panels and probably not with the current ones.

Third generation controller was a dedicated chip made by Epson (S1D13521B, codename Broadsheet). Baidu has a copy of internal training from E-Ink which describes some low-level details on how develop with it (but again, not much on the panel itself):

http://wenku.baidu.com/view/187d53956bec0975f465e245.html

In the end, driving EPD panel is even trickier business than driving a generic LCD. So, unless you know this area very well, I would recommend to stick to a proven solution such as Freescale's chips or a dedicated controller.

If you're not dead set on the hi-res screen, you may be interested in this collection of kits with small resolution and segmented E-Ink screens:

http://www.the-digital-reader.com/2013/05/23/e-ink-dives-into-the-diy-market/

4

Kindle is based on embedded Linux. Thus Amazon is forced to distribute the source code. You might find the actual driver sources there.

You can find the sources here.http://www.amazon.com/gp/help/customer/display.html?nodeId=200203720

  • hmm :/ not if they did it in userspace though you have a point there. And if they are using a EPD controller I still won't know how to control the LCD. – cb88 May 30 '13 at 22:56
  • Always worth a try... – Mellowcandle May 30 '13 at 23:11
4

Petteri Aimonen has figured out how to drive the panel and Sprite_tm made a wireless display out of one

  • He's using a different panel than ED060XC3 but perhaps the display interface is the same. I think the backlight is probably just PWMed LEDs. – cb88 Feb 17 '15 at 23:59
  • Also the ED060XD4 is the updated paperwhite 2 screen ... just for reference. – cb88 Feb 18 '15 at 0:00
3

Looking at the kernel source for the kindle touch (mx50_yoshi.c, see here) it seems to me that the epd configuration, init sequence and so on is all there.

I only checked for the touch cause the touch eink seems to be currently the cheapest. (ED060SCG)

Code

static struct fb_videomode e60_v220_mode = {
.name = "E60_V220",
.refresh = 85,
.xres = 800,
#ifdef CONFIG_FRAMEBUFFER_CONSOLE
.yres = 800,
#else
.yres = 600,
#endif
.pixclock = 32000000,
.left_margin = 8,
.right_margin = 166,
.upper_margin = 4,
.lower_margin = 26,
.hsync_len = 20,
.vsync_len = 4,
.sync = 0,
.vmode = FB_VMODE_NONINTERLACED,
.flag = 0,
};

static struct fb_videomode e60_v220_wj_mode = {
  .name = "E60_V220_WJ",
  .refresh = 85,
  .xres = 800,
#ifdef CONFIG_FRAMEBUFFER_CONSOLE
.yres = 800,
#else
.yres = 600,
#endif
  .pixclock = 32000000,
  .left_margin = 17,
  .right_margin = 172,
  .upper_margin = 4,
  .lower_margin = 18,
  .hsync_len = 15,
  .vsync_len = 4,
  .sync = 0,
  .vmode = FB_VMODE_NONINTERLACED,
  .flag = 0,
};

static struct mxc_epdc_fb_mode panel_modes[] = {
{
    &e60_v220_wj_mode,
    4,  /* vscan_holdoff */
    10, /* sdoed_width */
    20, /* sdoed_delay */
    10, /* sdoez_width */
    20, /* sdoez_delay */
    425,    /* gdclk_hp_offs */
    20, /* gdsp_offs */
    0,  /* gdoe_offs */
    17, /* gdclk_offs */
    1,  /* num_ce */
},
};

I'm also thinking about using an imx6 duallite to drive such a panel.

  • 2
    This only helps with the software protocol to the controller. The asker is interested in the hardware interface to the E-Ink panel itself (pinout, signaling etc.). – Igor Skochinsky Apr 5 '14 at 14:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.