平台:mt6737m
oled ic:ssd1331 有幾種連線方式,我們用的是spi。
知識儲備:
spi匯流排工作方式有四種,由時鐘訊號的極性及相位組合而成,
cpol: 時鐘極性選擇,為0時spi匯流排空閒為低電平,為1時spi匯流排空閒為高電平。
cpha:時鐘相位選擇,為0時在sck第乙個跳變沿取樣,為1時在sck第二個跳變沿取樣。
mtk平台spi的資料傳輸模式有:
1. fifo,支援一次傳輸32bytes。
2. dma,一次最多支援1024b,支援多次傳輸(length=loop*1024,1≤loop≤256)。
3. spi控制器只有乙個片選訊號,故只支援乙個從裝置。
除錯過程及遇到的問題:
1、第一步不免俗,註冊乙個spi裝置,spi驅動。各平台路徑會有差異,這個平台路徑是:\kernel-3.18\drivers\spi\mediatek\mt6735
2、裝置驅動載入成功,初始化按照datasheet power on時序,初始化**傳送,**螢幕是否點亮了。
這裡就涉及到兩個很重要的東西,gpio的設定和spi引數的設定。gpio設定略過,spi引數一般都預設即可。另上面說的乙個spi只支援乙個裝置,不是絕對的,換個思想,gpio模擬spi。。。cs無非就是選中某個裝置而已,對於這個裝置來講就乙個高低電平。
3、螢幕點亮很順利,因為在微控制器上面已經調好了。時代久遠,暫且不表。
4、按照預設配置fifo,spi匯流排速率不高,具體數值忘了。
我們專案是乙個spi介面接兩個spi裝置,輪流切換,要做到同時重新整理的效果,對速度上就要求比較高了。這裡對spi配置就小小的糾結了一番,折騰數小時,最終改1個地方搞定。(dma,一次最多支援1024b,支援多次傳輸(length=loop*1024,1≤loop≤256)。)
spi_par->com_mod = dma_transfer;
static int spi_test_write_byte(struct spi_device *spi, char data) ;
buf[0] = data;
spi_message_init(&msg);
spi_message_add_tail(&xfer, &msg);
return spi_sync(spi, &msg); }
static int spi_test_write_bytes(struct spi_device *spi, const unsigned char *data, int len) ;
spi_message_init(&msg);
spi_message_add_tail(&xfer, &msg);
return spi_sync(spi, &msg); }
dma方式就可以直接用下面的函式,fifo就老實用上面的吧。
5、最後解了乙個bug,跟spi無關,軟體設計的缺陷,還是記錄一下吧。
spi一次性傳送多個資料以防被其他打斷一定要加鎖,互斥鎖,or 全域性變數,互斥鎖的原始做法。
好記性不如爛筆頭。。。
海灣crt除錯 海灣裝置除錯步驟
gst5000 除錯步驟 一 檢查線路 匯流排線路 包括探頭 手報 消火栓按鈕 聲光 模組等等現場裝置的 z1 z2 訊號線 此 線路無極性。首先保證匯流排上兩線不短路,其次保證每一根匯流排對地足夠絕緣 理論上應該大於 兆歐 然後對每組匯流排測量其線間電阻 將萬用表跳到測量通斷的檔位,及 檔,測得值...
chrome除錯建立sq裝置進行除錯
很多時候我們開發只是在手機展示,而在pc端進行除錯,當開發加了這一層限制之後,就會導致有些資料樣式出不來,讓pc端除錯整個就廢掉了。由於這一級限制是通過判斷useragent來確定是否通過手q訪問,那麼,我們就可以有解決辦法,那就是獲取手q內建瀏覽器的useragent,進行模擬就可以了,事實就是如...
linux Linux除錯記錄
剛安裝完 linux 後,在輸入命令或者用 vi 編輯的時候會發出報警的蜂鳴聲,很難受。vi etc inputrc找到裡面的設定 bell style set bell style none將前面的 去掉,讓這個配置生效 set bell style none然後重啟系統就可以去掉蜂鳴聲 rebo...