SPISPI(Serial Peripheral Interface)串行外圍設備接口是許多不同設備使用的通用通信協(xié)議。例如, SD卡模塊, RFID卡讀取器模塊和 2.4 GHz無線發(fā)送器/接收器 均使用SPI與微控制器通信。 MISO(主機輸入/從機輸出) –從機將數據發(fā)送到主機的線路。 SCLK(時鐘) –時鐘信號線。 SS / CS(從站選擇/芯片選擇) –主站用于選擇向其發(fā)送數據的從站的線路。 SPI如何運作時鐘時鐘信號將主設備的數據位輸出同步到從設備的位采樣。每個時鐘周期傳輸一位數據,因此數據傳輸的速度取決于時鐘信號的頻率。由于主機配置并生成時鐘信號,所以SPI通信始終由主機啟動。 設備共享時鐘信號的任何通信協(xié)議都稱為同步。 SPI是一種同步通信協(xié)議。還有一些 異步方法不使用時鐘信號。例如,在UART通信中,將雙方都設置為指示數據傳輸速度和時序的預配置波特率。 可以使用時鐘極性和時鐘相位的屬性來修改SPI中的時鐘信號。這兩個屬性共同定義何時輸出位以及何時對其進行采樣。主機可以設置時鐘極性,以允許在時鐘周期的上升沿或下降沿輸出和采樣位。可以設置時鐘相位,以便在時鐘周期的第一沿或第二沿進行輸出和采樣,而不管它是上升還是下降。 從設備選擇主機可以通過將從機的CS / SS線設置為低電壓電平來選擇要與之通信的從機。在空閑,非傳輸狀態(tài)下,從選擇線保持在高電壓電平。主機上可能有多個CS / SS引腳,這允許多個從機并行連接。如果僅存在一個CS / SS引腳,則可以通過菊花鏈將多個從機連接到主機。 多個從設備可以將SPI設置為與單個主機和單個從機一起運行,也可以與由單個主機控制的多個從機一起設置。有兩種方法可以將多個從站連接到主站。如果主站有多個從站選擇引腳,則從站可以按以下方式并聯(lián): MOSI和MISO主機通過MOSI線以串行方式將數據發(fā)送到從機。從機通過MOSI引腳接收主機發(fā)送的數據。從主機發(fā)送到從機的數據通常先發(fā)送最高有效位。 從機還可以通過MISO線串行將數據發(fā)送回主機。從從機發(fā)送回主機的數據通常首先以最低有效位發(fā)送。 SPI的讀像是發(fā)一個數據那樣簡單,整個總線需要的時鐘信號是由主機端提供的,也就是說不論是給從機發(fā)數據或者從從機讀數據,時鐘信號都需要由主機來產生,主機要讀數據的時候需要給從機時鐘信號,這個信號只能是在主機發(fā)數據的時候產生,這樣就需要主機發(fā)一個數據,這樣就產生了時鐘信號,從機就會把數據放到總線上來了。為了避免這個假發(fā)出去的數據讓從機誤動作,一般都是讓主機為高電平。 SPI數據傳輸步驟
SPI的優(yōu)缺點使用SPI有一些優(yōu)點和缺點,如果在不同的通信協(xié)議之間進行選擇,則應根據項目要求知道何時使用SPI: 優(yōu)點
缺點
UARTUART代表通用異步接收器/發(fā)送器(Universal Asynchronous Receiver/Transmitter)。它不是像SPI和I2C這樣的通信協(xié)議,而是微控制器中的物理電路或獨立的IC。UART的主要目的是發(fā)送和接收串行數據。 關于UART的最大的優(yōu)點之一是它僅使用兩條線在設備之間傳輸數據。 在UART通信中,兩個UART直接相互通信。發(fā)送UART將來自控制設備(如CPU)的并行數據轉換為串行形式,以串行方式將其發(fā)送到接收UART,然后接收UART將接收到的串行數據轉換回并行數據。只需要兩條線就可以在兩個UART之間傳輸數據。數據從發(fā)送UART的Tx引腳流到接收UART的Rx引腳: UART 異步傳輸數據,這意味著沒有時鐘信號將發(fā)送UART的位輸出與接收UART的位采樣同步。發(fā)送UART代替時鐘信號,將開始和停止位添加到正在傳輸的數據包中。這些位定義了數據包的開始和結束,因此接收UART知道何時開始讀取這些位。 當接收UART檢測到起始位時,它將開始以稱為波特率的特定頻率讀取輸入位。波特率是數據傳輸速度的度量,以每秒位數(bps)表示。 兩個UART必須以大約相同的波特率工作。在位的時序變得太遠之前,發(fā)送和接收UART之間的波特率只能相差約10%。 還必須將兩個UART配置為發(fā)送和接收相同的數據包結構。 UART如何運作將要發(fā)送數據的UART從數據總線接收數據。數據總線用于通過其他設備(例如CPU,內存或微控制器)將數據發(fā)送到UART。數據以并行形式從數據總線傳輸到發(fā)送UART(電路實現(xiàn)參考數字電路多功能移位寄存器)。發(fā)送UART從數據總線獲取并行數據后,它將添加起始位,奇偶校驗位和停止位,以創(chuàng)建數據包。接下來,數據包在Tx引腳上逐位串行輸出。接收UART在其Rx引腳上逐位讀取數據包。然后,接收UART將數據轉換回并行形式,并刪除起始位,奇偶校驗位和停止位。最后,接收UART將數據包并行傳輸到接收端的數據總線: 起始位UART數據傳輸線通常在不傳輸數據時保持在高電壓電平。為了開始數據傳輸,發(fā)送UART在一個時鐘周期內將傳輸線從高電平拉低到低電平。當接收UART檢測到高到低電壓轉換時,它開始以波特率的頻率讀取數據幀中的位。 數據幀數據幀包含正在傳輸的實際數據。如果使用奇偶校驗位,則可以是5位,最多8位。如果不使用奇偶校驗位,則數據幀的長度可以為9位。在大多數情況下,數據首先以最低有效位發(fā)送。 奇偶校驗奇偶性描述數字的偶數或奇數。奇偶校驗位是接收UART判斷傳輸期間是否有任何數據更改的方式。電磁輻射,不匹配的波特率或長距離數據傳輸會改變數據位。接收UART讀取數據幀后,它將對值為1的位數進行計數,并檢查總數是偶數還是奇數。如果奇偶校驗位為0(偶數奇偶校驗),則數據幀中的1位應總計為偶數。如果奇偶校驗位為1(奇校驗),則數據幀中的1位應合計為奇數。當奇偶校驗位與數據匹配時,UART知道傳輸沒有錯誤。但是,如果奇偶校驗位為0,則總數為奇數;或奇偶校驗位為1,且總數為偶數,則UART知道數據幀中的位已更改。 停止位為了用信號通知數據包的結束,發(fā)送UART將數據傳輸線從低電壓驅動到高電壓至少持續(xù)兩位時間。 UART傳輸步驟
UART的優(yōu)缺點以下是一些利弊,可幫助您確定它們是否適合您的項目需求: 優(yōu)點
缺點
I2C如果您參與過使用OLED顯示器,氣壓傳感器或陀螺儀/加速度計模塊的項目,則可能會發(fā)現(xiàn)自己使用的是I2C。 I2C結合了SPI和UART的最佳功能。使用I2C,您可以將多個從機連接到單個主機(如SPI),并且可以有多個主機控制一個或多個從機。當您希望有多個微控制器將數據記錄到單個存儲卡或將文本顯示到單個LCD時,此功能非常有用。 與UART通信一樣,I2C僅使用兩條線在設備之間傳輸數據: SDA(串行數據) –主站和從站發(fā)送和接收數據的線路。 SCL(串行時鐘) –傳送時鐘信號的線。 I2C是串行通信協(xié)議,因此數據沿著單條線(SDA線)單個比特地傳輸。 像SPI一樣,I2C是同步的,因此位輸出通過主機和從機之間共享的時鐘信號同步到位采樣。時鐘信號始終由主機控制。 I2C如何運作使用I2C,數據以消息形式傳輸 。消息被分解 為數據幀。每條消息都有一個包含從站的二進制地址的地址幀,以及一個或多個包含正在發(fā)送的數據的數據幀。該消息還包括每個數據幀之間的開始和停止條件,讀/寫位和ACK / NACK位: 啟動條件: 在SCL線從高電平切換到低電平之前 ,SDA線從高壓電平切換到低壓電平 。 停止條件: SCL線從低切換到高后, SDA線從低電壓切換到高電壓 。 地址幀: 每個從屬設備唯一的7位或10位序列,用于在主設備要與其通信時標識該從屬設備。 讀/寫位: 一位,指定主機是向從機發(fā)送數據(低電壓)還是向從機請求數據(高電壓)。 ACK / NACK位: 消息中的每個幀后均帶有一個確認/不確認位。如果成功接收到地址幀或數據幀,則會從接收設備向發(fā)送方返回ACK位。 尋址I2C沒有像SPI這樣的從設備選擇線,因此它需要另一種方式來讓從設備知道正在向其發(fā)送數據,而不是另一個從設備。它通過尋址來實現(xiàn)。地址幀始終是新消息中起始位之后的第一幀。 主機將要與之通信的從機的地址發(fā)送給與其連接的每個從機。然后,每個從站將從主站發(fā)送的地址與其自己的地址進行比較。如果地址匹配,它將向主機發(fā)送一個低電壓ACK位。如果地址不匹配,則從站不執(zhí)行任何操作,并且SDA線保持高電平。 讀/寫位地址幀的末尾包含單個位,該位通知從設備主機是否要向其寫入數據或從中接收數據。如果主機要向從機發(fā)送數據,則讀/寫位為低電壓電平。如果主機正在從機請求數據,則該位為高電壓電平。 數據幀主機檢測到從機的ACK位后,即可發(fā)送第一個數據幀。 數據幀始終為8位長,并以最高有效位優(yōu)先發(fā)送。每個數據幀后緊跟一個ACK / NACK位,以驗證是否已成功接收到該幀。在發(fā)送下一個數據幀之前,主機或從機必須接收ACK位(取決于誰發(fā)送數據)。 發(fā)送完所有數據幀后,主機可以向從機發(fā)送停止條件以停止傳輸。停止條件是SCL線上從低到高的轉換之后,SDA線上的電壓從低到高的轉換,而SCL線保持高電平。 I2C數據傳輸步驟
單個主機具有多個從機由于I2C使用尋址,因此可以從一個主機控制多個從機。使用7位地址時,可以使用\(2^7=128\)個唯一地址。使用10位地址并不常見,但是會提供\(2^{10}=1024\)個唯一地址。要將多個從機連接到單個主機,請使用\(4.7K\Omega\)上拉電阻將它們連接,將SDA和SCL線連接到Vcc: 多個主機具有多個從機多個主機可以連接到一個或多個從機。當兩個主機嘗試通過SDA線路同時發(fā)送或接收數據時,會出現(xiàn)同一系統(tǒng)中多個主機的問題。為了解決這個問題,每個主機都需要在發(fā)送消息之前檢測SDA線是低電平還是高電平。如果SDA線為低電平,則意味著另一個主機可以控制總線,并且主機應等待發(fā)送消息。如果SDA線為高電平,則可以安全地發(fā)送消息。要將多個主機連接到多個從機,請使用下圖,其中\(4.7K\Omega\)上拉電阻將SDA和SCL線連接到Vcc: I2C的優(yōu)缺點優(yōu)點
缺點
參考資料圖片來源于:https://www./ |
|