一、MIPI
MIPI(Mobile Industry Processor Interface/移動工業處理器接口)是2003年由ARM、Nokia、ST 等公司成立聯盟並為移動應用處理器制定的一個開放標准, 旨在將各個模塊標准化以降低設計的復雜度和兼容性。 由於定義的范圍太廣,所以在針對具體的模塊有自己一套協議,已經完成和正在計划中的規范如下:
本文主要介紹用於顯示的協議 -- MIPI DSI, 以及同樣用於顯示的DBI/DPI各自的差異和特點。
=============================== 以下分析以ST7789V芯片為例 =================================================
二、DBI
DBI(Display Bus Interface), 顯示總線接口, 也稱MCU接口或者80/8080接口, 整個框架如下:
DBI接口最大的特點就是LCM自帶framebuffer, 存儲Host端發過來的數據, 並由內部的控制IC不斷重復的刷到LCD上, 也就是說其內部實現了自刷新, Host只要發送一次數據即可, 這幀數據會一直顯示在屏幕上。
由於不需要Host端自刷新,對Host處理器的要求很低, 沒有時鍾線,Host和LCM可以是簡單的GPIO相連, 這也是叫MCU接口的原因, 典型的可以和51單片機相連, 只要滿足時序要求即可。
ST7789V芯片支持DBI接口, 根據數據傳輸又可分為並口和串口傳輸(主要體現在數據線上,其他時序要求都是一樣的)
1. 並口傳輸:
CSX: 片選信號,圖中低電平有效; D/CX:數據/命令信號; WRX: 寫使能, 上升沿鎖存; RDX:讀使能, 上升沿鎖存; D[17:0]: 數據, 具體使用多少根數據線可配置
根據M0~3四根引腳配置有如下:
已0001為例, 數據使用16根線D[15:0](針對RGB565格式),可以看出當D/CX=0,RDX=1, WRX上升沿時為寫命令, 有效長度為一個byte位於D[7:0], 而D/CX=1是寫數據, 根據前面的命令決定后面數據長度, 如果是幀數據就占16根, 如果是配置參數也是一個byte, 以此類推!
具體的寫、讀操作時序如下:
以RGB565剛好在D[15:0]的實際分布如下((2Ch): Memory Write, 寫命令0x2c, 接着開始寫幀數據 ):
除了上述GPIO引腳外, 一般還有TE(tearing effect)引腳, Host可以通過該引腳得知LCM一幀數據是否刷完(也可配置LCM每刷多少幀產生一個信號告知Host), 以做同步。
2. 串口傳輸
ST7789V串口傳輸有3線制和4線制, 主要區別在於識別數據線的數據是顯示數據還是命令, 如下:
3線制每傳輸一個字節需要9bit, 多出一個bit來表示該字節是命令還是數據, 4線制每byte就是8bit,通過這根多出的引腳告知LCM這個byte是命令還是數據。
注意: 如果3線制采用MCU GPIO實現將非常簡單, 如果采用SPI傳輸就會有個問題, SPI主控器一般發送單位是8bit, 無法生成圖上每9bit構成一個字節, 設置在SPI傳輸時是可以設置的 “spi->bits_per_word = 9;”也不行, 因為在SPI主控器
會設置成兩個字節為單位進行傳輸, 可以理解為short類型, 舉個例子: 假設現在傳輸4個字節,可以設置“spi->len = 4;” “spi->bits_per_word = 8;” CPU 會從內存讀取4次丟到SPI寄存器 readb()/writeb(), 如果 “spi->bits_per_word = 9;”
SPI主控器會設置步進2byte, CPU從內存讀取兩次每次兩個字節丟到SPI寄存器, 當然最后在線上的波形都是4個字節, 不同的是: a. 時序可能不同, CPU大端 兩次char丟和一次short丟位置是相反的!; b. short只丟兩次效率更高
三、DPI
DPI(Display Pixel Interface) 顯示像素接口, 也稱RGB接口, 之所以叫像素接口, 是因為數據采用並口在一個時鍾周期就傳輸一個像素的數據, 所以時鍾一般設置像素時鍾而不是bit時鍾, 整個框架如下:
與DBI不同的是, LCM端沒有framebuffer, 轉移到Host端, 所以為了維持畫面能夠持續顯示在屏幕上, Host要持續發送數據過去, 並且為保證數據的同步, 引入VSYNC/HSYNC等功能(更准確說是繼承了以前的叫法), 如下:
解釋如下:
Vsync:幀同步信號, 告知LCM移到幀起始位置,從上圖Figure25可以知道水平就是低電平有效(不是高電平), 極性就是下降沿有效(看一個周期的開始)
vbp: 幀同步信號的后肩(在Vsyc后面),單位為1行的時間。
vfp: 幀同步信號的前肩(在Vsyc前面),單位為1行的時間。
Hsync:行同步信號, 告知LCM移到下一行的起始位置, 從上圖Figure25可以知道水平就是低電平有效(不是高電平), 極性就是下降沿有效(看一個周期的開始)
hbp:行同步信號的后肩(在Hsyc后面),單位為1像素的時間。
hfp:行同步信號的前肩(在Hsyc前面),單位為1像素的時間。
Dotclk:點時鍾或稱像素時鍾
DE: 數據有效信號(重點,后面會詳解)
對於DBI接口, 每次發送幀數據時會先發送個命令(上文提到0x2c), 而RGB接口不同發送命令, 可通過Vsync、Hsync告知LCM接收新一幀數據。那vbp/vfp/hbp/hfp又是干嘛的呢? 對於我們這種TFT屏來說可以不用, 主要是兼容早期的顯示屏:
以前顯示技術是CRT(陰極射線顯像管), 尾部是電子槍, 靠電子撞擊玻璃產生亮度(所以只有黑白兩種顏色), 由於電子槍掃射是機械行為, 所以當換行尤其是最后一行最后一個像素點要移到第一行第一個像素換幀的時候, 機械運動需要時間, 因此
要加延遲操作,這期間時鍾還是一直在跑, 使得主控和顯示模塊保持同步, 當電池搶移到位置且穩定時, 主控器就可以讀取數據並傳輸到數據線就上, 問題是顯示模塊如何知道此時數據線上的數據是有效數據了? 就是DE線告知的, 這個是主控器
“自動”操作DE線的, 其時機就是根據vbp/vfp/hbp/hfp參數控制的,當Vsync/Hsync有效后, 主控器並不會立即讀取幀數據放到數據線, 而是disable DE, 讓顯示模塊ready, 然后經過Vsync/vbp/vfp/后開始讀取幀數據並使能DE引腳, 這時顯示模塊
就接收幀數據了! 而TFT屏本可以不用這四個參數, V/Hsync有效后直接發送幀數據, 但為了兼容CRT所以還是保留下來了, 其實除了這四個參數, 連V/Hsync都可以不要, 因為DPI的數據線只是傳輸幀數據, 初始化參數命令還是要通過其他比如SPI發送的
那這個同步信號完全可以通過SPI發送過去, 然后幀數據就發送到數據線(即除了上面的Dotclk,其余都可以不用), 當然目前還是繼承並使用這些參數, 所以一個典型的BPI接口電路如下:
沒錯, 最大的缺點就是 浪費線! 控制部分一般是SPI接口, 數據部分就是一堆的RGB線, 那相比DBI 中3線制有什么優勢呢? 沒錯, 就是傳輸快! 尤其V/Hsync代替發送幀同步命令, 可以無間隔存粹傳輸幀數據! 一般用於屏幕大(像素高)的LCM產品。
還有關於極性的設置, V/Hsync、Dotclk和DE都可以可以設置的, 以ST7789V為例:
如果LCM實際時序跟Figure25一致的話, 可以反推LCM硬件電路設置VSPL/HSPL 接VCC, DPL/EPL接地
注意: 這些極性是由LCM設定的(不是顯示芯片, 它只是提供這個能力, 取決模組廠家硬件電路設置), Host要根據其要求設置極性, 比如我現在調試某家LCM模組廠家, 顯示芯片采用ST7272A, 其手冊極性描述如下:
從LCM廠家給的原理圖,這四個引腳模組廠直接接VCC,
可以知道其波形為下圖紅色圈圈, 也就是極性為下降沿有效, 電平是高電平有效:
而我的主控器是博通5892, 設置極性是電平不是極性, 也即設置低電平有效(=1):
四、DSI
DSI(Display Serial Interface) 顯示串行接口, 幀數據/命令全使用串口方式傳輸(打成一個包), 1~4通道, 由於篇幅問題, 在下一篇博文再詳細介紹。