日期: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
- 资料性质
- 历史记录。原文的版本、来源与验证边界继续保留。