2875

更新時間: 2013-12-10

廣告

SPI,就是高速同步串列口。3~4線介面,收發獨立、可同步進行.

廣告

1 SPI -SPI

高速同步串列口。3~4線介面,收發獨立、可同步進行.

2 SPI -詳細介紹

SPI(Serial Peripheral Interface--串列外設介面)匯流排系統是一種同步串列外設介面,它可以使MCU與各種外圍設備以串列方式進行通信以交換信息。外圍設置FLASHRAM、網路控制器、LCD顯示驅動器、A/D轉換器和MCU等。SPI匯流排系統可直接與各個廠家生產的多種標準外圍器件直接介面,該介面一般使用4條線:串列時鐘線(SCK)、主機輸入/從機輸出數據線MISO、主機輸出/從機輸入數據線MOST和低電平有效的從機選擇線SS(有的SPI介面晶元帶有中斷信號線INT或INT、有的SPI介面晶元沒有主機輸出/從機輸入數據線MOSI)。

廣告

--------------------------------------------------------------------------------------------------------

一、SPI是英文Software Process Improvement的縮寫,中文意思是軟體過程的改進。它是CMM(還有其他能力模型)中的一個重要概念,CMM模型的目的就是要改進一個組織的過程,提高過程能力,所以叫做SPI-軟體過程改進。
二、SPI是英文Service Provider Interface的縮寫。中文意思是服務提供商介面。滿足某種服務標準的供應商提供的符合該標準的應用程序介面,SPI應該和該服務的API標準是兼容的,應用程序一般應該是基於API編寫,除非是SPI中包含API中沒有提供的功能而又必須使用。
三、SPI是英文Serial Peripheral Interface的縮寫,中文意思是串列外圍設備介面,SPI是Motorola公司推出的一種同步串列通訊方式,是一種三線同步匯流排,因其硬體功能很強,與SPI有關的軟體就相當簡單,使CPU有更多的時間處理其他事務。
SPI概述
SPI:高速同步串列口。3~4線介面,收發獨立、可同步進行.

廣告

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

SPI匯流排系統是一種同步串列外設介面,它可以使MCU與各種外圍設備以串列方式進行通信以交換信息。外圍設置FLASHRAM、網路控制器、LCD顯示驅動器、A/D轉換器和MCU等。SPI匯流排系統可直接與各個廠家生產的多種標準外圍器件直接介面,該介面一般使用4條線:串列時鐘線(SCK)、主機輸入/從機輸出數據線MISO、主機輸出/從機輸入數據線MOSI和低電平有效的從機選擇線SS(有的SPI介面晶元帶有中斷信號線INT或INT、有的SPI介面晶元沒有主機輸出/從機輸入數據線MOSI)。

廣告

SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基於SPI的設備共有的,它們是SDI(數據輸入),SDO(數據輸出),SCK(時鐘),CS(片選)。
(1)SDO – 主設備數據輸出,從設備數據輸入
(2)SDI – 主設備數據輸入,從設備數據輸出
(3)SCLK – 時鐘信號,由主設備產生
(4)CS – 從設備使能信號,由主設備控制
其中CS是控制晶元是否被選中的,也就是說只有片選信號為預先規定的使能信號時(高電位或低電位),對此晶元的操作才有效。這就允許在同一匯流排上連接多個SPI設備成為可能。
接下來就負責通訊的3根線了。通訊是通過數據交換完成的,這裡先要知道SPI是串列通訊協議,也就是說數據是一位一位的傳輸的。這就是SCK時鐘線存在的原因,由SCK提供時鐘脈衝,SDI,SDO則基於此脈衝完成數據傳輸。數據輸出通過 SDO線,數據在時鐘上升沿或下降沿時改變,在緊接著的下降沿或上升沿被讀取。完成一位數據傳輸,輸入也使用同樣原理。這樣,在至少8次時鐘信號的改變(上沿和下沿為一次),就可以完成8位數據的傳輸。
要注意的是,SCK信號線只由主設備控制,從設備不能控制信號線。同樣,在一個基於SPI的設備中,至少有一個主控設備。這樣傳輸的特點:這樣的傳輸方式有一個優點,與普通的串列通訊不同,普通的串列通訊一次連續傳送至少8位數據,而SPI允許數據一位一位的傳送,甚至允許暫停,因為SCK時鐘線由主控設備控制,當沒有時鐘跳變時,從設備不採集或傳送數據。也就是說,主設備通過對SCK時鐘線的控制可以完成對通訊的控制。SPI還是一個數據交換協議:因為SPI的數據輸入和輸出線獨立,所以允許同時完成數據的輸入和輸出。不同的SPI設備的實現方式不盡相同,主要是數據改變和採集的時間不同,在時鐘信號上沿或下沿採集有不同定義,具體請參考相關器件的文檔。
在點對點的通信中,SPI介面不需要進行定址操作,且為全雙工通信,顯得簡單高效。在多個從設備的系統中,每個從設備需要獨立的使能信號,硬體上比I2C系統要稍微複雜一些。
最後,SPI介面的一個缺點:沒有指定的流控制,沒有應答機制確認是否接收到數據。
AT91RM9200的SPI介面主要由4個引腳構成:SPICLK、MOSI、MISO及 /SS,其中SPICLK是整個SPI匯流排的公用時鐘,MOSI、MISO作為主機,從機的輸入輸出的標誌,MOSI是主機的輸出,從機的輸入,MISO 是主機的輸入,從機的輸出。/SS是從機的標誌管腳,在互相通信的兩個SPI匯流排的器件,/SS管腳的電平低的是從機,相反/SS管腳的電平高的是主機。在一個SPI通信系統中,必須有主機。SPI匯流排可以配置成單主單從,單主多從,互為主從。
SPI的片選可以擴充選擇16個外設,這時PCS輸出=NPCS,說NPCS0~3接4-16解碼器,這個解碼器是需要外接4-16解碼器,解碼器的輸入為NPCS0~3,輸出用於16個外設的選擇。

廣告

SPI協議舉例
SPI是一個環形匯流排結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數據交換。
假設下面的8位寄存器裝的是待發送的數據10101010,上升沿發送、下降沿接收、高位先發送。
那麼第一個上升沿來的時候 數據將會是sdo=1;寄存器中的10101010左移一位,後面補入送來的一位未知數x,成了0101010x。下降沿到來的時候,sdi上的電平將鎖存到寄存器中去,那麼這時寄存器=0101010sdi,這樣在 8個時鐘脈衝以後,兩個寄存器的內容互相交換一次。這樣就完成里一個spi時序。
舉例:
假設主機和從機初始化就緒:並且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數據情況演示一遍:假設上升沿發送數據
這樣就完成了兩個寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對於主機而言的。其中ss引腳作為主機的時候,從機可以把它拉底被動選為從機,作為從機的是時候,可以作為片選腳用。根據以上分析,一個完整的傳送周期是16位,即兩個位元組,因為,首先主機要發送命令過去,然後從機根據主機的命令準備數據,主機在下一個8位時鐘周期才把數據讀回來。 SPI 匯流排是Motorola公司推出的三線同步介面,同步串列3線方式進行通信:一條時鐘線SCK,一條數據輸入線MOSI,一條數據輸出線MISO;用於CPU與各種外圍器件進行全雙工、同步串列通訊。SPI主要特點有:可以同時發出和接收串列數據;可以當作主機或從機工作;提供頻率可編程時鐘;發送結束 中斷標誌;寫衝突保護;匯流排競爭保護等。下圖示出SPI匯流排工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式 (實線表示):

廣告


SPI匯流排四種工作方式 SPI 模塊為了和外設進行數據交換,根據外設工作要求,其輸出串列同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。如果 CPOL=0,串列同步時鐘的空閑狀態為低電平;如果CPOL=1,串列同步時鐘的空閑狀態為高電平。時鐘相位(CPHA)能夠配置用於選擇兩種不同的傳輸協議之一進行數據傳輸。如果CPHA=0,在串列同步時鐘的第一個跳變沿(上升或下降)數據被採樣;如果CPHA=1,在串列同步時鐘的第二個跳變沿(上升或下降)數據被採樣。SPI主模塊和與之通信的外設備時鐘相位和極性應該一致。

SPI匯流排包括1根串列同步時鐘信號線以及2根數據線。
    SPI模塊為了和外設進行數據交換,根據外設工作要求,其輸出串列同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。如果CPOL=0,串列同步時鐘的空閑狀態為低電平;如果CPOL=1,串列同步時鐘的空閑狀態為高電平。時鐘相位(CPHA)能夠配置用於選擇兩種不同的傳輸協議之一進行數據傳輸。如果CPHA=0,在串列同步時鐘的第一個跳變沿(上升或下降)數據被採樣;如果CPHA=1,在串列同步時鐘的第二個跳變沿(上升或下降)數據被採樣。SPI主模塊和與之通信的外設音時鐘相位和極性應該一致。SPI介面時序如圖3、圖4所示。

廣告


補充:
上文中最後一句話:SPI主模塊和與之通信的外設備時鐘相位和極性應該一致。個人理解這句話有2層意思:其一,主設備SPI時鐘和極性的配置應該由外設來決定;其二,二者的配置應該保持一致,即主設備的SDO同從設備的SDO配置一致,主設備的SDI同從設備的SDI配置一致。因為主從設備是在SCLK的控制下,同時發送和接收數據,並通過2個雙向移位寄存器來交換數據。工作原理演示如下圖:

    上升沿主機SDO發送數據1,同時從設備SDO發送數據0;緊接著在SCLK的下降沿的時候從設備的SDI接收到了主機發送過來的數據1,同時主機也接收到了從設備發送過來的數據0.

SPI協議心得SPI介面時鐘配置心得:
    在主設備這邊配置SPI介面時鐘的時候一定要弄清楚從設備的時鐘要求,因為主設備這邊的時鐘極性和相位都是以從設備為基準的。因此在時鐘極性的配置上一定要搞清楚從設備是在時鐘的上升沿還是下降沿接收數據,是在時鐘的下降沿還是上升沿輸出數據。但要注意的是,由於主設備的SDO連接從設備的SDI,從設備的SDO連接主設備的SDI,從設備SDI接收的數據是主設備的SDO發送過來的,主設備SDI接收的數據是從設備SDO發送過來的,所以主設備這邊SPI時鐘極性的配置(即SDO的配置)跟從設備的SDI接收數據的極性是相反的,跟從設備SDO發送數據的極性是相同的。下面這段話是Sychip Wlan8100 Module Spec上說的,充分說明了時鐘極性是如何配置的:
The 81xx module will always input data bits at the rising edge of the clock, and the host will always output data bits on the falling edge of the clock.
意思是:主設備在時鐘的下降沿發送數據,從設備在時鐘的上升沿接收數據。因此主設備這邊SPI時鐘極性應該配置為下降沿有效。
又如,下面這段話是摘自LCD Driver IC SSD1289:
SDI is shifted into 8-bit shift register on every rising edge of SCK in the order of data bit 7, data bit 6 …… data bit 0.
意思是:從設備SSD1289在時鐘的上升沿接收數據,而且是按照從高位到地位的順序接收數據的。因此主設備的SPI時鐘極性同樣應該配置為下降沿有效。
時鐘極性和相位配置正確后,數據才能夠被準確的發送和接收。因此應該對照從設備的SPI介面時序或者Spec文檔說明來正確配置主設備的時鐘。

軟體過程改進SPI: Software Process Improvement. 軟體過程改進。是軟體企業項目過程質量的改進,CMM,ISO9000-3說的就是這個。

3 SPI -SPI時序圖詳解

SPI時序圖詳解---SPI介面在模式0下輸出第一位數據的時刻
SPI介面有四種不同的數據傳輸時序,取決於CPOL和CPHL這兩位的組合。圖1中表現了這四種時序,時序與CPOL、CPHL的關係也可以從圖中看出。
CPOL是用來決定SCK時鐘信號空閑時的電平,CPOL=0,空閑電平為低電平,CPOL=1時,空閑電平為高電平。CPHA是用來決定採樣時刻的,CPHA=0,在每個周期的第一個時鐘沿採樣,CPHA=1,在每個周期的第二個時鐘沿採樣。
SPI時序圖詳解SPI時序圖詳解

 

廣告