LCD顯示異常分析——撕裂(tear effect)【轉】

来源:https://www.cnblogs.com/linhaostudy/archive/2018/09/03/9581809.html
-Advertisement-
Play Games

轉自:[LCD顯示異常分析——撕裂(tear effect) ](https://blog.csdn.net/hexiaolong2009/article/details/79319512) 概述 在上一篇《 "LCD顯示異常分析——開機閃現花屏" 》中,我們一起分析了開機花屏的問題,在這一篇中,我 ...


轉自:LCD顯示異常分析——撕裂(tear effect)

概述

在上一篇《LCD顯示異常分析——開機閃現花屏》中,我們一起分析了開機花屏的問題,在這一篇中,我將對LCD撕裂(tear effect)問題進行詳細分析,以及給出這類問題的常用解決方法。

本文適用範圍:

  • 對象:LCD驅動調試人員
  • 硬體:帶GRAM的LCD (如SPI/MCU/DSI CMD屏)
  • 軟體:所有嵌入式操作系統

現象

首先貼一張動態圖,讓大家能直觀的感受撕裂形成的過程:

image

分析

從上面的動態圖我們可以看到,在第二幀出現了新舊畫面各顯示一部分的現象,該現象即為撕裂,英文又叫tear effect。tear effect的根本原因是對GRAM的讀、寫速度不一致,導致在一幀之內,GRAM的讀指針(R)與寫指針(W)發生了重疊導致。

這個現象其實包含2個信息:

  1. W和R指針重疊了
  2. 指針重疊後的畫面在屏上靜止不動保持了整整1幀的時間(60fps的話就是16.7ms),這個時間是足以被人眼察覺到的

有經驗的開發人員都知道,出現這類問題往往都是因為有個2倍關係沒有調整好。何為“2倍關係”?即必須保證W:R > 1:2(這裡的W、R都指的是速率),否則勢必會出現撕裂的現象(如上面的W:R=1:3)。

理想情況

為什麼是2倍?請看下圖(W:R=1:2):

image

因為W < R,所以R指針跑在前面,因此讀出來的數據都是舊數據,屏幕第1幀顯示的還是上一幀的圖像,直到第2幀才將GRAM中的圖像完整的顯示出來。如果R再稍微快那麼一點,那麼在第2幀R指針就又會趕上W指針,這樣就會再次出現tear effect現象。所以W:R=1:2是撕裂發生的臨界值。

同理,那如果對於W > R的情況,是否也存在這個2倍關係?

回答這個問題前,我們先來看看下麵這兩幅圖:

image

圖1 (W:R=3:1)

image

圖2 (W:R=2:1)

從上面的圖中我們可以看到,對於W > R這中情況,確實也存在2倍關係。但是這種由於W > R而造成的撕裂現象一般是不可能發生的,因為大部分顯示驅動都是等到TE信號到來時才開始刷圖的,所以只要R指針還沒有掃描完當前幀的畫面,W指針是不可能立即去GRAM中刷畫面“B”的,一定會等到畫面“A”徹底顯示完畢後才開始繪製,所以上面的圖1、圖2兩種情況都不會發生。

因此為了防止撕裂的發生,只需要保證W > R/2 (這裡指速率)即可。

實際情況

前面分析的現象都是基於一個前提條件的,那就是:

指針W和R都是基於同一個時間點、同一個GRAM起始位置開始掃描的

只要上面的2點有一個不滿足,那麼2倍關係就不成立了。

因為對於這類帶GRAM的LCD ,驅動軟體或LCD Controller硬體都會做成等待TE信號到來時才會開始刷圖,所以對於第1點這裡不做詳細描述,只針對第2點進行講解。在LCD的實際顯示過程中,其實是有消隱區的(即Porch區域),而且一般屏廠會將TE信號預設放在內部DriverIC的VSYNC階段送出,這就導致了指針W無法滿足和R從同一GRAM起始位置開始掃描,具體過程如下圖:

image

從上圖我們可以看到,雖然W:R=2:3,滿足W > R/2的條件,但是由於它們不是從GRAM的同一起始位置開始掃描,所以仍然會出現W和R指針碰頭的情況,最終導致撕裂的現象。

那麼對於上述這種情況,有什麼方法可以解決嗎?是時候召喚出TE Output Line了!

TE Output Line

LCD DriverIC廠商還是很貼心的,為瞭解決上述問題,工程師們專門預留了一個TE Output Line寄存器,該寄存器的作用就是用來調節TE信號(又叫FMARK信號)的輸出位置。預設情況下,該寄存器的值為0,即DriverIC內部刷新時的VSYNC期間。那麼對於上述情況,我們只需要將TE Output Line的值設置為VSYNC+VBP的值即可。

  • 對於主控端,Vporch往往由VSYNC+VBP+VFP構成;
  • 對於LCD DriverIC廠商,他們定義的VBP其實往往是包含VSYNC的;

如下圖:

image

結論

撕裂的本質:

  1. 在1幀時間內,W和R重疊了
  2. 撕裂的畫面停留了1幀的時間,被人眼所覺察

解決方法:

  • W > R/2 (這裡指速率)
  • 開啟TE同步信號
  • 調整TE Output Line

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 給定兩個以字元串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字元串形式。 示例 1: 示例 2: 說明: 從題目要求來看,應該是讓我們實現一個比較省記憶體的大數乘法,先分享幾個我在discuss中發現的不太切合題意的解法: 這個可以說是個毫無技術 ...
  • 一、概念和基本註解 從JDK1.5開始,引入了源代碼中的註解這一機制。註解使得 Java 源代碼中不但可以包含功能性的實現代碼,還可以包含元數據。 那麼什麼是元數據呢?所謂元數據,就是描述數據的數據。比如說一張圖片,圖片內容是它的主體數據,那麼像圖片的創建時間、修改時間、創建者等等這些數據,就是這張 ...
  • 一: 問題提出 現如今大家寫的netcore程式大多部署在linux平臺上,而且服務程式裡面可能會做各種複雜的操作,涉及到多數據源(mysql,redis,kafka)。成功部署成後臺 進程之後,你以為這樣就萬事大吉了? 卻不知當你更新代碼時,暴力的kill掉這個進程導致你的業務出現數據不一致,業務 ...
  • asp.net core mvc 管道之中間件 http請求處理管道通過註冊中間件來實現各種功能,松耦合併且很靈活 此文簡單介紹asp.net core mvc中間件的註冊以及運行過程 通過理解中間件,將asp.net core mvc分解,以便更好地學習 中間件寫法 先看一個簡單的中間件,next ...
  • 一看標題肯定會聯想到使用動態編織的方式實現AOP編程,不過這不是作者本文討論的重點。 本文討論另外三種在netcore中可實現的方式,Filter(過濾器,嚴格意義上它算是AOP方式),DynamicProxy(動態代理方式,JAVA上早已不是新鮮事),Middleware(netcore中間件所實 ...
  • 讀取Word文檔,並將文本轉成html標簽,後面發現,經常有帶上下角標的內容,於是一併處理了。 核心在於對XWPFRun對象中Subscript屬性的處理。 Word文檔: 輸出: <p>測試<sup>上</sup><sub>下</sub>ok。</p><p>CO<sub>2</sub></p><p ...
  • 概述 在上面一篇 Windows Community Toolkit 4.0 - DataGrid - Part01 中,我們針對 DataGrid 控制項的 CollectionView 部分做了詳細分享。而在本篇,我們會對 Utilities 文件夾中的類做詳細的分享。 下麵是 Windows C ...
  • EFCore中沒有DbFirst了吧,應該都是Code First 先說說第一種,Code First From Database(DbFirst)資料庫先行,這種方式就要命令行了...(特不喜歡命令行。。): 1.建好項目後通過 NuGet 安裝所需依賴性: 可以右鍵項目通過管理NuGet程式包的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...