1. 程式人生 > >SPI驅動和協議(一)-SPI協議簡介

SPI驅動和協議(一)-SPI協議簡介

參考:

https://www.cnblogs.com/aaronLinux/p/6219146.html

https://www.cnblogs.com/reality-soul/p/6170879.html

https://blog.csdn.net/yaolanshu_june/article/details/52356138

這幾個已經說的很清楚了,沒必要重複,這裡只是總結下常用的

1. 標準SPI,Dual SPI和Qual SPI

1.1 標準SPI
標準SPI通常就稱SPI,它是一種序列外設介面規範,有4根引腳訊號:clk , cs, mosi, miso
1.2 Dual SPI
它只是針對SPI Flash而言,不是針對所有SPI外設。對於SPI Flash,全雙工並不常用,因此擴充套件了mosi和miso的用法,讓它們工作在半雙工,用以加倍資料傳輸。
也就是對於Dual SPI Flash,可以傳送一個命令位元組進入dual mode,這樣mosi變成SIO0(serial io 0),mosi變成SIO1(serial io 1),這樣一個時鐘週期內就能傳輸2個bit資料,加倍了資料傳輸。
1.3 Qual SPI
與Dual SPI類似,也是針對SPI Flash,Qual SPI Flash在Dual SPI基礎上增加了兩根I/O線(SIO2,SIO3),目的是一個時鐘內傳輸4個bit所以對於SPI Flash,有標準spi flash,dual spi , qual spi 三種類型,分別對應3-wire(因為mosi和miso單工), 4-wire, 6-wire,在相同clock下,線數越多,傳輸速率越高。
btw:spi flash一般為NOR Flash

1.SPI協議簡介

1.1.SPI協議概括

  SPI,是英語Serial Peripheral interface的縮寫,顧名思義就是序列外圍裝置介面。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI介面主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字訊號處理器和數字訊號解碼器之間SPI,是一種高速的,全雙工同步的序列通訊匯流排,在主器件的移位脈衝下,資料按位傳輸,高位在前,低位在後. 並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的佈局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的晶片集成了這種通訊協議,比如AT91RM9200.

  SPI的通訊原理很簡單,它以主從方式工作,這種模式通常有一個主裝置和一個或多個從裝置,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基於SPI的裝置共有的,它們是SDI(資料輸入),SDO(資料輸出),SCK(時鐘),CS(片選)。

  • SDO     – 主裝置資料輸出,從裝置資料輸入
  • SDI      – 主裝置資料輸入,從裝置資料輸出
  • SCLK   – 時鐘訊號,由主裝置產生
  • CS        – 從裝置使能訊號,由主裝置控制

  CS: 其中CS是控制晶片是否被選中的,也就是說只有片選訊號為預先規定的使能訊號時(高電位或低電位),對此晶片的操作才有效,這就允許在同一總線上連線多個SPI裝置成為可能

  SDI/SDO/SCLK: 通訊是通過資料交換完成的,這裡先要知道SPI是序列通訊協議,也就是說資料是一位一位的傳輸的。這就是SCK時鐘線存在的原因,由SCK提供時鐘脈衝,SDI,SDO則基於此脈衝完成資料傳輸。資料輸出通過 SDO線,資料在時鐘上升沿或下降沿時改變,在緊接著的下降沿或上升沿被讀取。完成一位資料傳輸,輸入也使用同樣原理。這樣,在至少8次時鐘訊號的改變(上沿和下沿為一次),就可以完成8位資料的傳輸。

  要注意的是,SCK訊號線只由主裝置控制,從裝置不能控制訊號線。同樣,在一個基於SPI的裝置中,至少有一個主控裝置。這樣傳輸的特點:這樣的傳輸方式有一個優點,與普通的序列通訊不同,普通的序列通訊一次連續傳送至少8位資料,而SPI允許資料一位一位的傳送,甚至允許暫停,因為SCK時鐘線由主控裝置控制,當沒有時鐘跳變時,從裝置不採集或傳送資料,也就是說,主裝置通過對SCK時鐘線的控制可以完成對通訊的控制SPI還是一個數據交換協議:因為SPI的資料輸入和輸出線獨立,所以允許同時完成資料的輸入和輸出。不同的SPI裝置的實現方式不盡相同,主要是資料改變和採集的時間不同,在時鐘訊號上沿或下沿採集有不同定義,具體請參考相關器件的文件。

在點對點的通訊中,SPI介面不需要進行定址操作,且為全雙工通訊,顯得簡單高效。在多個從裝置的系統中,每個從裝置需要獨立的使能訊號,硬體上比I2C系統要稍微複雜一些。

 1.SCLK只能被主端控制,從端接收。

2.可以同時發出和接收序列資料;

3.可以當作主機或從機工作;

4.提供頻率可程式設計時鐘;

5.傳送結束 中斷標誌;

6.寫衝突保護;

7.匯流排競爭保護等

最後,SPI介面的一個缺點沒有指定的流控制,沒有應答機制確認是否接收到資料


SPICLK、MOSI、MISO及 /SS,其中SPICLK是整個SPI匯流排的公用時鐘,MOSI、MISO作為主機,從機的輸入輸出的標誌,MOSI是主機的輸出,從機的輸入,MISO 是主機的輸入,從機的輸出。/SS是從機的標誌管腳,在互相通訊的兩個SPI匯流排的器件,/SS管腳的電平低的是從機,相反/SS管腳的電平高的是主機。在一個SPI通訊系統中,必須有主機。SPI匯流排可以配置成單主單從,單主多從,互為主從。

SPI四種工作模式:
SPI 模組為了和外設進行資料交換,根據外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。
• 如果 CPOL=0,串行同步時鐘的空閒狀態為低電平;
• 如果CPOL=1,串行同步時鐘的空閒狀態為高電平。
• 時鐘相位(CPHA)能夠配置用於選擇兩種不同的傳輸協議之一進行資料傳輸。
• 如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)資料被取樣;
• 如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)資料被取樣。

• SPI主模組和與之通訊的外裝置時鐘相位和極性應該一致。