一. 簡介
相信大家都玩過屏幕,在FPGA上使用最多的就是VGA/HDMI接口的顯示器了,這兩種顯示器的優(yōu)點(diǎn)就不用說了,缺點(diǎn)就是體積比較大,而且價(jià)格比較貴,對(duì)于追求便攜/價(jià)格低的我來說,SPI接口的屏幕才是我的首要選擇,而且一般是可以帶觸摸的哦。
此為圖像處理的基礎(chǔ),后面圖像處理相關(guān)的代碼都會(huì)基于此屏幕哦!
二. SPI屏幕驅(qū)動(dòng)(驅(qū)動(dòng)芯片ST7789V)
1. SPI模式
SPI時(shí)序就不介紹了,很重要且必須要掌握的協(xié)議。要想驅(qū)動(dòng)屏幕,最關(guān)系的肯定是使用那種模式來驅(qū)動(dòng)了,答案就在這里,數(shù)據(jù)在SCL時(shí)鐘的上升沿被采樣,數(shù)據(jù)在SCL時(shí)鐘的下降沿切換(空閑的時(shí)候?qū)CL的電平不作要求),對(duì)應(yīng)的模式為0和3。

2. 初始化
摸清楚SPI的模式之后,就可以開始初始化屏幕了,最簡單高效的方法當(dāng)然是參考C語言的現(xiàn)實(shí)。
可以看出,初始化的過程就是依次發(fā)送命令和數(shù)據(jù)即可。那么如何辨別命令和數(shù)據(jù)呢?

通過下圖可以清楚的知道,是通過DC信號(hào)線的電平來區(qū)別的(低電平表示當(dāng)前發(fā)送的數(shù)據(jù)為命令)。

弄懂了上述問題之后,就可以按照C語言實(shí)現(xiàn)依葫蘆畫瓢,依次將命令和數(shù)據(jù)發(fā)送出去即可。另外有兩點(diǎn)需要注意的是:
兩條命令不能連續(xù)發(fā)送,中間需要停頓數(shù)個(gè)時(shí)鐘周期;而數(shù)據(jù)則不需要。
命令到數(shù)據(jù),或者數(shù)據(jù)到命令,是不能連續(xù),中間需要停頓數(shù)個(gè)時(shí)鐘周期。

另外這三個(gè)命令需要注意一下0x36,0x2A,0x2B,它們分別是設(shè)置顯示的方向(還有就是數(shù)據(jù)是RGB還是BGR)、列地址和行地址。0x36涉及到的東西比較多,需要詳細(xì)了解的可以自行去翻閱數(shù)據(jù)手冊(cè)。
經(jīng)過上面的初始化,如果成功了,屏幕上顯示出雜亂無章的圖案。
3. 顯示數(shù)據(jù)
C語言的實(shí)現(xiàn)如下,設(shè)置要顯示X,Y的范圍,也就是矩形的左上角和右下角的值,然后發(fā)送要顯示的數(shù)據(jù)即可。非常簡單。

三. FPGA實(shí)現(xiàn)
有了C語言作為參考,F(xiàn)PGA端的實(shí)現(xiàn)那還不是小菜一碟,總共只需要分為如下的三個(gè)模塊:
SPI主機(jī)模塊: 用來和屏幕進(jìn)行數(shù)據(jù)交互
屏幕初始化模塊: 將初始化數(shù)據(jù)依次通過SPI主機(jī)模塊發(fā)送給模塊
屏幕刷新模塊: 將顯示數(shù)據(jù)依次通過SPI主機(jī)模塊發(fā)送給模塊
模塊框圖如下,有點(diǎn)小哈()

