今天我們學(xué)習(xí)一下W5500使用的通訊接口,SPI協(xié)議。SPI,中文串行外圍設(shè)備接口,SPI總線是在物理上是通過接在外圍設(shè)備微控制單元上的同步串行端口的模塊來實現(xiàn)。他允許MCU以全雙工的同步串行方式,與各種外圍設(shè)備進(jìn)行高速數(shù)據(jù)通信。
SPI實為高速同步串行口。收發(fā)同步,可同步進(jìn)行。
SPI在芯片的管腳上只占用四根線,節(jié)約芯片的管腳。
“SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設(shè)備和一個或多個從設(shè)備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基于SPI的設(shè)備共有的,它們是SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出),SCK(時鐘),CS(片選)。
(1)SDO – 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入
(2)SDI – 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出
(3)SCLK – 時鐘信號,由主設(shè)備產(chǎn)生
(4)CS – 從設(shè)備使能信號,由主設(shè)備控制
其中CS是控制芯片是否被選中的,也就是說只有片選信號為預(yù)先規(guī)定的使能信號時(高電位或低電位),對此芯片的操作才有效。這就允許在同一總線上連接多個SPI設(shè)備成為可能?!?/p>
SPI是串行傳輸協(xié)議,數(shù)據(jù)是一位一位的傳輸?shù)?,而確定傳輸位的就是SCK信號,有他來產(chǎn)生脈沖信號,SDI和SDO則是基于這個脈沖完成數(shù)據(jù)傳輸,數(shù)據(jù)的輸出通過SDO線,數(shù)據(jù)在時鐘上升沿或下降沿改變,在緊接著的下降沿或上升沿被讀取。完成一位數(shù)據(jù)傳輸,所以要完成8位數(shù)據(jù)的傳輸,至少8次的時鐘信號改變。但SCK時鐘線只受主設(shè)備控制,從設(shè)備不能控制信號線。與普通的串行通信不同的是,普通的串行通信通訊一次至少8位,而SPI允許一位一位的傳輸,甚至允許暫停。主設(shè)備通過SCK時鐘的控制可以完成對通信的控制。SPI還有一個數(shù)據(jù)交換協(xié)議:因為SPI的數(shù)據(jù)輸入和輸出線獨立,所以允許同時完成數(shù)據(jù)的輸入輸出。在點對點的通信中,SPI接口不需要進(jìn)行尋址操作,且為全雙工通信,所以簡單高效。但是SPI接口沒有指定的流控制,沒有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。
在對應(yīng)的接口上,
MOSI:主出/從入
MISO:注入/從出
SCK:串行時鐘
SS:叢屬選擇
而SS的引腳數(shù)決定了可連到總線上的器件數(shù)量。
SPI傳輸串行數(shù)據(jù)是首先傳輸最高位,波特率可達(dá)到5Mbps
總線包括一根串行同步時鐘信號線以及兩根數(shù)據(jù)線
“SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時鐘極性和相位可以進(jìn)行配置,時鐘極性(CPOL)對傳輸協(xié)議沒有重大的影響。如果 CPOL="0",串行同步時鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時鐘的空閑狀態(tài)為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)音時鐘相位和極性應(yīng)該一致”
CPHA = 1,就表示數(shù)據(jù)的輸出是在一個時鐘周期的第一個沿上,至于這個沿是上升沿還是下降沿,這要看CPOL的值而定,CPOL=1那就是下降沿,反之就是上升沿,數(shù)據(jù)的采樣就是在第二個沿上
CPHA = 0,就表示數(shù)據(jù)的采樣是在一個時鐘周期的第一個沿上,那么數(shù)據(jù)的輸出就在第二個沿上了
實際就是時鐘的高有效與低有效。
代碼實現(xiàn)又要待到明日
P.S.做了一周了,中間間斷了一天,但也不是遠(yuǎn)離了學(xué)習(xí)。雖然這個可能不用去從軟件協(xié)議棧入手,但是還是覺得去了解之后會有更大的幫助。之前51單片機(jī)學(xué)的真的蠻差的,以至于現(xiàn)在在面前的代碼并不能了解他的意思,或者做一些東西很迷。大三了,身邊的人已經(jīng)有大量的代碼經(jīng)驗,自己卻做的太少,哪怕現(xiàn)在轉(zhuǎn)一個工程都要這么費勁。想法很多,實現(xiàn)的能力達(dá)不到。眼高手低真的累,希望這兩天能讓我走出迷茫吧...
-
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
428瀏覽量
26465
發(fā)布評論請先 登錄
相關(guān)推薦
評論