SPI通信協(xié)議原理詳解(上)
SPI(Serial Peripheral Interface,串行外設(shè)接口)是一種高速、全雙工、同步的串行通信協(xié)議,由摩托羅拉公司于20世紀80年代開發(fā),廣泛應(yīng)用于短距離設(shè)備間的數(shù)據(jù)傳輸,如微控制器與傳感器、存儲器、顯示屏等外設(shè)的通信。其核心優(yōu)勢在于結(jié)構(gòu)簡單、傳輸速度快、支持多設(shè)備連接,成為嵌入式系統(tǒng)中最常用的通信協(xié)議之一。
一、SPI的基本硬件結(jié)構(gòu)
SPI協(xié)議的硬件連接采用四線制(部分簡化場景可省略部分線路),核心信號線包括:
SCLK(Serial Clock,串行時鐘):由主設(shè)備(Master)產(chǎn)生,用于同步主從設(shè)備的數(shù)據(jù)傳輸,決定通信速率。時鐘頻率可根據(jù)設(shè)備支持范圍調(diào)整,通常在幾MHz到幾十MHz之間。
MOSI(Master Out Slave In,主出從入):主設(shè)備向從設(shè)備發(fā)送數(shù)據(jù)的信號線,數(shù)據(jù)由主設(shè)備通過該線路傳輸?shù)綇脑O(shè)備。
MISO(Master In Slave Out,主入從出):從設(shè)備向主設(shè)備返回數(shù)據(jù)的信號線,數(shù)據(jù)由從設(shè)備通過該線路傳輸?shù)街髟O(shè)備,實現(xiàn)全雙工通信。
SS(Slave Select,從設(shè)備選擇):由主設(shè)備控制,用于指定當前通信的從設(shè)備。SPI支持一主多從架構(gòu),每個從設(shè)備都有獨立的SS線(或通過譯碼器共享),主設(shè)備通過拉低某一從設(shè)備的SS線使其進入工作狀態(tài)。
在通信過程中,主設(shè)備負責初始化通信并提供時鐘信號,從設(shè)備則被動響應(yīng)主設(shè)備的操作。這種“主從模式”確保了通信的有序性,避免多設(shè)備競爭總線的問題。
二、SPI的通信原理與時序
SPI的通信基于“同步移位”機制,主設(shè)備通過SCLK時鐘信號同步數(shù)據(jù)的發(fā)送與接收,具體過程如下:
1. 通信初始化
主設(shè)備首先拉低目標從設(shè)備的SS線,告知該從設(shè)備即將進行數(shù)據(jù)傳輸。此時,未被選中的從設(shè)備會忽略SCLK和MOSI信號,僅等待自身SS線被激活。
2. 數(shù)據(jù)傳輸時序
SPI的數(shù)據(jù)傳輸以“位”為單位,主設(shè)備和從設(shè)備通過MOSI和MISO線同時交換數(shù)據(jù),實現(xiàn)全雙工通信。其關(guān)鍵時序參數(shù)包括:
時鐘極性(CPOL):定義SCLK在空閑狀態(tài)(無數(shù)據(jù)傳輸時)的電平。CPOL=0時,空閑狀態(tài)為低電平;CPOL=1時,空閑狀態(tài)為高電平。
時鐘相位(CPHA):定義數(shù)據(jù)采樣的時刻。CPHA=0時,數(shù)據(jù)在SCLK的第一個跳變沿(上升沿或下降沿)被采樣;CPHA=1時,數(shù)據(jù)在第二個跳變沿被采樣。
通過CPOL和CPHA的組合,SPI支持四種通信模式,不同設(shè)備需約定一致的模式才能正常通信。例如,SD卡通常使用模式0(CPOL=0,CPHA=0),而某些傳感器可能使用模式3(CPOL=1,CPHA=1)。
3. 數(shù)據(jù)幀格式
SPI協(xié)議對數(shù)據(jù)幀格式(如位數(shù)、校驗位等)沒有強制規(guī)定,由主從設(shè)備協(xié)商確定,常見的幀長為8位(1字節(jié))。傳輸時,主設(shè)備通過移位寄存器將數(shù)據(jù)逐位發(fā)送到MOSI線,同時從MISO線逐位接收從設(shè)備的數(shù)據(jù),一次時鐘脈沖完成一位數(shù)據(jù)的雙向傳輸。例如,主設(shè)備發(fā)送0x55(二進制01010101)時,從設(shè)備可能同時返回0xAA(二進制10101010),8個時鐘脈沖后完成整字節(jié)的交換。