[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-105462":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":16,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":9,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},105462,"SmoothEPD","PinkiePie1\u002FSmoothEPD","PinkiePie1","47FPS EPD display driver, for EPD modules with SPI interface",null,"C",65,13,52,0,8,24,57.04,false,"master",true,[],"2026-11-01 00:17:19","# 用于SSD1681的高刷墨水屏驱动\n\n## 背景\n\n墨水屏具有非易失性和高反射率的特点，显示效果柔和，常见于各种电子阅读器上。但其更新速率较慢，小型墨水屏通常需要几秒钟才能刷新一次。在业界，高刷墨水屏已经出现了一段时间并推向了市场。\n\n电子爱好者们围绕墨水屏同样也做了大量的工作，如bitbank针对并口和串口墨水屏都写了很棒的驱动，并对串口墨水屏的ram占用进行了特别优化。\n\n和光于26年中左右展示了DIY60Hz墨水屏显示屏的过程。核心思路为只更新变动的像素，从而实现了刷新率高的同时还具有良好的显示效果。\n和光于随后又在该基础上发布了paperboy项目，实现了60Hz的gameboy模拟器。该项目发布后，同款墨水屏开发套件（已经停产）的二手价格出现了大幅上涨。\n\n到那时为止，爱好者们能接触到的高刷墨水屏都是基于并口墨水屏的，其驱动芯片会暴露出行和列，可以很好地实现只变动需要变动的像素这一驱动方式。\n但常见的小型墨水屏通常为串口驱动，其驱动方式更类似于小型OLED等屏幕，需要写入显示缓存并使用更新指令，难以实现高刷。\n\n基于和光的驱动方式，kuslota于26年十月初发布了inkboy项目，成功实现了在1.54寸小型串口墨水屏上运行gameboy模拟器，并达成了30Hz的刷新率和四色灰度显示。\n此类墨水屏成本仅10-30元人民币，价格亲民且有多家供应商提供，货源充足。kuslota同时也实现了四灰阶高刷。\n\n本项目在此基础上进行。\n\n## 项目说明\n\n本项目基于inkboy的思路，在CH32H417和CH32V303上实现了47Hz的墨水屏驱动，其具有和常见墨水屏厂商驱动一样（空气引号）较好（空气引号）的可移植性。\n\n使用的墨水屏为SSD1681主控的1.54寸方形200x200墨水屏。理论上其他SPI屏幕（比如常见的152x152的方形屏，296*128的2.9寸长条形屏幕等）也可使用。\n\n本项目包含两个显示例子，分别为0.01秒精度的秒表和2300粒子的流体模拟。CH32H417的大核负责计算显示内容，小核负责显示。显示驱动加上缓冲区的内存占用较高，\n对于一个5k字节的墨水屏，整体占用会达到40k左右。不少用于储存每个像素的驱动预算。本项目在单核的单片机上也可运行，秒表demo在CH32V303上实测也是完全可用的。\n\n驱动代码为vibe coded，但所有代码已经过人类阅读和清理。\n\n## 对墨水屏寿命的影响\n\ninkboy所使用的驱动方式适合每个像素会被持续点亮或熄灭的场景。\n每个像素点亮或熄灭的时间需要120ms以上，若像素的变化快于这个速度且亮暗不对称（比如长期熄灭的像素刚点亮20ms就又被熄灭了），就会对面板产生直流应力。\n长期直流应力将会导致电荷进入胶囊中并损坏面板，使得屏幕出现“鬼影”。短期应力可以通过常规刷新消除，因此隔一段时间需要进行一次常规刷新。\n\n可以通过对静应力进行计算和限制来缓解这个问题，例如像素若在熄灭之前只被点亮了20ms，那么熄灭的脉冲也只持续20ms而不是原来的120ms。\n实际测试下来这种方式可以支持非常长时间的快速刷新，由于墨水粒子存在惯性，拖影很重。\n\n本项目默认的做法是每隔一小段时间进行静应力的补偿，补偿只会往正在显示的方向进行（例如某像素在补偿时为黑色，且它本身存在白色的静应力，那么就多几帧黑色上去）。该方案补偿效果有限，但对显示效果影响极小。\n本项目同样提供会限制总静应力的版本，文件名为`epd_fast_net.c.bak`，只需删除其.bak后缀并替换掉`epd_fast.c`（例如将`epd_fast.c`重命名为`epd_fast.c.bak`）并重新编译即可。\n\n还有一种补偿方式是每隔一段时间对产生的应力进行一次统一补偿，但该补偿方式会完全破坏显示内容，补偿之后必须要进行常规刷新，意义不大。\n\n归根结底，墨水屏本不是为快刷而生，在操作快刷时需要对显示内容多加注意，多用缓慢运动的色块，减少快速变化的内容或者快速横向运动的细线等。\n\n## 编译与下载\n\nrepo中的源码为Mounriver Studio II项目，需要使用该IDE打开并进行编译和下载。由于目前WCH的新网页的Linux工具链下载链接已损坏（希望是暂时的），其他系统的交叉编译需要自行发挥。\n\n\n\n",2,"2026-10-31 04:26:52","CREATED_QUERY"]