通訊協議 SPI通信

SPI通信

1.簡要分析

數據傳輸有串行傳送和並行傳送兩種方式。

並行傳送已其高速度曾佔領數據傳送領域很長一段時間,其中並行傳送的集成電路,外圍設備從CPU,RAM/ROM到打印機。

串行通信端口,即COM1,COM2,一般接鼠標,外置modem或其他串行設備,它在一個方向上只能傳送一路信號,一次只能傳送一個二進制位,傳送一個字節信息時,只能一位一位地依次傳送。
在這裏插入圖片描述

並行傳送:

優點:多位數據一起傳送,傳送速度快。
缺點:內存有多少位,就要用多少數據線,所以需要大量的數據線,成本高。
在這裏插入圖片描述

串行傳送:

優點:使用數據線少,在遠距離通信中可以節約通信成本。
缺點:因爲每次只能傳送一位數據,傳送速度低。
其中串行傳送還分單工通信,半雙工通信以及全雙工通信,還可分爲異步通信與同步通信等等。

2.詳細分析

從原理上講:

串行傳送是按位傳送,只利用一根數據線進行傳送,例如:要傳送一個字節(8位)數據,是按照該字節中從最高位逐位傳送,直至最低位。

而並行傳送是一次將所有一字節中8位信號一併傳送出去。自然最少需要8根信號線。如果按每次傳送的數據流量來看,並行傳送遠快於串口,在電腦發展初期,並行數據傳送速率還是很高的。
並行傳送缺點:

(1) 干擾問題

其根本原因是由於傳送速率太快,一般達到百兆以上,信號線上傳遞的頻率將超過100MHz。

想想看,調頻收音機頻率也不過是88〜108MHz,也就是說,若用並行傳送的話,是8根天線放在一起來傳送信號,易發生干擾。
但如果加強屏蔽,減少信號線間的耦合電容,是可以繼續增大傳送速度的,不過這將變的不現實,因爲這將必然導致信號線耗用更多金屬,截面積更大。

(2) 同步問題

並行傳送提升困難的最主要原因是同步問題。並行傳送時,發送器是同時將8位信號電平加在信號線上,電信號雖然是以光速傳送,但仍有延遲,因此,8位信號不是嚴格同時到達接收端,速率小時,由於每一字節在信號線上的持續時間較長,這種到達時間上的不同步並不嚴重,隨着傳送速率的增加,與8位信號到達的時間差異相比,每一字節的持續時間顯得越來越短,最終導致前一字節的某幾位與後一字節的幾位同時到達接受端,這就造成傳送失敗,而隨着信號線的加長,這種現象還會越發嚴重,直至無法使用,這就是並行傳送的致命缺點。

串行傳送由於只有一位信號在信號線上,沒有位同步問題,因此傳送頻率可以繼續提高,當前傳送速率已經達到1Gb/S(1000m)以上,而且還在提高,而並行傳送在100Mb/S左右就停滯不前了,可以預見,串行傳送將會比並行傳送更快。

3.擴展資料

單工數據傳送只支持數據在一個方向上傳送,就是指A只能發信號,而B只能接收信號,通信是單向的,就像燈塔之於航船,燈塔發出光信號而航船隻能接收信號以確保自己行駛在正確的航線上。
在這裏插入圖片描述
半雙工數據傳送允許數據在兩個方向上傳送,但是在某一時刻,只允許數據在一個方向上傳送,實際上是一種可以切換方向的單工通信,在同一時間只可以有一方接收或發送信息,可以實現雙向通信,就是指A能發信號給B,B也能發信號給A,但這兩個過程不能同時進行。最典型的例子像影視作品中看到的對講機一樣:

007:呼叫總部,請求支援,OVER

總部:收到,增援人員將在5分鐘內趕到,OVER

007:要5分鐘這麼久?要快呀!OVER

總部:……

GAME OVER

在這裏,每方說完一句話後都要加一個OVER,然後切換到接收狀態,同時也告知對方:你可以發言了。如果雙方同時處於接收狀態,或同時處於發送狀態,便不能正常通信了。
在這裏插入圖片描述
全雙工數據傳送允許數據同時在兩個方向上傳輸,因此全雙工傳送是兩個單工通信方式的結合,它要求發送設備和接收設備都有獨立的接收和發送能力,在同一時間可以同時接收和發送信息,實現雙向通信,就是指在A給B發信號的同時,B也可以給A發信號。典型的例子就是打電話。

A:我跟你說呀……

B:你先聽我說,情況是這樣的……

A和B在說的同時也能聽到對方說的內容,這就是全雙工。
在這裏插入圖片描述
SPI是串行外設接口(Serial Peripheral Interface)的縮寫,是一種串行,全雙工的三線同步總線,SPI接口比UART相比,多了一根時鐘線。

SPI接口總線使用四條線:
串行時鐘線-------------------------SCK;
主機輸入/從機輸出數據線------------MISO;
主機輸出/從機輸入數據線------------MOSI;
低電平有效的從機選擇線-------------SSN;

