GUI xTurbo让你可以只用片内单缓冲驱动RGB LCD

描述

在当今MCU嵌入式系统中,需要高端GUI显示的场景越来越多。当产品中使用较高分辨率的RGB LCD时,传统的Ping-pong buffer方案使得对RAM空间的要求非常高。这时MCU 片内RAM已经不够用,所以往往需要再搭配使用一个片外的RAM。不管是外挂PSRAM还是SDRAM,都会让产品BOM高不少。尤其是当今SDRAM的价格已经涨飞天,如果能只使用单缓冲放在片内RAM,那实在是太棒了!我们开发了GUI xTurbo - eSingle Buffer,让你抛弃SDRAM(或PSRAM),进一步降低BOM。在嵌入式系统中,图形界面(GUI)的流畅度往往决定了产品的使用体验。然而,许多开发者在实际项目中都会遇到一个常见问题:GUI 刷新速度看起来很慢,甚至出现明显的画面撕裂。造成这些现象的根本原因,通常并不是 MCU 性能不足,而是 LCD 与显存刷新机制之间的同步问题。

为了解决上述痛点,GUI xTurbo 提出了一个基于单缓冲的全新优化思路,在避免撕裂的同时进一步降低资源占用,如下图。传统方案通常需要使用Ping-pong Buffer(双缓冲)如图1,或者 Multi Buffer(一般是三缓冲)如图2。从而在LCD完成当前帧刷新后再输出下一帧。

Ping-pong Buffer : Buffer A 作为显示Buffer,Buffer B 作为离屏Buffer。当Buffer B 渲染完成,并且Buffer A已经显示完成之后。显示Buffer切到Buffer B,离屏Buffer切到Buffer A。

SDRAM

图1  Ping-pong Buffer 在片外RAM

Multi Buffer: 在Ping-pong Buffer的基础上。Buffer A 作为显示Buffer,Buffer B 和Buffer C都作为离屏buffer。

SDRAM

图2  Multi Buffer 在片外RAM

因此常规应用当中,MCU需要外扩一个片外RAM 来存放帧缓冲。例如RGB565的800 x 480的屏,一个full-size buffer需要的RAM大小为800 x 480 x 2 = 768000 Bytes。所以,如果使用双缓冲技术,则需要1.5 Mbytes大小的RAM。这时通常在IMXRT系列(如RT1040或RT1060)上可以外扩PSRAM或SDRAM。

那么为了降低BOM成本,能否仅仅使用单个Buffer放在片内的RAM上如图3,并且防止撕裂的产生?

SDRAM

图3  Single Buffer 在OCRAM

先从TFT LCD显示器本身的画面扫描刷新原理说起。TFT LCD的图像是由像素点组成的,这些像素点组成阵列。整个屏幕刷新一遍称为一个“帧”。图像的每一帧从屏幕的第一行开始刷新,然后依次向下刷新每一行。每一行的像素会在一个很短的时间内被更新。

SDRAM

图4  在800 x 480分辨率的屏幕上显示2个“NXP”图标

传统方案使用ping-pong buffer防止撕裂,是让画面的显示和渲染分别在不同的帧buffer上进行。显示则是eLCDIF把RAM上的数据发送到LCD上,而渲染则是MCU往RAM写数据。所以即使只使用Single Buffer,只要数据在当前像素刷新前写入到RAM,就可以避免撕裂。

比如,在当前画面中我们需要更新2个”NXP”的图标,分别在0~240行和240行~480行。当eLCDIF刷新到240行后,把第一个图标写入RAM,如图5。随后当eLCDIF刷新到480行后,再把第二个图标写入RAM,如图6。

SDRAM

图5  当eLCDIF刷新到240行后,把第一个图标写入RAM

SDRAM

图6  当eLCDIF刷新到480行后,把第二个图标写入RAM

我们基于LVGL实现了这个思路。在RT1060-EVK上,使用800 x 480分辨率的RGB LCD。我们把Single Buffer放在片内的768KB OCRAM上。并且基于针对IMXRT的专门优化,在LVGL9 Benchmark的测试如图7:

SDRAM

图7  eSingle Buffer性能对比Ping-pong Buffer

通过图7,基于同样的代码优化,可以看到eSingle Buffer的渲染速度强于Ping-pong Buffer。得益于Single Buffer放置在片内OCRAM,而OCRAM读写性能强于SDRAM。 并且不再需要像Ping-pong Buffer一样,等待当前帧显示完。并且在GUI-Guider-1.10.0中已经集成该功能。

传统 GUI 系统为了避免 RGB LCD 刷新带来的撕裂问题,普遍依赖双缓冲或多缓冲机制。然而这些方案虽然有效,却不可避免地带来更高的显存占用与带宽压力。GUI xTurbo 的单缓冲优化方案,则从刷新机制本身入手,以更轻量的方式实现流畅显示,不仅降低了资源需求,也为中低端 MCU 的 GUI 性能释放了更大潜力。

随着显示分辨率不断提升、用户对界面流畅度的要求日益增长,如何在有限硬件条件下实现更高效的 GUI,将成为越来越重要的课题。基于单缓冲的创新方法,为业界提供了一条新的思路,也为未来嵌入式显示技术的发展打开了更多可能性。

下篇会介绍如何在GUI-Guider中使用该功能。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分