一、QSPI 屏刷新局部窗口
一般使用了 LVGL 后,QSPI 屏刷新的时候会仅刷新像素需要变化的局部窗口,画面有多处变化时会分为多个局部窗口来刷新,这种刷新通常需要 MCU 将需要刷新的局部窗口左上角和右下角坐标发给 QSPI LCD 的 Driver IC,接着再把这个局部窗口内的新像素数据发给 Driver IC。
图 1. 局部窗口刷新
二、问题描述
刷新局部窗口的范围坐标是通过 LVGL 底层计算得到的,理论上是在屏的任意区域,即坐标可能是任意值。但有些 QSPI OLED 屏的 Driver IC 要求局部窗口的坐标必须满足:
若不满足上述要求,则刷新的局部窗口会出现行偏移的错位现象,如下图所示。
图 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
评论