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