溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面

發(fā)布時間:2021-11-20 10:36:40 來源:億速云 閱讀:636 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹了樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

 

樹莓派4 rt-thread實現(xiàn)SPI屏人機(jī)交互界面

 

1.前言

樹莓派4的rt-thread一直在不斷的更新,充分挖掘可以樹莓派底層硬件的特性,同時借助各種外設(shè),使得樹莓派4成為一個更加適合學(xué)習(xí)嵌入式開發(fā),驗證各種外設(shè)功能,學(xué)習(xí)操作系統(tǒng)的好用的平臺。

在樹莓派4上進(jìn)行各種外設(shè)的開發(fā),需要一定的嵌入式調(diào)試經(jīng)驗與驅(qū)動調(diào)試方法,因為樹莓派雖然資料很多,但是關(guān)鍵核心的芯片資料卻非常的少,都是進(jìn)行應(yīng)用層面的開發(fā)工作。為了更加深刻的學(xué)習(xí)嵌入式,了解方法是不夠的,而是要弄清楚原理才行。本文主要是介紹樹莓派4圖像,觸摸相關(guān)的使用方式,從而實現(xiàn)GUI的移植和界面交互。

 

2.樹莓派4顯示接口介紹

樹莓派4默認(rèn)是不帶任何屏接口的顯示的,可以接上HDMI接口。

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

另外,樹莓派4上帶有MIPI的顯示器DSI排線接口,可以通過排線進(jìn)行連接。

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

這兩種顯示接口的驅(qū)動實現(xiàn),都已經(jīng)在樹莓派的videocore中實現(xiàn)了,具體的實現(xiàn)細(xì)節(jié)需要查看相關(guān)的GPU的使用。作為學(xué)習(xí)嵌入式圖像這一塊,已經(jīng)無法從樹莓派上進(jìn)行任何的底層相關(guān)的開發(fā)了。想調(diào)用圖像的讀寫操作,可以通過CPU與GPU的通信管道作為數(shù)據(jù)的傳輸通道,具體可以查看mbox的驅(qū)動實現(xiàn)細(xì)節(jié):

https://github.com/RT-Thread/rt-thread/blob/master/bsp/raspberry-pi/raspi4-32/driver/mbox.c
 

將圖像放到一段內(nèi)存空間,然后發(fā)消息給GPU,讓其去該地址取數(shù)據(jù),最后就可以在屏幕上看到顯示的畫面了。

這一種只有顯示,如果要實現(xiàn)觸摸,還需進(jìn)行另外的接口實現(xiàn)。一種是DSI可以將觸摸的坐標(biāo)傳遞給GPU,通過mbox取獲取坐標(biāo)數(shù)據(jù),另外一種接HDMI屏的常見做法就是將觸摸另外接到USB上,通過USB獲取坐標(biāo)點。這是常見的實現(xiàn)手段。

除此之外,微雪則出了MHS-3.5inch RPi Display的3.5寸的SPI屏。

http://www.lcdwiki.com/MHS-3.5inch_RPi_Display
 

下圖是基本的展示:

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

該屏是利用SPI總線所驅(qū)動,最大spi速率支持125Mhz。支持電阻屏觸摸。而且價格也很便宜。是本文研究的重點。

 

3.樹莓派4 SPI接口

要想將該屏驅(qū)動起來,首先必須了解的是SPI協(xié)議,以及bcm2711芯片的spi控制器的使用。所有深度的研讀了rpi_DATA_2711_1p0.pdf文檔。

https://gitee.com/bigmagic/raspi_sd_fw/tree/master/doc/raspi4
 

重點是說,樹莓派4的SPI是支持兩種模式的,一種是標(biāo)準(zhǔn)的SPI總線。

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

這個很基本,也就是CE片選決定是那個設(shè)備,主機(jī)通過傳輸SCLK時鐘信號,然后傳輸MOSI,從機(jī)響應(yīng)數(shù)據(jù),MISO。這是標(biāo)準(zhǔn)的SPI協(xié)議,可以好好復(fù)習(xí)一下。

另外一種則是LOSSI模式。

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

也就是低速串行總線。片選外設(shè)后,主機(jī)可以通過SCL發(fā)送時鐘,然后通過SDA發(fā)送數(shù)據(jù),從機(jī)接受到數(shù)據(jù)后,也會通過SDA數(shù)據(jù)線傳輸?shù)街鳈C(jī)。只有一條線傳輸數(shù)據(jù)。

