SPI(Serial Peripheral Interface)[串行外圍接口]是一種接口總線,一般用於與閃存、傳感器、實時時鐘(RTCs)、模數轉換器等進行通訊。 串行外圍接口(SPI)總線是由摩托羅拉公司開發的,用於在主設備和從設備之間提供全雙工同步串行通訊。ui
SPI教程白皮書設計
如圖1所示,一個標準的SPI鏈接涉及到一個主機master
使用串行時鐘(SCK)、主輸出從輸入(MOSI)、主輸出從輸出(MISO)和從選擇(SS)線鏈接到一個或幾個從機slave
。SCK、MOSI和MISO信號能夠由從機slave
共享,而每一個從機slave
都有一條唯一的SS線。code
Figure 1. 4-wire SPI bus configuration with multiple slavesblog
SPI接口沒有定義數據交換協議,限制了開銷並容許高速數據流。時鐘極性(CPOL)和時鐘相位(CPHA)能夠指定爲「0」或「1」,造成四種獨特的模式,以提供主從通訊的靈活性,如圖2所示。教程
Figure 2. SPI bus timing接口
若是CPOL
和CPHA
都爲' 0 '(定義爲模式0),則在時鐘的前上升沿採樣數據。目前,模式0是SPI總線通訊最多見的模式。若是CPOL
爲' 1 ',CPHA
爲' 0 '(模式2),則在時鐘的前降邊緣採樣數據。一樣,CPOL
= ' 0 '和CPHA
= ' 1 ' (Mode 1)在尾降邊緣採樣,CPOL
= ' 1 '和CPHA
= ' 1 ' (Mode 3)在尾升邊緣採樣。下面的表1總結了可用的模式事務
CPOL:時鐘極性,表示時鐘線空閒時是高電平
1
仍是低電平0
。
CPHA:時鐘相位,表示是在時鐘的前沿0
仍是尾沿1
採樣數據。ip
Mode | CPOL | CPHA |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
Table 1. SPI mode definitions開發
除了標準的4線配置外,SPI接口還擴展到包括各類IO標準,包括用於減小引腳數的3線和用於更高吞吐量的雙或四I/O。
在3線模式下,MOSI和MISO線路組合成單個雙向數據線,如圖3所示。事務是半雙工的,以容許雙向通訊。減小數據線的數量並以半雙工模式運行也會下降最大可能的吞吐量; 許多3線設備具備低性能要求,而設計時考慮到低引腳數。
Figure 3. 3-wire SPI configuration with one slave
多I/O變體(如雙I/O和四I/O)在標準外添加了額外的數據線,以提升吞吐量。利用多I/O模式的組件能夠與並行器件的讀取速度相媲美,同時仍然能夠減小引腳數量。這種性能提高使得可以從閃存中隨機訪問和直接執行程序(XIP)。
例如,四路I/O設備在與高速設備通訊時可提供四倍於標準4線SPI接口的性能。圖4顯示了單個四通道IO從站配置的示例。
Figure 4. Quad IO SPI configuration with one slave
SPI協議沒有定義數據流的結構; 數據的組成徹底取決於組件設計者。可是,許多設備遵循相同的基本格式來發送和接收數據,從而容許來自不一樣供應商的部件之間的互操做性。
大多數SPI閃存都有一個寫狀態寄存器命令,用於寫入一個或兩個字節的數據,如圖5所示。要寫入狀態寄存器,SPI主機首先啓用當前器件的從選擇線。而後,主設備輸出適當的指令,後跟兩個數據字節,用於定義預期的狀態寄存器內容。因爲事務不須要返回任何數據,所以從設備將MISO線保持在高阻抗狀態,而且主設備屏蔽任何輸入數據。最後,從機選擇信號被取消以結束事務。
Figure 5. Write command using a single-byte instruction and two-byte data word
狀態寄存器讀取事務與寫入事務相似,但如今利用從器件返回的數據,如圖6所示。在發送讀取狀態寄存器指令後,從器件開始以MISO線路傳輸數據,數率爲每八個時鐘週期一個字節。主機接收比特流並經過取消SS信號來完成事務。
Figure 6. Read command using a single-byte instruction and two-byte data word
因爲其性能的提升,四線IO在閃存中愈來愈受歡迎。四線IO沒有使用單輸出和單輸入接口,而是使用4條獨立的半雙工數據線來傳輸和接收數據,其性能是標準四線SPI的四倍。
圖7顯示了Spansion S25FL016K串行NorFLASH器件的讀取示例命令。要從器件讀取,主器件首先在第一個IO線上發送快速讀取命令(EBh),而其餘全部命令都處於三態。接下來,主機發送地址; 因爲接口如今有4條雙向數據線,所以它能夠利用它們在8個時鐘週期內發送一個完整的24位地址和8個模式位。而後,該地址跟隨2個虛擬字節(4個時鐘週期),以容許器件有額外的時間來設置初始地址。
Figure 7. Quad mode fast read sequence for Spansion S25FL016K or equivalent
在主機發送地址週期和虛擬字節以後,組件開始發送數據字節; 每一個時鐘週期由分佈在4個IO線上的數據半字節組成,每一個數據字節總共有兩個時鐘週期。將此與咱們簡單讀取事務所需的16個時鐘週期進行比較,很容易看出爲何四模式在高速閃存應用中愈來愈受歡迎!