首页 > 评测 > PSoC6评测之三:享受阅读——EInk模块驱动原理与评测
PSoC6评测之三:享受阅读——EInk模块驱动原理与评测
- [导读]
- 此次PSoC6先锋套件的评测,其实还了作者自己的一个心愿,那就是对EInk屏幕的原理与驱动代码进行一个深入的分析.作为9年前就开始使用电纸书进行阅读的本文作者,一直没有抽出时间与精力来对它的原理进行了解确实有点小小遗憾.希望本文能给有需要的朋友能带来一点知识和阅读的兴趣.Happy Reading and Happy Coding!
图 4步更新
注意因为这样的更新方式,所以每次显示都需要保持上次的内容以作取反之用.2步更新法就是省去了取反的过程,部分更新法则是直接显示新内容.本文所使用的显示器是264x176的点阵,无灰阶,则每个Frame的显存为:
264 * 176 = 46464 Bits / 8 = 5808 Bytes
EPD更新显示内容方式的介绍应该是建立在存储在同一内存的两帧数据,之前显示内容变更为新的显示内容(Previous Display-> New Dispaly)之上.所以需要两个Frame,那么显存就是10KB以上了,另外驱动的过程中也需要19KB以上的中间缓存,为什么需要两个Frame呢?故此在选用主控芯片时需要考虑到显存的尺寸.
EPD驱动流程图如下:
图 流程图
EPD更新周期内的信号控制图:
图 信号波形
使用PSoC 6驱动EInk
如上文所述,EInk的特点是保持显示内容不需要电源,但是更新显示内容时,不停地需要处理器来做控制与查询.这种任务比较适合于低功耗的内核,比如PSoC 6中的Cortex M0+内核,此例中Cortex M4没有用武之处,所以干脆就没有使能.
顶层设计图:
图 顶层设计
包括SPI口为通信口,定时器用来产生1ms的定时Tick,其余几个IO口为通用IO.
图 SPI模组配置
图 更新定时器配置
这个定时器的主要作用是提供1ms的Tick计时,实际上任何可以提供1ms的tick的定时器都可以用,比如内核中的SysTick.这里只是为了展示如何配制通用定时器.
至于要显示的资源与内容,因为该显示器的点阵与内存的对应是逐行对应,所以取模时使用横行取模,字节正序即可. CYPRESS提供的EINK例程中支持两种大小字体,分别是CY_EINK_FONT_8X12BLACK和CY_EINK_FONT_16X16BLACK.当然更高阶的玩家可以使用取模工具支持更多字体开发.
图 像素与显存对应图
取模软件与LCD/OLED的取模软件无异,本文也不赘述.
初始化代码:
void Pv_EINK_Init(void)
{
CY_EINK_EnableIO;
CY_EINK_BorderLow;
EINK_VccOff;
/* Initialize the PSoC SPI */
Cy_EINK_InitSPI();
/* Pull the chip select, reset and discharge pins to LOW */
CY_EINK_CsLow;
CY_EINK_RstLow;
CY_EINK_DischargeLow;
/* Initialize the E-INK display Timer */
Cy_EINK_TimerInit();
}
更新代码:
void Cy_EINK_ShowFrame(uint8_t* prevFrame, uint8_t* newFrame,
cy_eink_update_t updateType, bool powerCycle)
{
/* If power cycle operation requested, turn on E-INK power */
if (powerCycle)
{
Cy_EINK_Power(true);
}
/* Partial update stage */
if (updateType == CY_EINK_PARTIAL)
{
/* Update the display with changes from previous frame */
Pv_EINK_PartialStageHandler(prevFrame, newFrame);
}
/* Full update stages */
else if ((updateType == CY_EINK_FULL_4STAGE) ||
(updateType == CY_EINK_FULL_2STAGE))
{
/* Stage 1: update the display with the inverted version of the previous
frame */
Pv_EINK_FullStageHandler(prevFrame, PV_EINK_STAGE1);
/* Additional stages that reduce ghosting for a 4 stage full update */
if (updateType == CY_EINK_FULL_4STAGE)
{
/* Stage 2: update the display with an all white frame */
- 本文系21ic原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
-
人均百万?英伟达中国员工收入曝光! 2024-08-29
-
《黑神话:悟空》玩家硬盘升级攻略:提升游戏体验,畅享3A大作 2024-08-29
-
数睿数据参加《系统与软件工程 低代码开发平台通用技术要求》国家标准编制 2024-08-29
- NRF52810蓝牙数字耳机找人定制
预算:¥30005天前
- 125KW模块式PCS软硬件外包开发
预算:¥1100000015小时前
- 12V汽车启动电源项目BMS设计
预算:¥50000023小时前
- 数据可视化软件 开发
预算:¥5000023小时前
- PLC项目调试修改
预算:¥100001天前
- 起动电机控制器开发
预算:¥1100001天前