前言
讓我們回顧一下,我們學(xué)習(xí)了串口通訊(優(yōu)點(diǎn)是全雙工,缺點(diǎn)是只能點(diǎn)對(duì)點(diǎn)通訊)
另外還學(xué)習(xí)了IIC通訊(優(yōu)點(diǎn)是一主多從通訊,缺點(diǎn)是半雙工)
技巧:看一個(gè)總線是半雙工還是全雙工就看有幾根數(shù)據(jù)線
那有沒有總線是以全雙工,并且還是一主多從的方式通訊呢?
答案是有的,那就是用SPI通訊
寫數(shù)據(jù)
先來看看設(shè)備之間如何使用SPI方式來通訊
可以看出設(shè)備之間有4根線連接(SCK、MOSI、MISO、SS),下面來細(xì)說每根線的作用
SS為片選信號(hào)線(用來選擇哪個(gè)設(shè)備)
MOSI (master output , slave input)主機(jī)輸出,從機(jī)輸入
MISO(master input , slave output )主機(jī)輸入,從機(jī)輸出
SCK為時(shí)鐘信號(hào)線(用來提供基準(zhǔn)時(shí)鐘信號(hào))
下面以控制EEPROM為例(圖中型號(hào)為93C46的是EEPROM)
假設(shè)EEPROM里面有128個(gè)內(nèi)存地址(用一個(gè)字節(jié)就可以尋址完)
這SPI的數(shù)據(jù)格式
無論是寫操作還是讀操作,起始位都為1,但操作碼01是寫操作,操作碼10是讀操作
當(dāng)?shù)刂反a寫入EEPROM中寄存器的地址,這時(shí)就選中了這個(gè)地址,相當(dāng)于打通了直達(dá)該地址的通道
緊接著寫入數(shù)據(jù),這樣數(shù)據(jù)被保存下來了
用電平表示是這樣的
那是不是直接發(fā)送給被控設(shè)備就行了?
當(dāng)然是不行的
因?yàn)镾PI是串行同步通訊的,所以需要數(shù)據(jù)線和時(shí)鐘線兩根線才能傳輸數(shù)據(jù)
而且SPI發(fā)送數(shù)據(jù)是當(dāng)時(shí)鐘線處于跳變沿時(shí)才能被發(fā)送的(具體是處于什么跳變沿,取決于該設(shè)備)這里以上升沿為例
在SS(片選信號(hào))被選中期間,當(dāng)SCK(時(shí)鐘信號(hào))發(fā)生上升沿,數(shù)據(jù)就被確定下來
以上面的數(shù)據(jù)為例
根據(jù)時(shí)鐘信號(hào)線空閑狀態(tài)是高電平還是低電平,又因?yàn)槊糠N狀態(tài)可以分為上升沿和下降沿觸發(fā)
共計(jì)有4種狀態(tài)
讀數(shù)據(jù)
讀操作也是同樣的操作
現(xiàn)在要把EEPROM里的數(shù)據(jù)讀出來
根據(jù)SPI的數(shù)據(jù)格式
現(xiàn)在需要MOSI寫入1 10 0000001
MISO后半段就可以讀取數(shù)據(jù)了(上面EEPROM存儲(chǔ)的為0000 1111)
總結(jié)
SPI是全雙工,一主多從
SPI是當(dāng)發(fā)生跳變沿時(shí),傳輸數(shù)據(jù)
SPI本質(zhì)是移位寄存器
-
SPI
+關(guān)注
關(guān)注
17文章
1715瀏覽量
91830 -
通訊
+關(guān)注
關(guān)注
9文章
908瀏覽量
34980
原文標(biāo)題:秒懂SPI
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論