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