上篇內容我們介紹了IIC總線通信接口及其協議,這一篇文章我們介紹另一種項目開發中非常常見的通信接口——SPI總線。
SPI(Serial Peripheral Interface,串行外設接口)總線是摩托羅拉公司設計的一種同步串行通信接口。 和IIC總線一樣,它也分主機和從機,一個主機也可以接多個從機,但從機沒有地址之分,它們是通過主機的硬件選擇來確定哪個設備與主機通信,每個設備有兩個數據端口,即輸入、輸出端口,通常情況下它包含4根通信引腳,在某些特殊情形下也可以是3線甚至2線,即可以忽略片選信號或某根數據信號,當然具體情況根據電路應用而定!
SS/CS——片選信號端口
SCLK——時鐘信號端口
MOSI——主出從入信號端口
MISO——主入從出信號端口
硬件接線圖:
硬件連接圖
部分資料或芯片手冊中會使用SDO,SDI來定義兩數據端口MOSI和MISO,兩種說法本質都是一樣的
SDO,SDI連線示意
相比于IIC總線,SPI總線協議更為簡單,不需要驗證地址,也沒有校驗信號,又因為擁有獨立的輸入輸出端口,所以在信號傳遞方面它擁有更高的速率。
多機通信電路
通信協議
SPI總線中由于涉及到時鐘信號極性(Cpol: Clock Polarity)和相位(Cpha: Clock Phase)的影響使得協議分為4種模式。
CPOL:即時鐘的極性,通信的整個過程包含空閑狀態和工作狀態,如果SCLK在空閑狀態是高電平,那么CPOL=1,如果是低電平,那么就是CPOL=0。
CPHA:即時鐘的相位,在這里就是SCLK的跳變邊沿,如果在SCLK信號的第一個跳變沿就開始數據傳輸則CPHA=0,否則若是在第二個邊沿才開始數據傳輸則CPHA=1。
讀起來還是有點拗口,看時序圖會更直觀一點:
時序圖
當然這些不用記憶,你使用的時候根據具體的芯片手冊的時序說明進行配置就好了,不要把簡單的事情復雜化。心里有個概念就好,假如你是應屆畢業生參加面試那保證自己能區分開來這幾種模式就可以,很多畢業生連IIC和SPI是什么東西都不知道呢,因為教材里面不一定會介紹這些通信協議,51單片機教材里印象中好像除了串口通信外沒有介紹其他的通信方式,即使有類似應用也沒使用這些專業名稱來說明,其他的很多都得是自己買塊板子回來折騰才碰得到的。如果你是在校學生看看教材或者不妨問問你身邊的同學試試。
一般情況下作為主機的單片機如果硬件接口具備SPI總線端口編程時直接根據對應寄存器配置為從機可以接受的模式使能該總線功能即可,若是普通不帶SPI總線的單片機,那我們也簡單,和上一篇中的模擬IIC通信一樣,根據需要在程序中模擬出時序就好了。這里再次說明了讀芯片數據手冊的重要性,有的人或許芯片手冊都不看,從網上找一個別人跑得通的代碼就copy過去,或許可能剛好能用,也可能搞半天自己的芯片啥數據都讀不出來,這是初學者大忌,所以學技術切莫急功近利,每一次的僥幸可能造成日后的大雷。
通信程序
SPI通信協議的程序使用起來比較靈活,它的應用的場合也比較多,具體的示例程序在后面的實際例子中再做介紹了。結合上一篇IIC的示例程序,今天的SPI協議程序應該腦海里應該也有思路了吧。
-
接口
+關注
關注
33文章
8691瀏覽量
151911 -
通信
+關注
關注
18文章
6070瀏覽量
136423 -
端口
+關注
關注
4文章
990瀏覽量
32206 -
SPI總線
+關注
關注
4文章
104瀏覽量
27665 -
IIC總線
+關注
關注
1文章
66瀏覽量
20397
發布評論請先 登錄
相關推薦
評論