SPI主機(jī)模塊和初始化模塊非常簡單,就不作說明啦!重點(diǎn)來說說刷新模塊。
刷新模塊不會(huì)像單片機(jī)中那樣,調(diào)用的時(shí)候才會(huì)進(jìn)行刷新,而且在初始化完成之后,就一直在對(duì)整個(gè)屏幕進(jìn)行刷新了,
1. 模塊狀態(tài)跳轉(zhuǎn)
模塊由如下四個(gè)在狀態(tài)組成,在發(fā)送前11個(gè)數(shù)據(jù)的時(shí)候,需要進(jìn)入打啊奧延時(shí)狀態(tài),原因是這11個(gè)數(shù)據(jù)中既有命令也有數(shù)據(jù)(此數(shù)據(jù),懂?), 后面則一直在DATA態(tài),它只包括顯示數(shù)據(jù),所以不需要延時(shí)。最后一個(gè)顯示數(shù)據(jù)發(fā)送完成后,就進(jìn)入幀同步狀態(tài),表示一幀數(shù)據(jù)發(fā)送完成。


2. 圖像顯示數(shù)據(jù)
很easy!發(fā)送完前面的命令和數(shù)據(jù)后,剩下的全部都是顯示數(shù)據(jù)了,都丟在default里面就可以了。這里暫時(shí)寫死了(后面會(huì)將顯示的數(shù)據(jù)修改為模塊輸入的數(shù)據(jù))。

3. 模塊端口
端口信號(hào)如下,著重關(guān)注用戶接口的三個(gè)信號(hào)即可,非常easy!

四. 模塊封裝
spi模塊top模塊的接口如下,很明顯不夠完美,無法知道當(dāng)前顯示的像素坐標(biāo),而且圖像數(shù)據(jù)一般為16bit的,而這個(gè)模塊的輸入為8bit的數(shù)據(jù),另外在替換VGA接口的屏幕時(shí)候,也不能簡單高效的替換下來,所以需要經(jīng)過一次封裝,將其與外部進(jìn)行交互的端口信號(hào)封裝為VGA接口的信號(hào)(近似)。

封裝后的模塊端口信號(hào)如下,其內(nèi)部實(shí)現(xiàn)類似于VGA驅(qū)動(dòng)。

五. 上板測(cè)試
測(cè)試代碼如下,顯示四個(gè)方塊,是不是感覺so easy!。

測(cè)試圖片如下,顯示效果完美?。。?!

審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1655文章
22283瀏覽量
630286 -
顯示器
+關(guān)注
關(guān)注
22文章
5130瀏覽量
143642 -
SPI
+關(guān)注
關(guān)注
17文章
1866瀏覽量
99815 -
驅(qū)動(dòng)芯片
+關(guān)注
關(guān)注
13文章
1550瀏覽量
57662
原文標(biāo)題:FPGA驅(qū)動(dòng)SPI屏幕
文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA實(shí)現(xiàn)基于SPI協(xié)議的Flash驅(qū)動(dòng)控制芯片擦除
如何使用FPGA驅(qū)動(dòng)OLED屏幕
【正點(diǎn)原子新起點(diǎn)開發(fā)板免費(fèi)試用連載】基于FPGA實(shí)現(xiàn)TFT屏幕驅(qū)動(dòng)
SPI驅(qū)動(dòng)屏幕移植LVGL軟件包具體流程
SPI驅(qū)動(dòng)TFTLCD屏幕相關(guān)資料推薦
SPI接口的應(yīng)用與基于FPGA的SPI自動(dòng)發(fā)送模塊設(shè)計(jì)
基于FPGA的SPI協(xié)議及設(shè)計(jì)實(shí)現(xiàn)
STC8的硬件SPI驅(qū)動(dòng)ST7735彩色TFT屏幕
FPGA實(shí)現(xiàn)的SPI協(xié)議(二)----基于SPI接口的FLASH芯片M25P16的使用
STM32L4 模擬SPI 驅(qū)動(dòng)LCD 240*240屏幕
R128實(shí)現(xiàn)SPI驅(qū)動(dòng)TFT LCD屏教程
DS1302芯片與FPGA之間SPI通信原理

如何使用FPGA驅(qū)動(dòng)SPI屏幕
評(píng)論