韌館-LearnHouse

認識UART、I2C、SPI三介面特性

資料來源:https://makerpro.cc/2016/07/learning-interfaces-about-uart-i2c-spi/

對專業電子工程人員而言,UART、I2C、SPI等介面及介面的差別,是可以講到非常細節的,包含邏輯信號的準位、傳輸協定中的封包格式等。

然而對不是電子工程背景的創客、自造者(Maker)而言,這些介面就比較陌生了,然而這些介面又不得不去面對,因為Arduino、Raspberry Pi開發板就有這些介面。

以Arduino而言,最原初的Arduino就有UART,而演化不久後也加添了I2C,現在無論Arduino家族開發板如何演化,多會具備UART與I2C。

而RPi方面則是從2012年最原初的RPi開始,就同時具備這三種介面,事實上Arduino開發板所用的微控制器晶片,其本身也是具備SPI介面功能的,只是Arduino將此功能掩蓋、關閉而已。

圖1 Arduino上的UART、SPI、I2C介面接腳位置(綠框)。

圖1 Arduino上的UART、SPI、I2C介面接腳位置(綠框)。(圖片來源

至於其他開發板,如BeagleBone、96Boards等,也都必然具備這三種介面,更簡單說,幾乎多數開發板都會具備這三種介面。如果刻意不理會、不使用這三種介面,而用一般數位輸出入接腳來實現相同功能,通常是事倍功半的,甚至根本做不到。

既然一定要認識、了解與運用,是否可以先跳略過太專業的電子電機層面,從幾個大特性來了解這三種介面?本文其實就是從這個角度切入,盡可能讓一般人都了解這三種介面的差異,以及在何時該用哪種介面。

1. UART

嚴格而論UART不是個具體的介面,此介面只提供一個雛形基礎,以此基礎再加搭電路與軟體,才可以實現不同的介面,如RS-232、RS-422、RS-485等。

不過就Maker運用而言幾乎是用來實現RS-232介面,而RS-232介面只允許兩個裝置直接對接,無法接更多裝置(若為RS-422、RS-485則可接多個裝置)。

圖2 UART僅適合兩個裝置對接,圖為微控制器晶片(uC)與全球定位系統(GPS)的對接。

圖2 UART僅適合兩個裝置對接,圖為微控制器晶片(uC)與全球定位系統(GPS)的對接。(圖片來源

用UART/RS-232來連接,通常是接另一個Arduino,或者是讓Arduino與電腦連接,過去老舊的電腦是具備RS-232介面(在電腦領域稱為串列埠,Serial Port)的,可以直接接Arduino,但近10年的電腦都只具備USB,已經沒有RS-232了,因此通常還要透過一個UART轉USB的轉接電路,才能讓Arduino與電腦連接。

UART/RS-232好處是線路簡單,僅兩條線路,但缺點是只能一對一連接,以及速度不是很快,一般而言最高為115.2kbps,雖有更高速版本但不太普及,不適合用在高速、大量傳輸上。

2. I2C

I2C與UART/RS-232一樣是兩條線路,也是有線路簡單的好處,最早是PHILIPS(今日的NXP)提出來,用在晶片間的聯繫傳輸之用。I2C可以同時連接多個裝置,不似前述的RS-232僅能一對一,理論上I2C可以連接128個裝置,甚至有更多數目的封包格式定義,但實務上無法接那麼多,但接10個上下多無大礙。

圖3 I2C介面僅用2條線即可連接多個裝置。(圖片來源:維基百科)

圖3 I2C介面僅用2條線即可連接多個裝置。(圖片來源:維基百科)

無論接幾個裝置,I2C都只用兩條線,這是I2C介面的優點,另一優點是一般而言傳輸速度比UART/RS-232快,最初版本為100kbps,但之後就升級到400kbps,後續甚至到5Mbps,但與UART/RS-232類似的,更快速的版本不太普及,然同樣以普及性版本而言,I2C仍是快一些。

I2C有其優點,但也有一些缺點,首先它本來是設計給晶片間溝通用的,原則上只能走在電路板上,以印刷電路板(PCB)上的銅箔線路來走,不是走電線纜線的,但目前許多應用卻是把I2C纜線化。

也因為最原初是走銅箔線路,所以一般來說I2C長度不超過30公分(即一片印刷電路板的面積內走繞)。而UART/RS-232通常有再寬裕一點的連接長度(若依據RS-232最原始標準,使用正負12V電壓傳輸,傳輸距離是可以上km的)。

另外I2C的兩條線路只有一條是數據傳輸線,另一條是時脈線路,但UART/RS-232是兩條都是傳輸線,I2C在接收數據時無法發送,反之發送時無法接收,但UART/RS-232則無此問題。

SPI

SPI(由Motorola發明,即是之後的Freescale,之後NXP購併Freescale)與I2C相同是可以接多個裝置的,而且傳輸速度比I2C更快(事實上SD記憶卡的根基就是這個介面),而且與UART/RS-232一樣,發送與接收可同時進行。

不過SPI也有缺點,一是隨著連接裝置數的增加,線路也是要增加的,每增加一個連接裝置,至少要增加一條,不像I2C可以一直維持只要兩條。而SPI在一對一連接時需要四條,一對二時要五條,一對三時要六條,即N+3的概念。另外SPI比I2C更少纜線化運用,多半是更短距離的連接。在實務上,I2C較常用來連接感測器,而SPI較常用來連接EEPROM記憶體、Flash記憶體(記憶卡),或一些液晶顯示器。

圖4 SPI每多連接一個裝置,必須增加一條新的SS線路。(圖片來源:維基百科)

圖4 SPI每多連接一個裝置,必須增加一條新的SS線路。(圖片來源:維基百科)

透過以上的說明,相信各位比較了解三種介面的特性,此將有助後續創作發想時,用更切合需求的介面來實現創作。

2017年12 月 posted by admin in 電腦&硬體 and have No Comments

Place your comment

Please fill your data and comment below.
名稱:
信箱:
網站:
您的評論: