0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

恩智浦MCU加油站 来源:恩智浦MCU加油站 2026-02-09 09:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在当今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。

2b24237a-022d-11f1-90a1-92fbcf53809c.png

图1 Ping-pong Buffer在片外RAM

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

2b81591e-022d-11f1-90a1-92fbcf53809c.png

图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,并且防止撕裂的产生?

2bdfe970-022d-11f1-90a1-92fbcf53809c.png

图3 Single Buffer在OCRAM

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

2c3a4dac-022d-11f1-90a1-92fbcf53809c.png

图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。

2c93017c-022d-11f1-90a1-92fbcf53809c.png

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

2ceba598-022d-11f1-90a1-92fbcf53809c.png

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

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

2d4d2ca0-022d-11f1-90a1-92fbcf53809c.png

图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中使用该功能。

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

    关注

    5209

    文章

    20668

    浏览量

    337135
  • SDRAM
    +关注

    关注

    7

    文章

    458

    浏览量

    57849
  • lcd
    lcd
    +关注

    关注

    36

    文章

    4632

    浏览量

    178011
  • RGB
    RGB
    +关注

    关注

    4

    文章

    836

    浏览量

    62235

原文标题:SDRAM价格涨飞天?GUI xTurbo 让你可以只用片内单缓冲驱动RGB LCD

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    GUI Guider全新优化方案GUI xTurbo-VeloRender初体验:基于i.MX RT平台的LVGL渲染能力突破

    引言 在嵌入式GUI开发领域,图形界面的渲染性能直接决定了用户体验的流畅度与产品竞争力。针对i.MX RT系列的开发需求,恩智浦在2025年隆重推出全新的性能优化方案 - GUI xTurbo技术
    的头像 发表于 07-10 09:21 4017次阅读
    <b class='flag-5'>GUI</b> Guider全新优化方案<b class='flag-5'>GUI</b> <b class='flag-5'>xTurbo</b>-VeloRender初体验:基于i.MX RT平台的LVGL渲染能力突破

    DLP4710LC只用UV光源,demo可以进行100%驱动么,该如何接?

    只用UV光源,demo可以进行100%驱动么,该如何接,demo上是rgb三颗光源。 另外,只用uv光源的话,固件应该用哪个,有链接么
    发表于 02-21 17:00

    请给一个430驱动蜂鸣器的程序,只用它叫就可以

    请给一个430驱动蜂鸣器的程序,只用它叫就可以了!!!!!!!!!
    发表于 11-25 10:46

    移植gui替换lcd驱动怎么实现?

    是否就是我要编写一个lcd驱动驱动的函数 要和原来的函数实现一模一样的功能最好连参数都一样 (如果不一样就要修改gui的调用以及gui的声明
    发表于 08-26 08:00

    iMXRT1064的TFT RGB LCD ESD问题如何处理?

    时,LCD 变为白色并保持该状态。如果 LCDLCD 连接器上取下并再次插入,则无需重置电路板,ESD 问题就会消失,我们可以看到 GUI
    发表于 04-18 06:29

    基于嵌入式Linux的TFT LCD IP及驱动的设计

    基于嵌入式Linux 的TFT LCD IP 及驱动的设计:Nios II 处理器在SDRAM 中开辟帧缓冲(Frame buffer),可以
    发表于 03-18 17:48 4次下载

    大型LCD显示缓冲驱动

    大型LCD显示缓冲驱动
    发表于 09-15 11:54 788次阅读
    大型<b class='flag-5'>LCD</b>显示<b class='flag-5'>缓冲</b><b class='flag-5'>驱动</b>器

    RGB LED背光驱动电路实例

    美国国家半导体公司的LP5520 是一款针对小型尺寸的LCD RGB LED 背光驱动芯片。它可以直接驱动4 组~ 5组
    发表于 05-20 11:09 396次下载
    <b class='flag-5'>RGB</b> LED背光<b class='flag-5'>驱动</b>电路实例

    AD7760:24位、2.5 MSPS、100 dB,Σ-Δ ADC,内置缓冲 数据手册

    AD7760:24位、2.5 MSPS、100 dB,Σ-Δ ADC,内置缓冲 数据手册
    发表于 03-20 17:19 11次下载
    AD7760:24位、2.5 MSPS、100 dB,Σ-Δ ADC,内置<b class='flag-5'>片</b><b class='flag-5'>内</b><b class='flag-5'>缓冲</b> 数据手册

    LCD MCU模式和RGB模式

    应用比较多的就是MUC模式和RGB模式,区别有以下几点:1.MCU接口:会解码命令,由timing generator产生时序信号,驱动COM和SEG驱器。RGB接口:在写LCD re
    发表于 10-28 09:50 19次下载
    <b class='flag-5'>LCD</b> MCU模式和<b class='flag-5'>RGB</b>模式

    缓冲与双缓冲有哪些不同之处呢

    一般用OpenGL绘图都是用双缓冲缓冲一般只用于显示单独的一副非动态的图像。
    的头像 发表于 02-02 08:48 6081次阅读

    缓冲方案驱动大型LCD

    本应用笔记介绍了如何缓冲LCD驱动器(如MAX7231系列)的三层背板驱动输出,以提高容性驱动能力。这使得大型
    的头像 发表于 02-09 11:54 1659次阅读
    <b class='flag-5'>缓冲</b>方案<b class='flag-5'>驱动</b>大型<b class='flag-5'>LCD</b>

    TFT-LCD电容触摸屏模块(RGB接口)驱动时序设计

    上两篇已经总结和分享了RGB接口TFT-LCD触摸屏的相关内容。本篇使用Verilog语言实现RGB驱动时序。
    的头像 发表于 05-25 12:47 5516次阅读
    TFT-<b class='flag-5'>LCD</b>电容触摸屏模块(<b class='flag-5'>RGB</b>接口)<b class='flag-5'>驱动</b>时序设计

    GD32470i-LVGL-WSVGA-LCD GUI解决方案

    GD32F470i-LVGL-WSVGA-LCD Demo Suites是MCU驱动高分辨率LCD(RGB接口,1024*600 WSVGA)进行设计
    的头像 发表于 09-08 13:55 2430次阅读
    GD32470i-LVGL-WSVGA-<b class='flag-5'>LCD</b> <b class='flag-5'>GUI</b>解决方案

    GUI GUIDER中如何启用eSingle Buffer

    在嵌入式 GUI 开发中,“跑不快”“卡顿”“撕裂”几乎是所有工程师都踩过的坑。尤其是在 RGB LCD 这种持续扫描的显示接口下,当显存刷新与 LCD 扫描不同步时,画面撕裂几乎不可
    的头像 发表于 02-09 09:43 886次阅读
    在<b class='flag-5'>GUI</b> GUIDER中如何启用eSingle Buffer