在SPI總線上,某一時刻可以出現多個從機,但只能存在一個主機,主機通過片選線來確定要通信的從機,這就要求從機的MISO口具有三態特性,使得該線在器件未被選通時表現爲高阻態。

主機和從機模式區別在於:
主模式就是SPI主機,簡單說就是提供SCK的那方。
從模式就是被動接受SCK的那方。
在這裏插入圖片描述

2.SPI通信原理

SPI以主從方式工作,這種模式通常有一個主設備和一個或多個從設備,需要至少四根線(事實上在單向傳輸時,3根也可以)。

其中SSN是控制芯片是否被選中的,也就是說只有片選信號爲預先規定的使能信號時(高電平或低電平),從機芯片纔有效,這就允許在同一總線上連接多個SPI設備成爲可能。

接下來就是負責通訊的三根線,通訊是通過數據交換完成的,首先SPI是串行通訊協議,也就是說數據是一位一位的傳輸的。

這就是SCK時鐘線存在的原因,由SCK提供時鐘脈衝,SDI,SDO(SDI:數據輸入,SDO:數據輸出)則基於此脈衝完成數據傳輸。數據輸出通過SDO線,數據在時鐘上升沿或下降沿時改變,在緊接着的下降沿或上升沿被讀取,完成一位數據位傳輸,輸入亦是如此,這樣在至少8次時鐘信號的改變。(上升沿和下降沿爲一次,就可以完成8位數據傳輸)

要注意的是SCK信號線只由主設備控制,從設備不能控制信號線,同樣在一個基於SPI的設備中,至少有一個主控設備。這種傳輸方式有一個優點,與普通的串行通訊不通,普通的串行通訊方式一次連續傳送至少8位數據,而SPI允許數據一位一位的傳送,甚至允許暫停,也就是說,主設備通過對SCK時鐘線的控制可以完成對通訊的控制。

SPI也是一個數據交換協議:因爲SPI的數據輸入和輸出線獨立,所以允許同時完成數據的輸入和輸出。
在點與點的通信中,SPI接口不需要進行尋址操作,且爲全雙工通信,這也是它的缺點,沒有指定的流控制,沒有應答機制確認是否接收到數據。

SPI傳輸模式

SPI傳輸模式有四種,是由時鐘極性(CPOL)和時鐘相位(CPHA)來決定的。

首先對於一個時鐘週期而言,有兩個edge(邊沿,即時鐘電平變化的時刻,有上升沿(rising edge)或下降沿(falling edge)),

(1) leading edge = 前一個邊沿 = 第一個邊沿,對於開始電平是“1”,那麼就是“1”變成“0”的時候。

(2) trailing edge = 後一個邊沿 = 第二個邊沿,對於開始電平是“0”,那麼就是“0”變成“1”的時候。

因此SPI的CPOL表示的是SCLK空閒的時候,其電平的值是低電平“0”還是高電平“1”。CPHA表示數據採樣,數據有效的時刻,相位對應着數據採樣是在第幾個邊沿,“0”對應着第一個邊沿,“1”對應着第二個邊沿。

因此CPOL與CPHA對應着四種組合:
在這裏插入圖片描述

CPHA = 0 ,表示第一個邊沿採樣,
對於CPOL = 0,idle 的時候是低電平,第一個邊沿是從低到高,所以是上升沿。
對於CPOL = 1,idle 的時候是高電平,第一個邊沿是從高到低,所以是下降沿。

CPHA = 1,表示第二個邊沿採樣,
對於 CPOL =0,idle 的時候是低電平,第二個邊沿是從高到低,所以是下降沿。
對於CPOL = 1,idle的時候是高電平,第二個邊沿是從低到高,所以是上升沿。
在這裏插入圖片描述

3.SPI數據交換

SPI協議是一個環形總線結構, 設備間的數據傳輸之所以又被稱爲數據交換,是因爲SPI協議規定一個SPI設備不能再數據通信過程中僅僅只充當一個“發送者”或“接收者”,在時鐘脈衝SCK週期下,SPI設備都會發送並接受一個bit大小的數據,相當於該設備有一個bit大小的數據被交換了。

假設主機的8位寄存器SPIDATA1內數據爲10101010,從機的8位寄存器SPIDATA2內數據爲01010101,在上升沿的時候發送數據,在下降沿的時候接收數據,最高位的數據先發送。

主機和從機之間爲全雙工通信,也就是說兩個SPI接口同時發送和接收數據。
在這裏插入圖片描述

當第一個上升沿來時,SPIDATA1將最高位1移除,並將所有數據左移一位,這時MOSI線爲高電平。SPIDATA2將最高位0移除,並將所有數據左移一位,這時MISO線爲低電平。

當下降沿到來時,SPIDATA1將鎖存在MISO線上的電平移入最低位,同樣SPIDATA2將鎖存在MOSI線上的電平移入最高位。

經過8個脈衝後,兩個一位寄存器就實現了數據交換,也就完成了一個SPI時序。
————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章