一. 簡介
相信大家都玩過屏幕,在FPGA上使用最多的就是VGA/HDMI接口的顯示器了,這兩種顯示器的優點就不用說了,缺點就是體積比較大,而且價格比較貴,對于追求便攜/價格低的我來說,SPI接口的屏幕才是我的首要選擇,而且一般是可以帶觸摸的哦。
此為圖像處理的基礎,后面圖像處理相關的代碼都會基于此屏幕哦!
二. SPI屏幕驅動(驅動芯片ST7789V)
1. SPI模式
SPI時序就不介紹了,很重要且必須要掌握的協議。要想驅動屏幕,最關系的肯定是使用那種模式來驅動了,答案就在這里,數據在SCL時鐘的上升沿被采樣,數據在SCL時鐘的下降沿切換(空閑的時候對SCL的電平不作要求),對應的模式為0和3。
2. 初始化
摸清楚SPI的模式之后,就可以開始初始化屏幕了,最簡單高效的方法當然是參考C語言的現實。
可以看出,初始化的過程就是依次發送命令和數據即可。那么如何辨別命令和數據呢?
通過下圖可以清楚的知道,是通過DC信號線的電平來區別的(低電平表示當前發送的數據為命令)。
弄懂了上述問題之后,就可以按照C語言實現依葫蘆畫瓢,依次將命令和數據發送出去即可。另外有兩點需要注意的是:
兩條命令不能連續發送,中間需要停頓數個時鐘周期;而數據則不需要。
命令到數據,或者數據到命令,是不能連續,中間需要停頓數個時鐘周期。
另外這三個命令需要注意一下0x36,0x2A,0x2B,它們分別是設置顯示的方向(還有就是數據是RGB還是BGR)、列地址和行地址。0x36涉及到的東西比較多,需要詳細了解的可以自行去翻閱數據手冊。
經過上面的初始化,如果成功了,屏幕上顯示出雜亂無章的圖案。
3. 顯示數據
C語言的實現如下,設置要顯示X,Y的范圍,也就是矩形的左上角和右下角的值,然后發送要顯示的數據即可。非常簡單。
三. FPGA實現
有了C語言作為參考,FPGA端的實現那還不是小菜一碟,總共只需要分為如下的三個模塊:
SPI主機模塊: 用來和屏幕進行數據交互
屏幕初始化模塊: 將初始化數據依次通過SPI主機模塊發送給模塊
屏幕刷新模塊: 將顯示數據依次通過SPI主機模塊發送給模塊
模塊框圖如下,有點小哈()
SPI主機模塊和初始化模塊非常簡單,就不作說明啦!重點來說說刷新模塊。
刷新模塊不會像單片機中那樣,調用的時候才會進行刷新,而且在初始化完成之后,就一直在對整個屏幕進行刷新了,
1. 模塊狀態跳轉
模塊由如下四個在狀態組成,在發送前11個數據的時候,需要進入打啊奧延時狀態,原因是這11個數據中既有命令也有數據(此數據,懂?), 后面則一直在DATA態,它只包括顯示數據,所以不需要延時。最后一個顯示數據發送完成后,就進入幀同步狀態,表示一幀數據發送完成。
2. 圖像顯示數據
很easy!發送完前面的命令和數據后,剩下的全部都是顯示數據了,都丟在default里面就可以了。這里暫時寫死了(后面會將顯示的數據修改為模塊輸入的數據)。
3. 模塊端口
端口信號如下,著重關注用戶接口的三個信號即可,非常easy!
四. 模塊封裝
spi模塊top模塊的接口如下,很明顯不夠完美,無法知道當前顯示的像素坐標,而且圖像數據一般為16bit的,而這個模塊的輸入為8bit的數據,另外在替換VGA接口的屏幕時候,也不能簡單高效的替換下來,所以需要經過一次封裝,將其與外部進行交互的端口信號封裝為VGA接口的信號(近似)。
封裝后的模塊端口信號如下,其內部實現類似于VGA驅動。
五. 上板測試
測試代碼如下,顯示四個方塊,是不是感覺so easy!。
測試圖片如下,顯示效果完美!!!!
審核編輯:湯梓紅
-
FPGA
+關注
關注
1630文章
21801瀏覽量
606354 -
顯示器
+關注
關注
21文章
5015瀏覽量
140457 -
SPI
+關注
關注
17文章
1724瀏覽量
92182 -
驅動芯片
+關注
關注
13文章
1299瀏覽量
54948
原文標題:FPGA驅動SPI屏幕
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
如何使用FPGA驅動OLED屏幕
【正點原子新起點開發板免費試用連載】基于FPGA實現TFT屏幕驅動
SPI驅動TFTLCD屏幕相關資料推薦
SPI接口的應用與基于FPGA的SPI自動發送模塊設計
![<b class='flag-5'>SPI</b>接口的應用與基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>SPI</b>自動發送模塊設計](https://file.elecfans.com/web2/M00/4A/13/pYYBAGKhvJOAKLCHAAAthCuesjs024.png)
基于FPGA的SPI協議及設計實現
![基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>SPI</b>協議及設計實現](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STC8的硬件SPI驅動ST7735彩色TFT屏幕
![STC8的硬件<b class='flag-5'>SPI</b><b class='flag-5'>驅動</b>ST7735彩色TFT<b class='flag-5'>屏幕</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FPGA實現的SPI協議(二)----基于SPI接口的FLASH芯片M25P16的使用
![<b class='flag-5'>FPGA</b>實現的<b class='flag-5'>SPI</b>協議(二)----基于<b class='flag-5'>SPI</b>接口的FLASH芯片M25P16的使用](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32L4 模擬SPI 驅動LCD 240*240屏幕
![STM32L4 模擬<b class='flag-5'>SPI</b> <b class='flag-5'>驅動</b>LCD 240*240<b class='flag-5'>屏幕</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論