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