E Ink 显示接口协议

逆向工程 硬件
2021-06-12 03:14:59

我对kindle paperwhite中的ED060XC3特别感兴趣(无论如何我认为这是正确的)。

我找不到免费提供的数据表。是否可以从 Kindle 固件逆向工程驱动程序?

总共有 3 个界面(显示、背光、触摸屏),但显示界面将是最重要和最有趣的。如果我可以确定是否可以先操作它,我打算购买一个与 FPGA 一起使用。

据我所知,模块本身可能不包含控制器,但我必须像这样在我的 FPGA 中实现一个 EPD 控制器

您可以在此处查看屏幕图像:aliexpress

4个回答

我没有实际的答案,但这里有一些线索。

飞思卡尔在 i.MX6 系列中有一些带有 EPD 接口的芯片:

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

我认为 CPU 数据表中描述了信号,而不是协议。即使对于必须使用专用控制器的旧设备,其数据表也只会描述控制器而不是面板。

Apollo 控制器数据表(第一代,用于索尼 PRS-500),飞利浦制作(后来的 PVI):http :
//openinkpot.org/raw-attachment/wiki/Device/V3/Screen/Apollo_eInk_screen_controller_datasheet.pdf

第二代控制器(节拍器)由 E-Ink 制造,但实际上他们使用了 Actel ProASIC3 FPGA,从我的 PRS-505 内部照片可以看出:

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

因此,理论上您可以提取比特流并将其重新生成,或者只是在您自己的 FPGA 中重用。但是,它仅适用于第一代 Vizplex 面板,可能不适用于当前的面板。

第三代控制器是爱普生的专用芯片(S1D13521B,代号Broadsheet)。百度有一份来自 E-Ink 的内部培训副本,其中描述了有关如何使用它进行开发的一些低级细节(但同样,面板本身并不多):

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

最后,驱动 EPD 面板比驱动通用 LCD 更棘手。因此,除非您非常了解该领域,否则我建议您坚持使用经过验证的解决方案,例如飞思卡尔的芯片或专用控制器。

如果您对高分辨率屏幕没有死心,您可能会对这一系列具有小分辨率和分段电子墨水屏幕的套件感兴趣:

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

Kindle 基于嵌入式 Linux。因此亚马逊被迫分发源代码。您可能会在那里找到实际的驱动程序源。

你可以在这里找到资源。http://www.amazon.com/gp/help/customer/display.html?nodeId=200203720

查看 kindle touch 的内核源代码(mx50_yoshi.c,请参见此处),在我看来,epd 配置、初始化序列等都已存在。

我只检查了触摸,因为触摸 eink 似乎是目前最便宜的。(ED060SCG)

代码

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 */
},
};

我也在考虑使用 imx6 duallite 来驱动这样的面板。