通訊方式梳理:GPIO,I2C,SPI,UART,USART,USB的區別

GPIO,I2C,SPI,UART,USART,USB的區別

一、簡單區別:

1) GPIO(General Purpose Input Output )爲通用輸入/輸出,通用端口,總線擴展器, 利用工業標準I2C、SMBus™或SPI™接口簡化了I/O口的擴展。當微控制器或芯片組沒有足夠的I/O端口,或當系統須要採用遠端串行通訊或控制時,GPIO產品可以提供額外的控制和監視功能。html

2) SPI(Serial Peripheral Interface:串行外設接口);是一種標準的四線同步雙向串行總線,SPI接口主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通訊總線,而且在芯片的管腳上只佔用四根線,節約了芯片的管腳,同時爲PCB的佈局上節省空間,提供方便,正是出於這種簡單易用的特性,如今愈來愈多的芯片集成了這種通訊協議。web

3) I2C(INTER IC BUS:意爲IC之間總線):由PHILIPS公司開發的兩線式串行總線,用於鏈接微控制器及其外圍設備。是微電子通訊控制領域普遍採用的一種總線標準。它是同步通訊的一種特殊形式,具備接口線少,控制方式簡單,器件封裝形式小,通訊速率較高等優勢。安全

4)UART(Universal Asynchronous Receiver Transmitter:通用異步收發器):通用異步接收/發送裝置。網絡

5) USART:通用同步異步收發器;異步

6)USB:Universal Serial BUS(通用串行總線)async

7)CAN:現場總線分佈式

在這裏插入圖片描述

二、傳輸數據線的組成:

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不行。

三、通訊協議區別:

SPI

SPI 是一種容許一個主設備啓動一個與從設備的同步通信的協議,從而完成數據的交換。也就是SPI是一種規定好的通信方式。這種通訊方式的優勢是佔用端口較少,通常4根就夠基本通信了。同時傳輸速度也很高。通常來講要求主設備要有SPI控制器(但可用模擬方式),就能夠與基於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發送器組成,硬件上由兩根線,一根用於發送,一根用於接收。svg

顯然,若是用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。

UART經常使用於控制計算機與串行設備的芯片。有一點要注意的是,它提供了RS-232C數據終端設備接口,這樣計算機就能夠和調制解調器或其它使用RS-232C接口的串行設備通訊了。佈局

UART是通用異步收發器(異步串行通訊口)的英文縮寫,它包括了RS23二、RS49九、RS42三、RS422和RS485等接口標準規範和總線標準規範,即UART是異步串行通訊口的總稱。而RS23二、RS49九、RS42三、RS422和RS485等,是對應各類異步串行通訊口的接口標準和總線標準,它規定了通訊口的電氣特性、傳輸速率、鏈接特性和接口的機械特性等內容。其實是屬於通訊網絡中的物理層(最底層)的概念,與通訊協議沒有直接關係。而通訊協議,是屬於通訊網絡中的數據鏈路層(上一層)的概念。 COM口是PC(我的計算機)上,異步串行通訊口的簡寫。因爲歷史緣由,IBM的PC外部接口配置爲RS232,成爲實際上的PC界默認標準。因此,如今PC機的COM口均爲RS232。若配有多個異步串行通訊口,則分別稱爲COM一、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

當總線空閒時,任何CAN節點均可以開始數據發送。若是兩個或更多的節點同時開始發送,就使用標識符來進行按位仲裁以解決訪問衝突。CAN是一個廣播類型的總線,全部節點都接收總線上的數據,硬件上的過濾機制決定消息是否提供給該接點用。
B.四種消息幀的類型
數據幀:該幀從一個發送器承載數據到一個接收器。根據CAN規範有兩種數據幀格式,它們的惟一本質區別在於標識符的長度:CAN標準幀,也稱爲CAN2.0A,支持11位長度的標識符;另外一個是CAN擴展幀,也稱爲CAN2.0B,支持29位長度的標識符。圖2顯示了兩種規範的CAN數據幀。
遠程幀:此幀由一個接收CAN節點發送,用來請求帶有遠程幀中規定的標識符的數據幀。
錯誤幀:此幀將任何總線錯誤通知其它單元,在接收到這個幀時發送器會自動進行消息重發。
超載幀:超載幀由一個忙的CAN節點送出,以請求在先後數據幀之間增長一個額外的延遲。
C.CAN硬件術語
基本CAN(Basic CAN)控制器:這是一種廉價的CAN控制器,具備有限的發送/接收消息緩衝器,以及有限的CAN消息過濾機制。
徹底CAN(Full CAN)控制器:徹底CAN是一個高成本、高性能的CAN控制器,具備能緩衝8個或更多消息的緩衝器用於接收和發送。例如,富士通的集成CAN微控制器能提供16個消息緩衝器用於接收和發送。此外,富士通的MB90443微控制器能靈活地將兩個CAN控制器的消息緩衝器組合在一箇中,以造成能緩衝32個消息的緩衝器。
標準CAN控制器:該CAN控制器可以處理僅有11位標識符的消息。
擴展CAN控制器:該控制器可以處理含有11位和29位標識符的消息。
時間觸發CAN(TTCAN)控制器:該CAN控制器根據時間和事件的觸發來安排CAN消息,加強了CAN網絡的整體性能和行爲的肯定性。
D.數據方向和通訊速度
數據字節的傳輸首先從最高位開始。一個8位的數據字節能在一次發送中進行傳輸,最大的CAN總線速度是1Mbps。

F.物理接口
大多數CAN微控制器須要一個外部收發器來鏈接物理總線。目前市場上提供如下一些收發器:
高速CAN收發器有飛利浦的82C251,TI的SN65/75LBC031,Bosch的CF150,C250,Unitrode的UC5350;
低速CAN收發器有飛利浦82C25二、TJA1053,西門子TLE 6252G;
單線CAN收發器有飛利浦AU5790,英飛凌TLE 6255,Delphi DK166153。

下面附上一個文檔,分析得更爲專業細緻: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 (主機)與外設(從機)間的最大傳輸距離、以及電纜鏈接方式(總線型、星型、可承受線路反接等)。提出相似要求的應用包括樓宇自動化、工業控制和抄表等,而且都已制定了相應的標準。

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-48五、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器件能夠帶電插入系統(熱插拔)。該特性容許網絡節點數動態變化。

LVDS1八、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器件在下列應用中極爲有效:全球識別號2一、電路板/配件標識與認證十、溫度檢測和執行裝置等。另一種很是成功的1-Wire產品是具備安全存儲器和質詢-響應機制的器件,它能以最低的成本實現雙向認證和軟件代碼保護22, 23。

總線選擇準則

不一樣的應用在選擇總線的標準方面並不一樣,下面是一些進行總線選擇的通用參考準則:
   1.評估使用不一樣串行總線在網絡上鍊接各類器件的系統成本。例如,在汽車應用中,一個只須要控制功能的系統能夠用像LIN這類低成本的串行總線來管理。 
   2.若是用在汽車中,CAN或LIN是較好的選擇。因爲它們具備很強的魯棒性,所以具備較強的容故障能力和傳輸可靠性。
   3.注意器件間的距離,有些串行總線只支持短距離通訊。
   4.肯定在網絡上將鏈接多少器件,以及總線將可能具備的電容量。有些串行總線對連在網絡上的器件數目有限制。
   5.在效率、速度和可靠性方面肯定對你最重要的性能。例如,對於一個安全關鍵系統來說,可靠性是極爲重要的,故而CAN是較好的選擇(好比汽車)。