LVGL 之部分 QSPI 屏要求刷新窗口 4bytes 对齐问题

关键字 :LVGLQSPIOLED

一、QSPI 屏刷新局部窗口

一般使用了 LVGL 后,QSPI 屏刷新的时候会仅刷新像素需要变化的局部窗口,画面有多处变化时会分为多个局部窗口来刷新,这种刷新通常需要 MCU 将需要刷新的局部窗口左上角和右下角坐标发给 QSPI LCD 的 Driver IC,接着再把这个局部窗口内的新像素数据发给 Driver IC。



图 1. 局部窗口刷新

 

二、问题描述

刷新局部窗口的范围坐标是通过 LVGL 底层计算得到的,理论上是在屏的任意区域,即坐标可能是任意值。但有些 QSPI OLED 屏的 Driver IC 要求局部窗口的坐标必须满足:

① x1 为 4 的整数倍
② (x2 + 1) 为 4 的整数倍

若不满足上述要求,则刷新的局部窗口会出现行偏移的错位现象,如下图所示。



图 2. 局部窗口刷新问题

针对该问题,屏厂的建议是通过刷整行来解决。整行刷新不仅只是改变局部窗口的坐标,还需要填充相应的像素数据,也会涉及到 LVGL 底层的修改。如果要修改 LVGL 底层的话,不如按照上面两个要求来修改,也不用增大很多刷新数据量。

 

三、解决方法

按照上述思路,我们来试着更改 LVGL 底层刷新部分,使每次刷新的局部窗口坐标满足 Driver IC 的要求。(以 NXP LPC5536 EVK 以及 SDK 例程 lpcxpresso55s36_lvgl_guider_bm 为例,使用的是 LVGL V8.3 版本)。

在 lvgl 文件夹下 lv_refr.c 中可以看到 LVGL 刷新相关的函数,局部窗口刷新是在函数 refr_area() 中,我们在该函数中做如下修改,主要目的是把局部窗口向左右扩展大一点,使 x1 为 4 的倍数(x2 + 1) 为 4 的倍数

 





图 3. 增加局部窗口坐标限制

修改后现象如下。有些屏可能要求的不是 4 的整数倍,而是必须为偶数 (可看做 2 的整数倍),也可用类似的方式修改。



图 4. 修改后

  

四、参考资料

(1)LPC5536 Reference Manual,可在 NXP 官网下载,网址如下:

https://www.nxp.com/webapp/sps/download/license.jsp?colCode=LPC553xRM

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论