引入
我之前有兩方面的使用屏幕的案例。在做的模塊上需要用到屏幕來顯示的時候,全是SPI屏幕,並口屏幕和IIC屏幕。在研究了驅動(或者是繪圖函數更加合適)之后,我發現其實他們就是直接寫顯存,這個顯存在面板驅動芯片內部。在廢舊筆記本顯示器再利用的方面,當時經常是另買一個40pin的驅動版和面板接在一起,再把HDMI或者DP接在驅動板上就能廢物利用。
這次在我決定做comdex之后,我需要選一塊看得過去的屏幕跑LVGL。這個屏幕尺寸不能太大,分辨率不能太低,另外,價格不能太貴,畢竟是要做N個送人的。做咸魚蹲了一周之后我淘到一款18元的HX8369A控制的480*800的屏幕,並順帶研究下接口驅動。
本篇主要總結的是屏幕協議及其選擇。未來可能會有針對微控制器的主機接口用法分析。
顯示接口
本小結以幾個協議原文、幾個屏幕相關的數據手冊原文為敘述基礎,細節追溯帶有我個人應用傾向性。
參考文檔:
-
MIPI聯盟的DBI協議原文 MIPI Alliance Standard for Display Bus Interface v2.0 鏈接:https://share.weiyun.com/pgTKrIiV;
-
MIPI聯盟的DPI協議原文 MIPI Alliance Standard for Display Pixel Interface (DPI-2) 鏈接:https://share.weiyun.com/I7SXtSYQ;
概念
我們在學習的時候需要明確一些概念或者說專有明詞是什么意思。首先是MIPI:
MIPI:全寫為Mobile Industry Processor Interface,即移動產業處理器接口,MIPI Alliance,MIPI聯盟,制定MIPI相關標准的組織,跟USB一樣肯定也是一對耳熟能詳的巨頭企業聯合發起搞的。我查了下中國的頁里第一個就是全志,也看到小米和VIVO,但沒有看到華為。DWG(Display Working Group)是MIPI聯盟的一個工作組,下面的三個名詞(不包括LCM)是DWG搞的。這里有一個瑞薩的PPT文檔有閱讀的價值,主要是講了DCS命令,瑞薩的官網沒找到,只在豆丁上有,4塊錢我沒舍得買,就放個鏈接:https://www.docin.com/p-1571989966.html。
需要注意的是MIPI不是一個接口的名字,買屏幕時常見的說自己是MIPI接口的,我理解為他說的是DSI接口:
DSI:全寫為Display serial interface,顯示串行接口,是MIPI聯盟定義的一種圖象輸出接口,是串行的,應該是由時鍾和數據線組成,並用差分線的形式輸出,頻率相對很高,需要有專用的PHY,在高級點的應用中常見,在STM出的應用處理器MP157上就有,數據手冊原文是“MIPI® DSI 2 data lanes up to 1 GHz each”。注意類比也是MIPI聯盟定義的CSI接口。DSI不是本文的重點。
DBI:全寫為Display Bus Interface,顯示總線接口,是MIPI聯盟定義的一種圖象接口,是並行的,也是我引文中提到的用單片機並口控制屏幕,業界也有稱為MCU接口,正點原子出的一款4.3寸的屏幕用的這個接口,親愛的楊神在大二時送我的屏幕也是此接口。DBI接口不是此次制作的重點。STM32F429數據手冊里第一頁提到的“LCD parallel interface, 8080/6800 modes”就是DBI接口,應該是和FSMC合用同一個外設的。
DPI:全寫為Display Pixel Interface,顯示像素接口,是MIPI聯盟定義的一種圖象接口,是並行的,是我們最常用的使用單片機LCDIF外設控制屏幕的接口,也是高端應用常見的接口,是本次制作和總結的重點。業內也有將其稱為RGB接口。STM32F429的手冊上稱實現它的控制器為"LCD-TFT controller up to VGA resolution"。
插入思考:DPI常用來控制更大的屏幕,原因是DPI能直接寫像素,而DBI則需要在驅動控制器(Driver controller)中集成顯存(Graphic RAM),DBI可以允許主機通過命令修改顯存中的部分值改變部分像素值。注意,這些命令(DCS)也是被MIPI定義了的標准命令,也就是說,當我們買到屏幕后商家給的初始化代碼里長串的向驅動控制器中寫入的命令和值的含義是有案可查的。需要集成顯存應該是DBI接口應用在驅動控制器上的一個瓶頸,如果是一個1366*768的屏幕,就需要1366*768*3共3MB多的RAM,這無疑是巨大的面積開銷。
LCM:全寫為LCD Module,LCD模組,參考的兩個協議中沒有看到這個詞的定義,我理解為包括LCD液晶面板,驅動控制器,接口排線和必要的固定保護件組成的模塊,比我18塊錢買的這個屏幕。我室友設計的是其中的驅動控制器,比如我買的LCM中的HX8369A,這個小芯片以特殊的工藝焊接在液晶面板上,它除了有主機側的DBI/DPI/DSI接口的引腳外,還有千個以上的接面板的引腳。難道LCD也是像LED點陣一樣逐行點亮的嗎?
電路預設計
我拿到的這個屏幕商家說是支持MCU、RGB和SPI三種接口的,那么如何告知屏幕我選擇的接口,如何初始化呢。如下圖一。
圖一 HX8369A的接口選擇
DBI總線的認識
由圖可見DBI/DPI內部也是略有復雜,且SPI怎么控制屏幕也是DBI總線的一種實現方式。經查DBI協議,DBI的type A和type B主要是讀寫信號線是合一還是分開的問題,type A還多了多了一個E clock線,並不重要。但是DBI的type C是串行模式,即SPI來實現。見下圖二。
圖二 DBI type C模式接線圖
由上圖可以得到這么幾個要素:1,type C需要片選,復位,始終,命令\數據切換,數據輸入和數據輸出這么幾個信號線;2,數據輸入和數據輸出是可以共用同一個線。
繼續來認識type C的三個選項,這其實就是如何解決命令\數據切換的問題,因為協議中說命令數據切換線是可選的,不強制。但是我看了半天協議其實沒有分出type C的option 1和2的區別,這里放上時序原圖截圖,請后續看到的人也一並想想。
圖三 DBI type C option 1的時序
圖四 DBI type C option 2的時序
option 3的時序就相對很好懂了。因為我用的SPI口的屏幕就是如此驅動的。這里也發出SPI口控制屏幕,也就是DBI type C option 3的時序截圖。很明顯,option 3通過命令線的高低電平值來確定當前是數據還是命令。
圖五 DBI type C option 3的時序
DPI的時序認識
圖一最右側的顯示模式中的模式一表示顯存在驅動控制器之內,如圖六。它可以由DBI模式來驅動。
圖六 顯示模式1
模式三則驅動控制器沒有顯存。顯存放在主存里。這只能是DPI的模式,數據直接懟到面板上。
圖七 顯示模式3
DPI就是RGB接口,由行信號(水平同步,HSYNC),幀信號(垂直同步,VSYNC),數據有效信號(數據使能,LCD_DE),像素時鍾(LCD_CLK),數據線組(LCD_R[7:0],LCD_G[7:0],LCD_B[7:0]),還有兩根線不常用到就不贅述了。跟DVP的信號有點像啊,只是DVP沒有數據有效信號,且數據線寬度沒有這么高。