開篇分割線,本篇我們來聊聊SPI(串行外圍接口)的原理,這種通信主要用于短距離通信,主要應用于EEPROM、flash、實時時鐘、AD轉換器、解碼器等一類外圍芯片通信,通信一般使用4根線(記住一般就可以了)。
SPI是一種總線通信技術,也就是以主從方式工作,想想485總線很類似,通常有一個主設備和一個or多個從設備組成,通信是由主設備發起,通過CS選擇想要通信的從設備,也就是每個從設備都有一個片選輸入信號CS,一般為低電平使能,高電平禁用,通過主設備來控制從設備是否使能,也就是主設備要和哪一臺從設備通信第一步就是將從設備的cs片選拉低,其它的從設備保持高電平處于禁用狀態。
SCLK是串行時鐘線,是由主設備輸出時鐘信號到從設備,MISI是主設備發送數據到從設備,MISO是主設備接收來自從設備的數據,關于數據的方向看圖中箭頭就可以分辨。
一般MCU內部都有兩個SPI控制器,當然他們大部分時間都是用來做主站(主設備用),掛載多個從設備如下圖:
這個時候我們就需要看下時序圖來了解下數據是怎樣完成傳輸的,在那個點上采集電平的:
從圖中我們看到由CPOL和CPHA組合共有四種工作模式,CPOL是時鐘的初始電平,CPHA是采集數據的時鐘沿,這里可能是上升也可能是下降沿,所以只做第一個沿和第二個沿區分。
針對標準的SPI通信,摩托羅拉公司還對其進行了增強,增加了QSPI擴展,在原有協議的基礎上增加了隊列傳輸機制,退出了隊列串行外圍接口協議(QSPI),使用該接口用戶可以一次性傳輸16個8位or16位的數據傳輸隊列,一旦啟動隊列傳輸是不需要CPU進行干預的,硬件上以80字節的RAM代替數據收發寄存器。
SPI接口應用最多的就是外圍flash芯片,除了標準SPI以外有的還提供Dual和Quad SPI接口:
Dual SPI:通過發送一個命令字節進入Dual半雙工模式,可以加倍的傳輸數據,這個時候MOSI變成SIO0 MISO變成SIO1,即一個時鐘周期發送2個bit數據,數據傳輸速率加倍。
Quad DPI:和Dual SPI類似,只是增加了兩根IO線,共6根傳輸線,這樣一個時鐘內就能傳輸4個bit數據。