SPI协议简单介绍
導言
SPI是串行擴展總線。
串行總線技術可以使系統的硬件設計大大簡化、系統的體積減小、可靠性提高。同時系統的更改和擴充極為容易。
常用的串行擴展總線有:I2C(Inter IC Bus)總線、單總線(1-WIRE BUS)、SPI(Serial Peripheral Interface)總線及Microwire/PLUS等。
一、SPI協議
SPI總線是微控制器四線的外部總線。SPI沒有明文標準,是一種事實總線,對通信操作的實現由芯片廠商和驅動開發者通過data sheet和application notes溝通實現的細節。SPI是四根信號線協議,如下:
SCLK:Serial Clock(Output from master);
MOSI:Master Output Slave Input(Outpt from Master);
MISO:Master Input Slave Output(Output from Slave);
SS:Slave Select(Active low,Output from Master);
二、 SPI協議通信
SPI是單主設備通信,總線中只有一個設備發起通信,能發起通信的設備稱為主設備。當SPI主設備想讀/寫從設備時,首先拉低對應從設備的SS線(SS是低電平有效);然后發送工作脈沖到時鐘線上,在相應的脈沖時間上,主設備把信號發到MOSI實現寫,同時可以對MISO線采樣實現讀。
三、SPI操作模式
SPI有四種操作模式:模式0、模式1、模式2、模式3。
這幾個模式之間的區別是定義了在時鐘脈沖的哪條邊沿轉換(toggles)輸出信號,哪條邊沿采樣輸入信號,還有時鐘脈沖的穩定電平值(即時鐘信號無效時是高還是低)。每種模式由兩個參數描述,稱為時鐘極CPOL(clock polarity)與時鐘期CPHA(clock phase)。
Mode = Bit[CPOL]Bit[CPHA]
CPOL=0表示 SCK在空閑狀態時為0;
CPOL=1表示 SCK在空閑狀態時為1;
CPHA=0表示 在SCK第一個邊沿時輸入輸出數據有效;
CPHA=1表示 在SCK第二個邊沿時輸入輸出數據有效;
一般從器件的工作模式是固定的,主機要跟從機采用一樣的工作模式,雙方才能正常通信。如果有多個從設備,且從設備使用了不同的工作參數,那么主設備與不用的從設備通信時必須重新配置這些參數。
3.1 Mode0
Mode0時,CPOL=0,CPHA=0,SCK空閑狀態為低電平,主機數據在每個上升沿被從機采樣,數據輸出同理。?
3.2 Mode1
Mode1時,CPOL=0,CPHA=1,SCK空閑時為低電平,在SCK第二個邊沿時數據有效,即SCK下降沿有效。
?3.3 Mode2
Mode2時,CPOL=1,CPHA=0,SCK空閑時為高電平,在SCK第一個邊沿時數據有效,即SCK下降沿有效。
3.4 Mode3
Mode3時,CPOL=1,CPHA=1,SCK空閑狀態為高電平,主機數據在第二個邊沿時有效,即每個上升沿被從機采樣,數據輸出同理。
?四、SPI基本時序
SS為低電平時,表示對應的從機設備被使能,在每個SCK周期可以傳輸1Bit數據,采樣時刻取決于器件支持的SPI mode,根據不同SPI器件的控制方法,在進行正式的數據讀寫操作前,一般需要先寫入控制字,然后是寄存器地址和數據。
如下是FM25V05鐵電存儲器采用SPI模式0的寫時序,SS(CS)被拉低,主機數據在每個上升沿被從機采樣,Opcode是控制字,控制字采樣結束后開始采樣數據。
?如下是FM25V05鐵電存儲器采用SPI模式0的讀時序:
?需要注意的是在SS下降沿和SCLK第一個邊沿,或SS上升沿和SCLK最后一個邊沿之間要留有一定的延遲時間,一般是0.5個SCLK周期。
參考:
?【1】關于SPI協議,看這一篇文章就夠了!-面包板社區
?【2】總線I2C和SPI,工程師喜歡用哪一個?
?
總結
- 上一篇: 使用Dependency Walker对
- 下一篇: 查看centos中的用户和用户组