區(qū)分的方法就是在發(fā)送數(shù)據(jù)位時比如發(fā)送8位數(shù)據(jù)位,則會在前面增加一位表示讀寫。這種適合于低速外設(shè)總線的使用。這一種模式目前暫時沒有使用到,后面使用的時候再進(jìn)行分析。

 

4.樹莓派4 上的SPI屏的實現(xiàn)

具體細(xì)節(jié)我就不過多的展開,反正調(diào)試就占用了兩天時間,下面主要講一講調(diào)試的心得和步驟。

標(biāo)準(zhǔn)的SPI屏接上后,觸摸和LCD都是用的同樣的SPI線。

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面

通過CS引腳進(jìn)行選擇,正好對應(yīng)上樹莓派SPI0的兩個片選。我剛開始調(diào)試的是LCD,由于LCD的主控是ILI9486,看來一下芯片手冊,準(zhǔn)備按照以往的調(diào)試經(jīng)驗,先讀出出廠ID試試。怎么都不讀到數(shù)據(jù),嘗試了好久,結(jié)果仔細(xì)看上圖,發(fā)現(xiàn)SO引腳上標(biāo)注的是Touch panel SPI data output。原來是不能輸出數(shù)據(jù)的呀。于是轉(zhuǎn)換方向,先調(diào)試觸摸,因為觸摸標(biāo)準(zhǔn)一些。

剛開始的時候,觸摸讀不到數(shù)據(jù),因為SPI驅(qū)動寫的不好,而且測試也不嚴(yán)格,對SPI的協(xié)議理解不深刻,后來干脆采用邏輯分析儀跟蹤數(shù)據(jù)。才發(fā)現(xiàn)速率太高了,原來這個觸摸支持的spi的頻率是很低的,只有幾百K。我終于看到數(shù)據(jù)讀出來變化了。

由于是電阻屏,所以讀到的是12位的數(shù)據(jù),讀到2個字節(jié),然后計算偏移得到12位的數(shù)據(jù),總體變化范圍是0到2048之間。按照這個規(guī)律,不斷的在屏的上下左右角度測試坐標(biāo),終于測試得到了以下結(jié)論。

XPT2046:Width:320 High:480
no pressed:(0x800,0xfff)
---ETH----USB-----------------------
| (0x800,0x800)      (0xfff,0x800) |
|                                  |
| (0x800,0xFFF)      (0xfff,0xfff) |
------------------------------------
 

不進(jìn)行觸摸得到的數(shù)據(jù)(0x800,0xfff),各個角度的值可以看上面的信息。

計算坐標(biāo),由于電阻屏,每個點的坐標(biāo)均勻分布,有著二次方程的線性關(guān)系。很容易就通過取到的數(shù)據(jù)算出坐標(biāo)點了。調(diào)試這個花費(fèi)了一天時間。終于可以開始調(diào)試LCD了。

由于兩個片選不一樣,而且只能寫不能讀,這樣調(diào)試起來需要非常的精確。首先LCD復(fù)位,也就是22號引腳先高電平再低電平再高電平。此時完成復(fù)位動作。

接著,注意命令和數(shù)據(jù)是一個GPIO的高低電平進(jìn)行控制的。這個細(xì)節(jié)要注意。接著就是開始傳輸配置的參數(shù)了,參數(shù)主要參考類似的lcd的實現(xiàn)。參數(shù)傳遞完成,屏的面板顯示又白色變成黑色,這個是證明參數(shù)寫進(jìn)去的關(guān)鍵。為了這個細(xì)節(jié)的實現(xiàn),調(diào)試了許久。然后寫數(shù)據(jù)到lcd中。

剛開始的時候,刷屏的速度肉眼可見,每個坐標(biāo)點在變化,這肯定不能接受,然后算了一下SPI的頻率還不到1MHZ。這肯定不行,于是配置樹莓派SPI,將時鐘提升到125Mhz。速度雖然有了提升,但是還是不夠,差不多1s才能刷新全屏。最后直接跳過rt-thread的spi框架,直接操作底層進(jìn)行SPI寫數(shù)據(jù)。發(fā)現(xiàn)真的快了許多。

用數(shù)據(jù)來說話,用Image2LCD來生成一張圖像,進(jìn)行刷屏測試。

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

最后的結(jié)果如下所示:

樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面


 

由于操作系統(tǒng)的tick為10ms,所以測試得到差不多40到50ms,所以幀率在20~25幀左右。這是目前實測的數(shù)據(jù)。雖然速率不是特別高,但是還是可以接受的。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“樹莓派4 rt-thread如何實現(xiàn)SPI屏人機(jī)交互界面”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI