SPI介绍
目錄
1.什么是SPI
2.SPI接口
2.1.SPI模式:極性和時(shí)鐘相位
2.2.SPI三線總線和多IO配置
3.SPI總線事務(wù)
3.1.簡單SPI寫事務(wù)
3.2.簡單SPI讀事務(wù)
3.3.四線IO事務(wù)
1.什么是SPI
SPI(Serial Peripheral Interface)[串行外圍接口]是一種接口總線,通常用于與閃存、傳感器、實(shí)時(shí)時(shí)鐘(RTCs)、模數(shù)轉(zhuǎn)換器等進(jìn)行通信。 串行外圍接口(SPI)總線是由摩托羅拉公司開發(fā)的,用于在主設(shè)備和從設(shè)備之間提供全雙工同步串行通信。
SPI教程白皮書
2.SPI接口
如圖1所示,一個(gè)標(biāo)準(zhǔn)的SPI連接涉及到一個(gè)主機(jī)master使用串行時(shí)鐘(SCK)、主輸出從輸入(MOSI)、主輸出從輸出(MISO)和從選擇(SS)線連接到一個(gè)或幾個(gè)從機(jī)slave。SCK、MOSI和MISO信號可以由從機(jī)slave共享,而每個(gè)從機(jī)slave都有一條惟一的SS線。
Figure 1. 4-wire SPI bus configuration with multiple slaves
2.1.SPI模式:極性和時(shí)鐘相位
SPI接口沒有定義數(shù)據(jù)交換協(xié)議,限制了開銷并允許高速數(shù)據(jù)流。時(shí)鐘極性(CPOL)和時(shí)鐘相位(CPHA)可以指定為“0”或“1”,形成四種獨(dú)特的模式,以提供主從通信的靈活性,如圖2所示。
Figure 2. SPI bus timing
如果CPOL和CPHA都為' 0 '(定義為模式0),則在時(shí)鐘的前上升沿采樣數(shù)據(jù)。目前,模式0是SPI總線通信最常見的模式。如果CPOL為' 1 ',CPHA為' 0 '(模式2),則在時(shí)鐘的前降邊緣采樣數(shù)據(jù)。同樣,CPOL = ' 0 '和CPHA = ' 1 ' (Mode 1)在尾降邊緣采樣,CPOL = ' 1 '和CPHA = ' 1 ' (Mode 3)在尾升邊緣采樣。下面的表1總結(jié)了可用的模式
CPOL:時(shí)鐘極性,表示時(shí)鐘線空閑時(shí)是高電平
1還是低電平0。
CPHA:時(shí)鐘相位,表示是在時(shí)鐘的前沿0還是尾沿1采樣數(shù)據(jù)。
| Mode | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
Table 1. SPI mode definitions
2.2.SPI三線總線和多IO配置
除了標(biāo)準(zhǔn)的4線配置外,SPI接口還擴(kuò)展到包括各種IO標(biāo)準(zhǔn),包括用于減少引腳數(shù)的3線和用于更高吞吐量的雙或四I/O。
在3線模式下,MOSI和MISO線路組合成單個(gè)雙向數(shù)據(jù)線,如圖3所示。事務(wù)是半雙工的,以允許雙向通信。減少數(shù)據(jù)線的數(shù)量并以半雙工模式運(yùn)行也會降低最大可能的吞吐量; 許多3線設(shè)備具有低性能要求,而設(shè)計(jì)時(shí)考慮到低引腳數(shù)。
Figure 3. 3-wire SPI configuration with one slave
多I/O變體(如雙I/O和四I/O)在標(biāo)準(zhǔn)外添加了額外的數(shù)據(jù)線,以提高吞吐量。利用多I/O模式的組件可以與并行器件的讀取速度相媲美,同時(shí)仍然可以減少引腳數(shù)量。這種性能提升使得能夠從閃存中隨機(jī)訪問和直接執(zhí)行程序(XIP)。
例如,四路I/O設(shè)備在與高速設(shè)備通信時(shí)可提供四倍于標(biāo)準(zhǔn)4線SPI接口的性能。圖4顯示了單個(gè)四通道IO從站配置的示例。
Figure 4. Quad IO SPI configuration with one slave
3.SPI總線事務(wù)
SPI協(xié)議沒有定義數(shù)據(jù)流的結(jié)構(gòu); 數(shù)據(jù)的組成完全取決于組件設(shè)計(jì)者。但是,許多設(shè)備遵循相同的基本格式來發(fā)送和接收數(shù)據(jù),從而允許來自不同供應(yīng)商的部件之間的互操作性。
3.1.簡單SPI寫事務(wù)
大多數(shù)SPI閃存都有一個(gè)寫狀態(tài)寄存器命令,用于寫入一個(gè)或兩個(gè)字節(jié)的數(shù)據(jù),如圖5所示。要寫入狀態(tài)寄存器,SPI主機(jī)首先啟用當(dāng)前器件的從選擇線。然后,主設(shè)備輸出適當(dāng)?shù)闹噶睿蟾鷥蓚€(gè)數(shù)據(jù)字節(jié),用于定義預(yù)期的狀態(tài)寄存器內(nèi)容。由于事務(wù)不需要返回任何數(shù)據(jù),因此從設(shè)備將MISO線保持在高阻抗?fàn)顟B(tài),并且主設(shè)備屏蔽任何輸入數(shù)據(jù)。最后,從機(jī)選擇信號被取消以結(jié)束事務(wù)。
Figure 5. Write command using a single-byte instruction and two-byte data word
3.2.簡單SPI讀事務(wù)
狀態(tài)寄存器讀取事務(wù)與寫入事務(wù)類似,但現(xiàn)在利用從器件返回的數(shù)據(jù),如圖6所示。在發(fā)送讀取狀態(tài)寄存器指令后,從器件開始以MISO線路傳輸數(shù)據(jù),數(shù)率為每八個(gè)時(shí)鐘周期一個(gè)字節(jié)。主機(jī)接收比特流并通過取消SS信號來完成事務(wù)。
Figure 6. Read command using a single-byte instruction and two-byte data word
3.3.四線IO事務(wù)
由于其性能的提高,四線IO在閃存中越來越受歡迎。四線IO沒有使用單輸出和單輸入接口,而是使用4條獨(dú)立的半雙工數(shù)據(jù)線來傳輸和接收數(shù)據(jù),其性能是標(biāo)準(zhǔn)四線SPI的四倍。
圖7顯示了Spansion S25FL016K串行NorFLASH器件的讀取示例命令。要從器件讀取,主器件首先在第一個(gè)IO線上發(fā)送快速讀取命令(EBh),而其他所有命令都處于三態(tài)。接下來,主機(jī)發(fā)送地址; 由于接口現(xiàn)在有4條雙向數(shù)據(jù)線,因此它可以利用它們在8個(gè)時(shí)鐘周期內(nèi)發(fā)送一個(gè)完整的24位地址和8個(gè)模式位。然后,該地址跟隨2個(gè)虛擬字節(jié)(4個(gè)時(shí)鐘周期),以允許器件有額外的時(shí)間來設(shè)置初始地址。
Figure 7. Quad mode fast read sequence for Spansion S25FL016K or equivalent
在主機(jī)發(fā)送地址周期和虛擬字節(jié)之后,組件開始發(fā)送數(shù)據(jù)字節(jié); 每個(gè)時(shí)鐘周期由分布在4個(gè)IO線上的數(shù)據(jù)半字節(jié)組成,每個(gè)數(shù)據(jù)字節(jié)總共有兩個(gè)時(shí)鐘周期。將此與我們簡單讀取事務(wù)所需的16個(gè)時(shí)鐘周期進(jìn)行比較,很容易看出為什么四模式在高速閃存應(yīng)用中越來越受歡迎!
總結(jié)
- 上一篇: Markdown语法 (中文版)
- 下一篇: Interger不可变原理