一、技術(shù)性能
SPI接口是Motorola 首先提出的全雙工三線同步串行外圍接口,采用主從模式(Master Slave)架構(gòu);支持多slave模式應(yīng)用,一般僅支持單Master。時(shí)鐘由Master控制,在時(shí)鐘移位脈沖下,數(shù)據(jù)按位傳輸,高位在前,低位在后(MSB first);SPI接口有2根單向數(shù)據(jù)線,為全雙工通信,目前應(yīng)用中的數(shù)據(jù)速率可達(dá)幾Mbps的水平。總線結(jié)構(gòu)如下圖所示。
二、接口定義
SPI接口共有4根信號(hào)線,分別是:設(shè)備選擇線、時(shí)鐘線、串行輸出數(shù)據(jù)線、串行輸入數(shù)據(jù)線。
(1)MOSI:主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入
(2)MISO:主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出
(3)SCLK :時(shí)鐘信號(hào),由主器件產(chǎn)生
(4)/SS:從器件使能信號(hào),由主器件控制
三、內(nèi)部結(jié)構(gòu)
四、 時(shí)鐘極性和時(shí)鐘相位
在SPI操作中,最重要的兩項(xiàng)設(shè)置就是時(shí)鐘極性(CPOL或UCCKPL)和時(shí)鐘相位(CPHA或UCCKPH)。時(shí)鐘極性設(shè)置時(shí)鐘空閑時(shí)的電平,時(shí)鐘相位設(shè)置讀取數(shù)據(jù)和發(fā)送數(shù)據(jù)的時(shí)鐘沿。
主機(jī)和從機(jī)的發(fā)送數(shù)據(jù)是同時(shí)完成的,兩者的接收數(shù)據(jù)也是同時(shí)完成的。所以為了保證主從機(jī)正確通信,應(yīng)使得它們的SPI具有相同的時(shí)鐘極性和時(shí)鐘相位。
SPI接口時(shí)鐘配置心得:在主設(shè)備這邊配置SPI接口時(shí)鐘的時(shí)候一定要弄清楚從設(shè)備的時(shí)鐘要求,因?yàn)橹髟O(shè)備這邊的時(shí)鐘極性和相位都是以從設(shè)備為基準(zhǔn)的。因此在時(shí)鐘極性的配置上一定要搞清楚從設(shè)備是在時(shí)鐘的上升沿還是下降沿接收數(shù)據(jù),是在時(shí)鐘的下降沿還是上升沿輸出數(shù)據(jù)。
五、傳輸時(shí)序
SPI接口在內(nèi)部硬件實(shí)際上是兩個(gè)簡(jiǎn)單的移位寄存器,傳輸?shù)臄?shù)據(jù)為8位,在主器件產(chǎn)生的從器件使能信號(hào)和移位脈沖下,按位傳輸,高位在前,低位在后。如下圖所示,在SCLK的下降沿上數(shù)據(jù)改變,上升沿一位數(shù)據(jù)被存入移位寄存器。
六、數(shù)據(jù)傳輸
在一個(gè)SPI時(shí)鐘周期內(nèi),會(huì)完成如下操作:
1) 主機(jī)通過MOSI線發(fā)送1位數(shù)據(jù),從機(jī)通過該線讀取這1位數(shù)據(jù);
2) 從機(jī)通過MISO線發(fā)送1位數(shù)據(jù),主機(jī)通過該線讀取這1位數(shù)據(jù)。
這是通過移位寄存器來實(shí)現(xiàn)的。如下圖所示,主機(jī)和從機(jī)各有一個(gè)移位寄存器,且二者連接成環(huán)。隨著時(shí)鐘脈沖,數(shù)據(jù)按照從高位到低位的方式依次移出主機(jī)寄存器和從機(jī)寄存器,并且依次移入從機(jī)寄存器和主機(jī)寄存器。當(dāng)寄存器中的內(nèi)容全部移出時(shí),相當(dāng)于完成了兩個(gè)寄存器內(nèi)容的交換。
七、優(yōu)缺點(diǎn)
SPI接口具有如下優(yōu)點(diǎn):
1) 支持全雙工操作;
2) 操作簡(jiǎn)單;
3) 數(shù)據(jù)傳輸速率較高。
同時(shí),它也具有如下缺點(diǎn):
1) 需要占用主機(jī)較多的口線(每個(gè)從機(jī)都需要一根片選線);
2) 只支持單個(gè)主機(jī)。
3) 沒有指定的流控制,沒有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。
二、典型案例:
舉的是一個(gè)已穩(wěn)定使用的spi接口flash設(shè)備的例子,spi控制器是一個(gè)CPU上的外圍SOC,下圖是該spi控制器的寄存器手冊(cè):
寄存器300-307是用于主機(jī)發(fā)送數(shù)據(jù),308-30f為主機(jī)接收數(shù)據(jù),
寄存器310用于設(shè)置spi時(shí)鐘頻率(用于設(shè)置分頻),
寄存器311用于指定發(fā)送的長度,
寄存器312為控制寄存器,包括中斷使能(實(shí)際使用中未使能)、傳輸寄存器序(MSB/LSB,一般選先傳輸高位寄存器的內(nèi)容)、上升沿還是下降沿更新數(shù)據(jù)(一般選下降沿)、是否自動(dòng)片選(一般不使用自動(dòng)片選,而是由寄存器313指定)等,
寄存器313為片選寄存器,指定片選哪一個(gè)spi從設(shè)備,
寄存器314為閑忙寄存器,用于查詢是否忙,以及控制啟動(dòng)傳輸。
如下的代碼片段,指示了怎么操作spi控制器寄存器:
SPI_ADDR為spi控制器寄存器基址,代碼中由變量p_spi對(duì)應(yīng),并設(shè)置相關(guān)寄存器的值,包括控制寄存器312、時(shí)鐘頻率寄存器310、發(fā)送長度寄存器311(值為0x10即16,意為16bit即兩字節(jié),發(fā)送內(nèi)容為0x0500確實(shí)為兩字節(jié))、發(fā)送內(nèi)容寄存器300、片選寄存器313、最后設(shè)置啟動(dòng)發(fā)送(閑忙寄存器314),全部完成后,等待閑忙寄存器314指示狀態(tài)為閑時(shí),說明已收到回復(fù),進(jìn)而讀取接收寄存器308獲取結(jié)果。
事實(shí)上可以發(fā)現(xiàn),在有spi控制器時(shí),也就是說無需用gpio模擬spi時(shí)序時(shí),僅需操作spi控制器寄存器,屏蔽了很多spi物理協(xié)議細(xì)節(jié)。
-
FlaSh
+關(guān)注
關(guān)注
10文章
1638瀏覽量
148181 -
SPI
+關(guān)注
關(guān)注
17文章
1711瀏覽量
91748
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論