通訊方式梳理:GPIO,I2C,SPI,UART,USART,USB的區別
GPIO,I2C,SPI,UART,USART,USB的區別
1、簡單區別:
1) GPIO(General Purpose Input Output )為通用輸入/輸出,通用埠,匯流排擴充套件器, 利用工業標準I2C、SMBus™或SPI™介面簡化了I/O口的擴充套件。當微控制器或晶片組沒有足夠的I/O埠,或當系統需要採用遠端序列通訊或控制時,GPIO產品能夠提供額外的控制和監視功能。
2) SPI(Serial Peripheral Interface:序列外設介面);是一種標準的四線同步雙向序列匯流排,SPI介面主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字訊號處理器和數字訊號解碼器之間。SPI,是一種高速的,全雙工,同步的通訊匯流排,並且在晶片的管腳上只佔用四根線,節約了晶片的管腳,同時為PCB的佈局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的晶片集成了這種通訊協議。
3) I2C(INTER IC BUS:意為IC之間匯流排):由PHILIPS公司開發的兩線式序列匯流排,用於連線微控制器及其外圍裝置。是微電子通訊控制領域廣泛採用的一種匯流排標準。它是同步通訊的一種特殊形式,具有介面線少,控制方式簡單,器件封裝形式小,通訊速率較高等優點。
4)UART(Universal Asynchronous Receiver Transmitter:通用非同步收發器):通用非同步接收/傳送裝置。
5) USART:通用同步非同步收發器;
6)USB:Universal Serial BUS(通用序列匯流排)
7)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、通訊協議區別:
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傳送器組成,硬體上由兩根線,一根用於傳送,一根用於接收。
顯然,如果用通用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
當匯流排空閒時,任何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收發器有飛利浦82C252、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-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。
匯流排選擇準則
不同的應用在選擇匯流排的標準方面並不同,下面是一些進行匯流排選擇的通用參考準則:
1.評估使用不同序列匯流排在網路上連線各種器件的系統成本。例如,在汽車應用中,一個只需要控制功能的系統可以用像LIN這類低成本的序列匯流排來管理。
2.如果用在汽車中,CAN或LIN是較好的選擇。由於它們具有很強的魯棒性,因此具有較強的容故障能力和傳輸可靠性。
3.注意器件間的距離,有些序列匯流排只支援短距離通訊。
4.確定在網路上將連線多少器件,以及匯流排將可能具有的電容量。有些序列匯流排對連在網路上的器件數目有限制。
5.在效率、速度和可靠性方面確定對你最重要的效能。例如,對於一個安全關鍵系統來講,可靠性是極為重要的,故而CAN是較好的選擇(比如汽車)。