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

圖1 Ping-pong Buffer在片外RAM
Multi Buffer:在Ping-pong Buffer的基礎上。Buffer A作為顯示Buffer,Buffer B和Buffer C都作為離屏buffer。

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

圖3 Single Buffer在OCRAM
先從TFT LCD顯示器本身的畫面掃描刷新原理說起。TFT LCD的圖像是由像素點組成的,這些像素點組成陣列。整個屏幕刷新一遍稱為一個“幀”。圖像的每一幀從屏幕的第一行開始刷新,然后依次向下刷新每一行。每一行的像素會在一個很短的時間內被更新。

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

圖5 當eLCDIF刷新到240行后,把第一個圖標寫入RAM

圖6 當eLCDIF刷新到480行后,把第二個圖標寫入RAM
我們基于LVGL實現了這個思路。在RT1060-EVK上,使用800 x 480分辨率的RGB LCD。我們把Single Buffer放在片內的768KB OCRAM上。并且基于針對IMXRT的專門優化,在LVGL9 Benchmark的測試如圖7:

圖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中使用該功能。
-
嵌入式
+關注
關注
5198文章
20442瀏覽量
333967 -
SDRAM
+關注
關注
7文章
457瀏覽量
57680 -
lcd
+關注
關注
36文章
4615瀏覽量
177200 -
RGB
+關注
關注
4文章
831瀏覽量
61936
原文標題:SDRAM價格漲飛天?GUI xTurbo 讓你可以只用片內單緩沖驅動RGB LCD
文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
GUI Guider全新優化方案GUI xTurbo-VeloRender初體驗:基于i.MX RT平臺的LVGL渲染能力突破
DLP4710LC只用UV光源,demo可以進行100%驅動么,該如何接?
移植gui替換lcd驅動怎么實現?
iMXRT1064的TFT RGB LCD ESD問題如何處理?
基于嵌入式Linux的TFT LCD IP及驅動的設計
RGB LED背光驅動電路實例
AD7760:24位、2.5 MSPS、100 dB,Σ-Δ ADC,內置片內緩沖 數據手冊
LCD MCU模式和RGB模式
GD32470i-LVGL-WSVGA-LCD GUI解決方案
在GUI GUIDER中如何啟用eSingle Buffer
GUI xTurbo讓你可以只用片內單緩沖驅動RGB LCD
評論