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