【备注】: 刷新时间:刷新时间为实验测试数据,实际刷新时间会有误差,以实际效果为准。全局刷新过程中会有闪烁效果,这个是正常现象
功耗:功耗数据为实验测试数据,实际功耗由于驱动板的存在和实际使用情况的不同,会有一定误差,以实际效果为准
由于墨水屏只需要显示,这里将从机发,主机收的数据线(MISO)隐藏。
CS:从机片选,当CS为低电平的时候,芯片使能
DC:数据/命令控制引脚,当DC=0时写入命令;DC=1时写入数据
SCLK: SPI通信时钟
SDIN:SPI通信主机发送,从机接收
时序:CPHL=0, CPOL=0 (SPI0)
【备注】具体关于SPI通信的相关信息,可以自行网上搜索资料了解
上面了解到屏幕使用的是SPI通信,对于此屏幕可能有些客户会觉得奇怪为什么会有两个排线?
对于此问题的解释就是该屏幕是由4块小屏幕拼接而成变得大尺寸屏幕,因此对应着4路片选信号。
简略图如下:
我们把四部分分别命名为S2,M2,M1,S1,他们在程序中是依次进行传输的。
其中S2,M1是同样大小的分辨率:648*492,M2,S1是同样大小的分辨率:656*492.
他们的横竖加起来分辨率就是:1304*984
4个屏幕,那么他们就对应这4个SPI从机,所需要的控制线就是4个屏幕的总数:
一般SPI接口类显示屏具有以下4条控制线:MOSI,SCLK,CS,DC
然后需要最基本电源和复位:VCC,GND,RST
由于墨水屏的刷新特性,会一直闪烁,用于表示屏幕忙碌:BUSY
为了节省接口,其中4块屏幕共用VCC,GND,MOSI,SCLK;2块屏幕共用DC,RST
此时,重点来了,4块屏幕所需要电源线加控制线16条:
屏幕要进行工作,一般都会进行复位并初始化一些相关的寄存器,然后传输图像数据,最后打开显示。
这里主要讲述传输图像数据:
对于黑白或者红白,我们都可以认为是一张二阶灰度图片,那么一个字节的8个位就对应8个像素点,那么S2部分和M1部分:一行像素点有648点,将占用648/8 = 81个字节,有492列,总共占用81 * 492 = 39852个字节。同理M2部分与S1部分:一行像素点有656点,将占用656/8 = 82个字节,有492列,总共占用82 * 492 = 40344个字节。
12.48inch e-paper的寄存器0x13和0x10分别用于控制黑色图片数据和红色图片数据的传输。
他们的关系如下:
颜色 | 0x10 | 0x13 |
白色 | 0xff | 0x00 |
黑色 | 0x00 | 0x00 |
红色 | 0xff/0x00 | 0xff |
下面以黑白屏为例子:
- void EPD_12in48_Display(const UBYTE *Image)
- {
- int x,y;
- //S1 part 648*492
- EPD_S2_SendCommand(0x13);
- for(y = 0; y < 492; y++)
- for(x = 0; x < 81; x++) {
- EPD_S2_SendData(*(Image + (y*163 + x)));
- }
- //M2 part 656*492
- EPD_M2_SendCommand(0x13);
- for(y = 0; y < 492; y++)
- for(x = 81; x < 163; x++) {
- EPD_M2_SendData(*(Image+ (y*163) +x));
- }
- //S1 part 656*492
- EPD_S1_SendCommand(0x13);
- for(y = 492; y < 984; y++)
- for(x = 81; x < 163; x++) {
- EPD_S1_SendData(*(Image+ (y*163) +x));
- }
- //M1 part 648*492
- EPD_M1_SendCommand(0x13);
- for(y = 492; y < 984; y++)
- for(x = 0; x < 81; x++) {
- EPD_M1_SendData(*(Image+ (y*163) +x));
- }
- EPD_12in48_TurnOnDisplay();
- }