SPI主從模式硬件連接如下圖
SPI的通信原理很簡單,,它以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,,需要至少4根線,,事實上3根也可以(單向傳輸時)。也是所有基于SPI的設備共有的,,它們是SDI(數(shù)據(jù)輸入),,SDO(數(shù)據(jù)輸出),SCK(時鐘),,CS(片選),。
SDO – 主設備數(shù)據(jù)輸出,從設備數(shù)據(jù)輸入 對應MOSI master output slave input
SDI – 主設備數(shù)據(jù)輸入,,從設備數(shù)據(jù)輸出 對應MISO master input slave output
SCLK – 時鐘信號,,由主設備產生
CS – 從設備使能信號,由主設備控制
CS: 其中CS是控制芯片是否被選中的,,也就是說只有片選信號為預先規(guī)定的使能信號時(高電位或低電位),,對此芯片的操作才有效,這就允許在同一總線上連接多個SPI設備成為可能,。
SDI/SDO/SCLK: 通訊是通過數(shù)據(jù)交換完成的,,這里先要知道SPI是串行通訊協(xié)議,也就是說數(shù)據(jù)是一位一位的傳輸?shù)?。這就是SCK時鐘線存在的原因,,由SCK提供時鐘脈沖,SDI,,SDO則基于此脈沖完成數(shù)據(jù)傳輸,。數(shù)據(jù)輸出通過 SDO線,數(shù)據(jù)在時鐘上升沿或下降沿時改變,,在緊接著的下降沿或上升沿被讀取,。完成一位數(shù)據(jù)傳輸,輸入也使用同樣原理,。這樣,,在至少8次時鐘信號的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)的傳輸,。
要注意的是,,SCK信號線只由主設備控制,從設備不能控制信號線,。同樣,,在一個基于SPI的設備中,至少有一個主控設備。
這樣傳輸?shù)奶攸c:這樣的傳輸方式有一個優(yōu)點,,與普通的串行通訊不同,,普通的串行通訊一次連續(xù)傳送至少8位數(shù)據(jù),而SPI允許數(shù)據(jù)一位一位的傳送,,甚至允許暫停,,因為SCK時鐘線由主控設備控制,當沒有時鐘跳變時,,從設備不采集或傳送數(shù)據(jù),,也就是說,主設備通過對SCK時鐘線的控制可以完成對通訊的控制,。SPI還是一個數(shù)據(jù)交換協(xié)議:因為SPI的數(shù)據(jù)輸入和輸出線獨立,,所以允許同時完成數(shù)據(jù)的輸入和輸出。不同的SPI設備的實現(xiàn)方式不盡相同,,主要是數(shù)據(jù)改變和采集的時間不同,,在時鐘信號上沿或下沿采集有不同定義,具體請參考相關器件的文檔,。
在點對點的通信中,,SPI接口不需要進行尋址操作,且為全雙工通信,,顯得簡單,。在多個從設備的系統(tǒng)中,每個從設備需要獨立的使能信號,,硬件上比I2C系統(tǒng)要稍微復雜一些,。
,SPI接口的一個缺點:沒有指定的流控制,,沒有應答機制確認是否接收到數(shù)據(jù),。
AT91RM9200的SPI接口主要由4個引腳構成:SPICLK、MOSI,、MISO及 /SS,,其中SPICLK是整個SPI總線的公用時鐘,MOSI,、MISO作為主機,,從機的輸入輸出的標志,MOSI是主機的輸出,,從機的輸入,,MISO 是主機的輸入,從機的輸出,。/SS是從機的標志管腳,,在互相通信的兩個SPI總線的器件,,/SS管腳的電平低的是從機,相反/SS管腳的電平高的是主機,。在一個SPI通信系統(tǒng)中,,必須有主機。SPI總線可以配置成單主單從,,單主多從,互為主從,。
SPI的片選可以擴充選擇16個外設,這時PCS輸出=NPCS,說NPCS0~3接4-16譯碼器,這個譯碼器是需要外接4-16譯碼器,,譯碼器的輸入為NPCS0~3,輸出用于16個外設的選擇,。
2.協(xié)議舉例
如下圖,,是SPI的簡單收發(fā)時序圖。
SPI是一個環(huán)形總線結構,,由ss(cs),、sck、sdi,、sdo構成,,其時序其實很簡單,主要是在sck的控制下,,兩個雙向移位寄存器進行數(shù)據(jù)交換,。
假設下面的8位寄存器裝的是待發(fā)送的數(shù)據(jù)10101010,上升沿發(fā)送,、下降沿接收,、高位先發(fā)送。
那么個上升沿來的時候 數(shù)據(jù)將會是sdo=1,;寄存器=0101010x,。下降沿到來的時候,sdi上的電平將鎖存到寄存器中去,,那么這時寄存器=0101010sdi,,這樣在 8個時鐘脈沖以后,兩個寄存器的內容互相交換一次,。這樣就完成里一個spi時序,。
舉例:
假設主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,,下面將分步對spi的8個時鐘周期的數(shù)據(jù)情況演示一遍:假設上升沿發(fā)送數(shù)據(jù)
這樣就完成了兩個寄存器8位的交換,,上面的上表示上升沿、下表示下降沿,,sdi,、sdo相對于主機而言的,。其中ss引腳作為主機的時候,從機可以把它拉底被動選為從機,,作為從機的是時候,,可以作為片選腳用。根據(jù)以上分析,,一個完整的傳送周期是16位,,即兩個字節(jié),因為,,首先主機要發(fā)送命令過去,,然后從機根據(jù)主機的命令準備數(shù)據(jù),主機在下一個8位時鐘周期才把數(shù)據(jù)讀回來,。
SPI 總線是Motorola公司推出的三線同步接口,,同步串行3線方式進行通信:一條時鐘線SCK,一條數(shù)據(jù)輸入線MOSI,,一條數(shù)據(jù)輸出線MISO;用于CPU與各種外圍器件進行全雙工,、同步串行通訊。SPI主要特點有:可以同時發(fā)出和接收串行數(shù)據(jù);可以當作主機或從機工作;提供頻率可編程時鐘;發(fā)送結束 中斷標志;寫沖突保護;總線競爭保護等,。下圖示出SPI總線工作的四種方式,,其中使用的為廣泛的是SPI0和SPI3方式 (實線表示):