4. LUT 数据结构总览:整体结构、行、列与深度的含义

LUT(Look-Up Table,查找表)是墨水屏驱动中控制电子墨水粒子运动的核心数据结构。它本质上是一个三维数组,定义了从当前灰度到目标灰度转换过程中,每个像素在每一帧(Phase)所施加的电压波形。理解 LUT 的行、列、深度(Depth)是修改和优化驱动波形的第一步。

核心概念: LUT 不是一张简单的“颜色映射表”,而是一张 时序波形表。它告诉驱动芯片:对于每一种灰度跳变,在接下来的 N 个帧周期内,每个帧应该输出什么电压。

4.1 LUT 的三维结构模型

一个标准的墨水屏 LUT 可以抽象为一个三维立方体,其三个维度分别是:行(Row)、列(Column) 和 深度(Depth)。

LUT 三维结构模型 列 (Column) 行 (Row) 深度 (Depth) Phase 0 Phase 1 Phase N 从灰度 0 → 灰度 1 从灰度 1 → 灰度 0 每个单元格 (Row, Col, Depth) 存储一个电压值:VSS、VSH、VSL 或 VGH

上图展示了一个典型的 LUT 立方体。其中:

  • 行(Row):代表当前像素的 起始灰度(Source Gray Level)。
  • 列(Column):代表像素的 目标灰度(Target Gray Level)。
  • 深度(Depth):代表波形中的 帧序号(Phase / Frame Number)。

4.2 行与列:灰度跳变矩阵

行和列共同构成了一个 灰度跳变矩阵。假设墨水屏支持 4 级灰度(0, 1, 2, 3),则 LUT 的行数和列数均为 4。矩阵中的每个元素 (Row, Col) 对应一种特定的灰度转换过程。

4 级灰度 LUT 的行列矩阵(示例)
起始灰度 \ 目标灰度 Col 0 (白) Col 1 (浅灰) Col 2 (深灰) Col 3 (黑)
Row 0 (白) 保持白 白→浅灰 白→深灰 白→黑
Row 1 (浅灰) 浅灰→白 保持浅灰 浅灰→深灰 浅灰→黑
Row 2 (深灰) 深灰→白 深灰→浅灰 保持深灰 深灰→黑
Row 3 (黑) 黑→白 黑→浅灰 黑→深灰 保持黑
关键理解: 对角线上的元素(Row == Col)代表“保持当前灰度”,通常使用最短的波形或零电压序列。非对角线元素则需要更复杂的多帧波形来驱动粒子完成迁移。

4.3 深度(Depth):波形的时序维度

深度是 LUT 中最容易被忽视但最重要的维度。它定义了每个灰度跳变需要经历多少个帧周期,以及每个帧周期内施加什么电压。

例如,对于“白→黑”这个跳变(Row=0, Col=3),深度方向可能包含以下序列:

// 伪代码:LUT[Row=0][Col=3] 的深度序列
Phase 0:  VSH  (正高压,将白色粒子推至顶部)
Phase 1:  VSH  (维持正高压)
Phase 2:  VSL  (负低压,开始拉入黑色粒子)
Phase 3:  VSL  (维持负低压)
Phase 4:  VSS  (零电压,粒子静止)
...
Phase N:  VSS  (结束,显示稳定)

深度值(Depth)通常由驱动芯片的 帧计数器 控制。每刷新一帧,深度索引自动加 1,直到达到预设的最大深度值。

单个灰度跳变的深度展开 深度展开:Row=0 (白) → Col=3 (黑) 的波形序列 Phase 0 VSH +15V Phase 1 VSH +15V Phase 2 VSL -15V Phase 3 VSL -15V Phase 4 VSS 0V ... Phase N 深度 Depth = 帧序号,从 0 递增到 N 每个 Phase 对应一帧的显示时间(通常 10~30ms) 总深度 N 越大,波形越精细,但刷新时间越长

4.4 行、列、深度的实际参数范围

不同厂商、不同型号的墨水屏驱动芯片,其 LUT 的三维尺寸各不相同。以下是常见规格:

常见驱动芯片 LUT 尺寸对比
驱动芯片 行数 (起始灰度) 列数 (目标灰度) 深度 (帧数) 灰度等级
SSD1608 (4灰阶) 4 4 16~32 4
SSD1675A (16灰阶) 16 16 32~64 16
IT8951 (16灰阶) 16 16 24~48 16
UC8151 (4灰阶) 4 4 20~30 4
注意: 深度值并非越大越好。深度过大会导致刷新时间过长(例如 32 帧 × 20ms = 640ms),影响用户体验。深度过小则可能导致粒子迁移不充分,出现残影或对比度不足。实际开发中需要在 刷新速度 和 显示质量 之间取得平衡。

4.5 LUT 在内存中的存储布局

在驱动芯片的寄存器或固件中,LUT 通常以 一维数组 的形式连续存储。访问时通过公式计算偏移量:

// 假设 LUT 总大小为 Row * Col * Depth
// 访问 LUT[row][col][depth] 的偏移量计算:
offset = (row * Col + col) * Depth + depth

// 示例:访问第 2 行、第 3 列、第 5 帧
// 假设 Col=4, Depth=16
offset = (2 * 4 + 3) * 16 + 5 = (8 + 3) * 16 + 5 = 11 * 16 + 5 = 181

这种布局方式要求驱动开发者在修改 LUT 时,必须清楚知道每个字节对应的 (Row, Col, Depth) 三元组,否则极易写错波形数据。

4.6 小结:LUT 数据结构的核心要点

  • 行(Row):起始灰度,取值范围 0 ~ (GrayLevel-1)。
  • 列(Column):目标灰度,取值范围 0 ~ (GrayLevel-1)。
  • 深度(Depth):帧序号,取值范围 0 ~ (MaxPhase-1),决定波形的时序长度。
  • 存储顺序:通常按行优先(Row-major)排列,每个 (Row, Col) 内部按深度连续存储。
  • 电压值:每个单元格存储一个电压编码,常见值包括 VSS(0V)、VSH(+15V)、VSL(-15V)、VGH(+22V) 等。