1、首先看看它名字真正的含義:
SPI(Serial Peripheral Interface:串行外設接口);
I2C(INTER IC BUS:意爲IC之間總線)
UART(Universal Asynchronous Receiver Transmitter:通用異步收發器)
USART:通用同步異步收發器
USB:Universal Serial BUS(通用串行總線)
CAN:現場總線
2、看看他們傳輸數據線的組成:
SPI總線由三條信號線組成:串行時鐘(SCLK)、串行數據輸出(SDO)、串行數據輸入(SDI)。SPI總線可以實現多個SPI設備互相連接。提供SPI串行時鐘的SPI設備爲SPI主機或主設備(Master),其他設備爲SPI從機或從設備(Slave)。主從設備間可以實現全雙工通信,當有多個從設備時,還可以增加一條從設備選擇線。
如果用通用IO口模擬SPI總線,必須要有一個輸出口(SDO),一個輸入口(SDI),另一個口則視實現的設備類型而定,如果要實現主從設備,則需輸入輸出口,若只實現主設備,則需輸出口即可,若只實現從設備,則只需輸入口即可。
I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標準,具有總線仲裁機制,非常適合在器件之間進行近距離、非經常性的數據通信(我的平衡小車讀取MPU6050模塊的數據就是用I2C總線)。在它的協議體系中,傳輸數據時都會帶上目的設備的設備地址,因此可以實現設備組網。
如果用通用IO口模擬I2C總線,並實現雙向傳輸,則需一個輸入輸出口(SDA),另外還需一個輸出口(SCL)。(注:I2C資料瞭解得比較少,這裏的描述可能很不完備)
UART總線是異步串口,因此一般比前兩種同步串口的結構要複雜很多(單片機的書上有介紹的,其實也算不上覆雜),一般由波特率產生器(產生的波特率等於傳輸波特率的16倍)、UART接收器、UART發送器組成,硬件上由兩根線,一根用於發送,一根用於接收。
顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
從第二點明顯可以看出,SPI和UART可以實現全雙工,但I2C不行。
3、看看牛人們的意見吧!
wudanyu:I2C線更少,我覺得比UART、SPI更爲強大,但是技術上也更加麻煩些,因爲I2C需要有雙向IO的支持,而且使用上拉電阻,我覺得抗干擾能力較弱,一般用於同一板卡上芯片之間的通信,較少用於遠距離通信。SPI實現要簡單一些,UART需要固定的波特率,就是說兩位數據的間隔要相等,而SPI則無所謂,因爲它是有時鐘的協議。
quickmouse:I2C的速度比SPI慢一點,協議比SPI複雜一點,但是連線也比標準的SPI要少。
4、最核心的,通信協議的不同:
SPI
SPI 的通信原理很簡單,它需要至少4根線,事實上3根也可以。也是所有基於SPI的設備共有的,它們是SDI(數據輸入),SDO(數據輸出),SCK(時 鍾),CS(片選)。其中CS是控制芯片是否被選中的,也就是說只有片選信號爲預先規定的使能信號時(高電位或低電位),對此芯片的操作纔有效。這就允許 在同一總線上連接多個SPI設備成爲可能。
接下來就負責通訊的3根線了。通訊是通過數據交換完成的,這裏先要知道SPI是串行通訊協議,也就是說數據是一位一位的傳輸的。這就是SCK時鐘線存在的原 因,由SCK提供時鐘脈衝,SDI,SDO則基於此脈衝完成數據傳輸。數據輸出通過SDO線,數據在時鐘上沿或下沿時改變,在緊接着的下沿或上沿被讀取。 完成一位數據傳輸,輸入也使用同樣原理。這樣,在至少8次時鐘信號的改變(上沿和下沿爲一次),就可以完成8位數據的傳輸。
要注意的是,SCK信號線只由主設備控制,從設備不能控制信號線。同樣,在一個基於SPI的設備中,至少有一個主控設備。
這樣傳輸的特點:這樣的傳輸方式有一個優點,與普通的串行通訊不同,普通的串行通訊一次連續傳送至少8位數據,而SPI允許數據一位一位的傳送,甚至允許暫停,因爲SCK時鐘線由主控設備控制,當沒有時鐘跳變時,從設備不採集或傳送數據。也就是說,主設備通過對SCK時鐘線的控制可以完成對通訊的控制。
SPI還是一個數據交換協議:因爲SPI的數據輸入和輸出線獨立,所以允許同時完成數據的輸入和輸出。
不同的SPI設備的實現方式不盡相同,主要是數據改變和採集的時間不同,在時鐘信號上沿或下沿採集有不同定義,具體請參考相關器件的文檔。
I2C
只要求兩條總線線路:一條串行數據線SDA 一條串行時鐘線SCL
每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機從機關係軟件設定地址主機可以作爲主機發送器或主機接收器
它是一個真正的多主機總線如果兩個或更多主機同時初始化數據傳輸可以通過沖突檢測和仲裁,防止數據被破壞
串行的8 位雙向數據傳輸位速率在標準模式下可達100kbit/s 快速模式下可達400kbit/s 高速模式下可達3.4Mbit/s
片上的濾波器可以濾去總線數據線上的毛刺波保證數據完整
連接到相同總線的IC 數量只受到總線的最大電容400pF 限制
UART
UART總線是異步串口,因此一般比前兩種同步串口的結構要複雜很多,一般由波特率產生器(產生的波特率等於傳輸波特率的16倍)、UART接收器、UART發送器組成,硬件上由兩根線,一根用於發送,一根用於接收。
顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
UART常用於控制計算機與串行設備的芯片。有一點要注意的是,它提供了RS-232C數據終端設備接口,這樣計算機就可以和調制解調器或其它使用RS-232C接口的串行設備通信了。
UART是通用異步收發器(異步串行通信口)的英文縮寫,它包括了RS232、RS499、RS423、RS422和RS485等接口標準規範和總線標準規範,即UART是異步串行通信口的總稱。而RS232、RS499、RS423、RS422和RS485等,是對應各種異步串行通信口的接口標準和總線標準,它規定了通信口的電氣特性、傳輸速率、連接特性和接口的機械特性等內容。實際上是屬於通信網絡中的物理層(最底層)的概念,與通信協議沒有直接關係。而通信協議,是屬於通信網絡中的數據鏈路層(上一層)的概念。 COM口是PC(個人計算機)上,異步串行通信口的簡寫。由於歷史原因,IBM的PC外部接口配置爲RS232,成爲實際上的PC界默認標準。所以,現在PC機的COM口均爲RS232。若配有多個異步串行通信口,則分別稱爲COM1、COM2...
明顯可以看出,SPI和UART可以實現全雙工,但I2C不行
USART:通用同步異步收發器。(與UART的區別很明顯)
UART:universal asynchronous receiver and transmitter通用異步收發器; USART:universal synchronous asynchronous receiver and transmitter通用同步異步收發器。一般而言,單片機中,名稱爲UART的接口一般只能用於異步串行通訊,而名稱爲USART的接口既可以用於同步串行通訊,也能用於異步串行通訊。
USB
是英文Universal Serial BUS(通用串行總線)的縮寫,是一個外部總線標準,用於規範電腦與外部設備的連接和通訊,是應用在PC 領域的接口技術。USB 接口支持設備的即 即用和熱插拔功能。USB 是在1994 年底由爾、
康柏.IBM、Microsoft 等多家公司聯合提出的.
USB的電氣特性還有傳輸特性
CAN
下面附上一個文檔,分析得更爲專業細緻:http://wenku.baidu.com/link?url=Mmt8LXPzG6IJ6ncR1jeB6wwyWq-vcwWC9zxqoxoH5IRMkNbZhlwfeJEfhrqKLSuSoL5LnFTqSjRAdxaGmKE84NdDIRyrDogmdrS48ZyE63a
串行總線的選擇:
http://www.elecfans.com/article/84/119/2009/2009050957716.html
微控制器(µC)是當今各種先進電子產品的核心,它需要與一個或多個外設器件通信。以前,µC的外設是以存儲器映射方式與數據和地址總線連接的。對地址線譯碼以獲得片選信號,從而在有限的地址範圍內爲每個外設分配唯一的地址。這種接口類型所需的最少引腳數(除電源和地之外)爲:8 (數據) + 1 (R//W) + 1 (/CS) + n條地址線[n = log2(內部寄存器或存儲器字節的數目)]。例如,與一個16字節外設通信時,需要的引腳數爲:8 +1 + 1 + 4 = 14。這種接口的訪問速度快,但較多的引腳數也同時帶來了封裝尺寸增大和總成本提高的問題。要降低成本和縮小封裝尺寸,串行接口顯然是理想的替代方案。
選擇串行總線並非易事。除需要考慮數據速率、數據位傳輸順序(先傳最高位或最低位)和電壓外,設計者還應該考慮以下幾點:
- 通過何種方式選擇某個外設(通過硬件片選輸入或軟件協議)。
- 外設如何與µC保持同步(藉助一條硬件時鐘線,或藉助內嵌於數據流中的時鐘信息)。
- 數據是在單根線上傳輸(在“高”和“低”之間轉換),還是在一對差分線上傳輸(兩根線按相反的方向同時轉換其電壓)。
- 通信線路的兩端均使用匹配電阻實現阻抗匹配(通常用於差分信號傳輸),還是不匹配或僅在一端匹配(通常用於單端總線)。
表1以矩陣的形式展示了各種通用總線系統之間的差異。16種可能組合中只有4種通用類型爲大家所熟知。
除這些特性外,具體應用還會提出更多要求,如供電方式、隔離、噪聲抑制、µC (主機)與外設(從機)間的最大傳輸距離、以及電纜連接方式(總線型、星型、可承受線路反接等)。提出類似要求的應用包括樓宇自動化、工業控制和抄表等,並且都已制定了相應的標準。1, 2
表1:串行總線系統概括
下面的一段話看看就好了解一下:
I²C/SMBus與1-Wire總線
如果實際應用可以提供時鐘線,則總線選擇範圍可擴展到I²C12和SMBus13器件。根據SMBus的規範,它可以看作是100kbps I²C總線規範增加了超時特性後的派生總線類型。在某個節點與總線主機失去同步的情況下,超時特性可避免總線發生閉鎖,而I²C系統則需要經過一次上電覆位過程,才能從這種故障狀態恢復至正常工作狀態。在1-Wire系統中,復位/在線檢測週期可將通信接口復位至確定的啓動條件下。
除了時鐘線外,I²C/SMBus還爲總線上傳輸的每個字節提供一個應答位。這使得有效數據速率降低了12%。通信過程開始於一個啓動條件,並跟隨從器件地址和一個數據方向位(讀/寫),最後結束於一個停止條件。對於1-Wire系統,首先需要滿足網絡層的要求(即選擇某個特定器件,執行search ROM命令或者廣播);接下來發送與特定器件相關的命令代碼,該代碼同時會影響數據的傳輸方向(讀/寫)。
原有I²C和SMBus總線系統的一個突出問題是其有限的7位地址空間。由於可提供超過127種不同器件類型,我們無法根據從器件地址推斷器件功能。此外,許多I²C器件還允許用戶隨意設置1個或多個地址位,以在總線上掛接多個相同器件。這種特性進一步減少了可用的地址空間。解決地址衝突問題的標準做法是將總線系統劃分成若干段,某一時刻可在軟件控制下激活某個網絡段。該網絡段需要增加更多硬件,也使應用固件更爲複雜。I²C系統不具備網絡節點查找或枚舉功能,因此很難處理節點數動態變化的系統。這一問題可藉助SMBus Specification Version 2.013中的地址分辨率協議得以解決。但是,支持該特性的SMBus器件極爲稀少。
SPI和MICROWIRE接口
SPI14和MICROWIRE15 (SPI的子集)均需要爲每個從器件提供一條額外的片選線。由於具有片選信號,SPI協議只定義了針對存儲器地址和狀態寄存器的讀/寫命令。它不提供應答功能。通常,SPI器件的數據輸入和數據輸出採用不同的引腳。鑑於數據輸出在除了讀操作外的任何情況下均爲三態(禁止),因此可將兩個數據引腳接到一起以構成單根雙向數據線。當其它總線系統無法提供所需的功能或需要較高的數據傳輸速率時,可選用SPI總線,它可以支持2Mbps或更高的速率。SPI和MICROWIRE的不利因素在於產生CS信號的譯碼邏輯,以尋址某個特定器件。但是不會產生地址衝突問題。和I²C總線一樣,不提供節點查找功能。主機無法根據從器件的邏輯地址來推斷器件功能,因此很難管理節點動態變化的網絡。
RS-485、LVDS、CAN、USB 2.0和FireWire
我們對這些標準進行討論,以舉例說明差分傳輸的特點。這類總線系統中傳輸速率最快的兩種是FireWire16和USB 2.017,它們採用點對點電氣連接。使用先進的節點或集線器,可以構成樹狀拓撲的虛擬總線,數據包從源發送至端點(USB),或採用對等傳輸(FireWire),突發數據速率高達480Mbps (USB 2.0)或1600Mbps (FireWire)。尺寸有限的數據包以及接收/緩衝/重發通信機制增加了傳輸時間,反過來降低了有效的數據吞吐能力。USB的拓撲和協議允許最多連接126個節點,FireWire允許最多63個節點,使用無源電纜時節點間的最大傳輸距離爲4.5m。專爲包括PC外設、多媒體、工業控制和航空(僅FireWire)應用而設計,USB和FireWire器件可以帶電插入系統(熱插拔)。該特性允許網絡節點數動態變化。
LVDS18、RS-48519和CAN20可實現掛接主機和從機的總線型結構,甚至可以連接多個主機。這些標準中低壓差分信號(LVDS)是速率最快的,如果總線長度不超過10m,可工作在100Mbps速率下。可用的數據速率及吞吐可以更快或更慢,具體取決於網絡尺寸。LVDS電氣標準專爲背板應用而設計,支持熱插拔功能,但不包含任何協議。
RS-485也僅定義了電氣參數。RS-485定義了負載和每條總線的最大負載數目(32),而不是以節點的形式給出。一個電氣節點的負載可以小於1。12m網絡距離下的典型數據速率可高達35Mbps,1200m距離下數據速率可達100kbps,這些特性足以滿足數據採集和控制應用。RS-485設備的協議通常基於原來設計用於RS-232的部分協議。
與此不同,控制器局域網(CAN)爲分佈式實時控制定義了通信協議,安全性非常高,專門面向汽車應用和工業自動化領域。數據速率從40m距離下的1Mbps到1000m距離下的50kbps。尋址方式是基於消息的,協議本身對節點數沒有任何限制。CAN節點支持熱插拔,網絡節點數可以動態變化。
結語
在簡單、低成本總線系統中,與LIN總線和SensorPath相比,1-Wire系統的從器件可提供最廣泛的功能和網絡驅動器。I²C和SMBus除了需要數據線和參考地之外,還需要時鐘線和VCC電源,當然可供選擇的器件功能也非常多。SPI和MICROWIRE需要額外的片選線,但可以提供更高的數據速率。除支持寄生供電和網絡節點查找功能外,1-Wire接口和協議還支持熱插拔,這一特性通常僅在使用差分信號的高速系統以及SMBus 2.0兼容產品中才提供。iButton®產品是使用極爲廣泛的熱插拔1-Wire器件,熱插拔是這類器件的正常工作方式。事實已經證明,1-Wire器件在下列應用中極爲有效:全球識別號21、電路板/配件標識與認證10、溫度檢測和執行裝置等。另外一種非常成功的1-Wire產品是具有安全存儲器和質詢-響應機制的器件,它能以最低的成本實現雙向認證和軟件代碼保護22, 23。