墨水屏驱动入门
网上淘了个十几块钱的4.2寸墨水屏,如下图。可惜太抢手了,数量有限。

自带的驱动板如下。

众所周知,墨水屏驱动先驱是微雪,4.2寸墨水屏驱动版资料地址:https://www.waveshare.net/wiki/4.2inch_e-Paper_Module_Manual,下载完程序,选择4in2b V2_test工程,如果你用的不是STM32就需要移植drv_config,主要是SPI发送、IO输入输出和延时接口,IO输入用于读取墨水屏的BUSY引脚,因为墨水屏刷屏实在是太慢了。

移植完驱动接口之后按照微雪提供的原理图分析一下驱动板的走线。

对照实物接口,只要随便找到地线跟旁边两个VCC,就可以确定其他的IO了。

比如第9脚是BUSY,用万用表指针的蜂鸣档划一下主控CC2510的引脚,听见响就可以确定BUSY脚接到的位置了。同样的原理测一下其他引脚连的位置。

数字表示离直角最近数的引脚数,例如CLK是左下角往右数第二个引脚,DC是左上角往下数第一个引脚。
最后是驱动效果。支持红黑色,默认清屏为白色。

同OLED一样,墨水屏也是一个像素一个位,写一个字节就是同时写8个像素,并且不能读只能写,所以需要改写点就需要程序记录已经写的点来做缓存。不过墨水屏有些支持局部刷新,有些不支持局部刷新,比如这个就不行,也就是每次刷屏必须写整张屏幕,这款屏幕的分辨率为400*300,除以8位一个字节也就是15K字节的缓存,对于红黑两种颜色就得30K的SRAM,因此小MCU根本没法做缓存,只能算好要显示的数据,一部分一部分一次整体刷屏,或者把外置FLASH当作缓存,先算好显示数据写到SPI FLASH,再从SPI FLASH读出来读一点发给屏幕再读一点发给屏幕,最终用少量的RAM就可以把整屏数据发给屏幕。而支持局部刷新的墨水屏就可以一部分一部分显示的,比较节省内存。另外还有支持黄色的墨水屏,黑白色是标配,红黄色是可选配置,不过就是贵,越大越贵。
墨水屏除了可以像OLED一样一个像素点一位,还支持灰度等级,也就是用多个比特位来显示一个像素,达到黑白之间的效果,例如浅灰、灰、深灰、浅红、深红等等。
除此之外,墨水屏刷屏速度很慢,跟SPI FLASH清空一样达到秒级别的延时,所以发完显示数据给屏幕之后,屏幕并没有刷新完,只是内部RAM接收完了,接下来还需要等很久让内部控制器完成屏幕的清除、显示,最后通过BUSY引脚告诉单片机刷屏完了,这时才可以再次刷屏。虽然刷屏慢,但是墨水屏可以断电显示,因此非常省电。
虽然如此,还是不要频繁刷屏、长期不用建议清空成白屏白面朝上放置。