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