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