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總線,則需一個輸入口,一個輸出口。html
從第二點明顯能夠看出,SPI和UART能夠實現全雙工,但I2C不行。安全
SPI 的通訊原理很簡單,它須要至少4根線,事實上3根也能夠。也是全部基於SPI的設備共有的,它們是SDI(數據輸入),SDO(數據輸出),SCK(時 鍾),CS(片選)。其中CS是控制芯片是否被選中的,也就是說只有片選信號爲預先規定的使能信號時(高電位或低電位),對此芯片的操做纔有效。這就容許 在同一總線上鏈接多個SPI設備成爲可能。網絡
接下來就負責通信的3根線了。通信是經過數據交換完成的,這裏先要知道SPI是串行通信協議,也就是說數據是一位一位的傳輸的。這就是SCK時鐘線存在的原 因,由SCK提供時鐘脈衝,SDI,SDO則基於此脈衝完成數據傳輸。數據輸出經過SDO線,數據在時鐘上沿或下沿時改變,在緊接着的下沿或上沿被讀取。 完成一位數據傳輸,輸入也使用一樣原理。這樣,在至少8次時鐘信號的改變(上沿和下沿爲一次),就能夠完成8位數據的傳輸。異步
要注意的是,SCK信號線只由主設備控制,從設備不能控制信號線。一樣,在一個基於SPI的設備中,至少有一個主控設備。async
這樣傳輸的特色:這樣的傳輸方式有一個優勢,與普通的串行通信不一樣,普通的串行通信一次連續傳送至少8位數據,而SPI容許數據一位一位的傳送,甚至容許暫停,由於SCK時鐘線由主控設備控制,當沒有時鐘跳變時,從設備不採集或傳送數據。也就是說,主設備經過對SCK時鐘線的控制能夠完成對通信的控制。分佈式
SPI仍是一個數據交換協議:由於SPI的數據輸入和輸出線獨立,因此容許同時完成數據的輸入和輸出。性能
不一樣的SPI設備的實現方式不盡相同,主要是數據改變和採集的時間不一樣,在時鐘信號上沿或下沿採集有不一樣定義,具體請參考相關器件的文檔。ui
I2Curl
只要求兩條總線線路:一條串行數據線SDA 一條串行時鐘線SCLspa
每一個鏈接到總線的器件均可以經過惟一的地址和一直存在的簡單的主機從機關係軟件設定地址主機能夠做爲主機發送器或主機接收器
它是一個真正的多主機總線若是兩個或更多主機同時初始化數據傳輸能夠經過沖突檢測和仲裁,防止數據被破壞
串行的8 位雙向數據傳輸位速率在標準模式下可達100kbit/s 快速模式下可達400kbit/s 高速模式下可達3.4Mbit/s
片上的濾波器能夠濾去總線數據線上的毛刺波保證數據完整
鏈接到相同總線的IC 數量只受到總線的最大電容400pF 限制
UART
UART總線是異步串口,所以通常比前兩種同步串口的結構要複雜不少,通常由波特率產生器(產生的波特率等於傳輸波特率的16倍)、UART接收器、UART發送器組成,硬件上由兩根線,一根用於發送,一根用於接收。
顯然,若是用通用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
下面附上一個文檔,分析得更爲專業細緻: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。這種接口的訪問速度快,但較多的引腳數也同時帶來了封裝尺寸增大和總成本提升的問題。要下降成本和縮小封裝尺寸,串行接口顯然是理想的替代方案。
選擇串行總線並不是易事。除須要考慮數據速率、數據位傳輸順序(先傳最高位或最低位)和電壓外,設計者還應該考慮如下幾點:
表1以矩陣的形式展現了各類通用總線系統之間的差別。16種可能組合中只有4種通用類型爲你們所熟知。
除這些特性外,具體應用還會提出更多要求,如供電方式、隔離、噪聲抑制、µC (主機)與外設(從機)間的最大傳輸距離、以及電纜鏈接方式(總線型、星型、可承受線路反接等)。提出相似要求的應用包括樓宇自動化、工業控制和抄表等,而且都已制定了相應的標準。1, 2
表1:串行總線系統歸納
下面的一段話看看就行了解一下:
若是實際應用能夠提供時鐘線,則總線選擇範圍可擴展到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器件極爲稀少。
SPI14和MICROWIRE15 (SPI的子集)均須要爲每一個從器件提供一條額外的片選線。因爲具備片選信號,SPI協議只定義了針對存儲器地址和狀態寄存器的讀/寫命令。它不提供應答功能。一般,SPI器件的數據輸入和數據輸出採用不一樣的引腳。鑑於數據輸出在除了讀操做外的任何狀況下均爲三態(禁止),所以可將兩個數據引腳接到一塊兒以構成單根雙向數據線。當其它總線系統沒法提供所需的功能或須要較高的數據傳輸速率時,可選用SPI總線,它能夠支持2Mbps或更高的速率。SPI和MICROWIRE的不利因素在於產生CS信號的譯碼邏輯,以尋址某個特定器件。可是不會產生地址衝突問題。和I²C總線同樣,不提供節點查找功能。主機沒法根據從器件的邏輯地址來推斷器件功能,所以很難管理節點動態變化的網絡。
咱們對這些標準進行討論,以舉例說明差分傳輸的特色。這類總線系統中傳輸速率最快的兩種是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。