墨水屏驱动详解 (SSD1683)

SSD1683旧版本引脚、400×300缓冲、VCOM、LUT和不同刷新流程记录。

版本与验证范围

2026年7月历史项目记录;未在本轮重新编译、烧录或硬件测量,芯片/引脚/时序/功耗不能代替当前工程。

日期:2026-07-15

硬件连接

信号 GPIO 说明
MOSI/DIN 11 SPI 数据(硬编码在驱动内)
SCLK 12 SPI 时钟(硬编码)
CS 18 片选(硬件自动管理)
DC 17 命令/数据选择
RST 16 硬件复位
BUSY 7 忙检测(高电平=忙)

SPI: Mode 0, 4 MHz(保守值,杜邦线可靠), SPI2_HOST

像素与帧缓冲

  • 分辨率:400×300
  • Frame Buffer:15000 bytes (400×300÷8)
  • 像素约定:0xFF = 白, 0x00 = 黑
  • MSB = 最左像素

VCOM 管理

  • 默认值:0x50 (-2.0V),非 Waveshare 标准值
  • 存放在 NVS ("epd" namespace, key "vcom")
  • BLE 支持运行时读写:set_vcom、get_vcom、save_vcom、vcom_scan
  • 启动时从 NVS 加载,无记录则用编译期默认

LUT 策略

默认:External LUT (use_otp_lut = false)

实际调试发现 OTP LUT 的 ~500ms 刷新有问题,改用 Waveshare V2 外部 LUT

刷新方式 0x22 值 耗时 残影 用途
全刷 (Ext LUT) 0xF7 ~2.9s 无 页面切换、残影清理
快刷 0xC7 ~1.7s 少 新闻翻页、天气更新
局刷 0xFF ~440ms 有 小区域增量更新

快刷技巧:写 0x6E 到温度寄存器 0x1A 让 SSD1683 用更快内部波形

局部刷新流程(修复后)

text
1. HW Reset (RST LOW→HIGH)
2. Border Waveform = 0x80
3. 禁用 Clock/Analog
4. 设置局部窗口 (set_ram_window)
5. 写旧内容到 0x26 (RED RAM)    ← 关键:修复前没做这步导致重叠
6. 写新内容到 0x24 (BW RAM)
7. 触发局刷 (0xFF)
8. 恢复正常设置

残影管理

  • GHOST_CLEAN_INTERVAL:每 6 次快刷后做一次全刷清除
  • 局部刷新时每 3 次做一次全刷清除

驱动 API

c
ssd1683_init(&config)        // 16 步初始化序列
ssd1683_set_frame_memory()   // 全帧写入 0x24
ssd1683_set_frame_memory_partial()  // 差分写入 0x24+0x26
ssd1683_refresh()            // 全刷 (0xF7)
ssd1683_refresh_fast()       // 快刷 (0xC7) + 温度技巧
ssd1683_refresh_fast_trigger()  // 快刷触发
ssd1683_clear()              // 全白 + 全刷

关键词

#SSD1683 #SPI #VCOM #LUT #局刷 #快刷 #残影

相关

项目总览 开发历史与排障


所属索引 待补充 · 主页 待补充

归档索引 待补充

来源与关联索引
来源
个人知识库
原笔记
05-历史归档/旧项目/墨水屏原始记录/墨水屏驱动详解.md
资料性质
历史记录。原文的版本、来源与验证边界继续保留。
关联笔记 5
返回资料归档

想去哪里?

22 个入口

首页作品作品展厅全部项目文章总览文件夹标签资料归档关于认识 Lan探索路线工具与工作台最近在做InkFeed · 4.2 英寸电子纸信息终端VIBRATION · 柔性振动检测与采集链路TRACE · 航向保持与灰度循迹小车STRIDE · 八自由度四足机器人SCOPE · 固件日志浏览器温度为什么被 AI 改了?FIFO 有半帧,就一定是故障吗?直线守航向,弧线再看黑线。

Tab 选择入口 · Enter 打开 · Esc 关闭