我們將簡要介紹七個串行接口:SIO、UART、SSP(SPI)、I2C、CAN、USB和EtherMAC。雖然每個接口都有幾個不同的操作模式,但我們只介紹一個典型的模式。
1. SIO(串行輸入輸出)
最基本的串行接口是SIO,它由一個主器件和一個從器件通過一條數據線和一條時鐘線采用一對一的方式連接組成。主器件把傳輸時鐘提供給從器件。
接口將被其控制電路中的寄存器指定為主從器件。在數據傳輸之前,應該設置另一個寄存器以確定哪一個成為發射器或接收器。
如果數據集為8位,則發出8個時鐘來同步傳輸數據。主器件的指令隨時鐘信號傳輸至從器件。這就是說,當主器件向從器件發送或接收數據時,主器件將通過發出時鐘來啟動傳輸請求。由于數據傳輸方向是預先定義的,因此主器件將在必要時向從器件發出時鐘,并執行與從器件之間的數據發送或接收,與時鐘同步。
數據通常是8位串行數據。可以在數據末尾添加一個奇偶校驗位,這將使得長度總共為9位。在這種情況下,從器件接口必須在接收串行數據之前已經知道串行數據有一個奇偶校驗位。
2. UART(通用異步收發器)
UART是異步串行接口,兩個接口之間沒有時鐘信號。因此在UART中,主從器件的定義沒有意義。
雖然消除時鐘信號的目的是防止噪聲問題,但這將造成另一個問題。如前所述,來自主器件的命令將通過SIO中的時鐘信號發送到從器件。但是由于UART沒有任何時鐘信號,UART接口無法接受任何命令。因此,接收器必須等待數據到達,然后隨時正確接收數據。
為了使接收器能夠識別傳輸數據的開始和結束,發射器應對傳輸數據的開始或結束數據設置一些指示。起始位是數據“0”,停止(結束)位是數據“1”,它們分別添加在傳輸數據之前和之后。
在數據傳輸之前,發射器或接收器的分配已經完成。如果數據線變為“0”(數據線通常為“1”),則接收器會識別到發射器將要發送數據并準備開始接收傳輸數據。在數據傳輸過程中,由于沒有時鐘信號,很難理解一個位的時間間隔有多長。如果發射器發送了兩個“0”(“00”),則接收器不可能在發射器和接收器之間沒有任何約定的情況下識別出傳輸數據只是一個“0”或“00”。
關于該約定的典型例子是,接收器用頻率比發射器中的發送時鐘快16倍的時鐘接收數據,該發射器應在數據傳輸之前預先定義。一旦接收器檢測到起始位,它將每隔16個時鐘捕獲一次數據。
在UART和SIO中都可以添加奇偶校驗位。
UART中可能有兩個以上的接口。在這種情況下,只有一個接口能分配為主器件,其它接口作為從器件。接收器將應答返回給發射器,使得對接功能可在UART上工作。
3. SSP(SPI)(同步串行端口(串行外圍接口))
SSP是同步串行接口的總稱,是指包括SPI在內的幾種不同的數據傳輸方法。
SPI有一個主器件和多個從器件,這就是說SPI具有星型結構。所有接口共享兩條數據線。其中一條是主器件發送數據線(SPDO),另一條是主器件接收數據線(SPDI)。通過使用這兩條數據線,SPI可以方便地控制從器件接口,同時可輕松地增加從器件接口的數量,因為數據線上不會發生數據沖突。一條時鐘線(SPCLK)將由主器件和所有從器件以及數據線共享。
主器件具有選擇線路(SPFSSn)來訪問其中一個從器件以便與主器件進行通信。一條選擇線路連接到一個從器件,因此主器件的選擇線路數量與從器件的相同。
4. I2C(內部集成電路)
即使網絡中存在多個從器件,在I2C中也只需要兩條線路,即一條數據線和一條時鐘線。I2C還允許多個主器件結構(可以分配多個主器件)。在每個接口控制電路中設置一個寄存器,可以完成主從器件的分配。I2C是同步接口。
設計I2C數據線和時鐘線以實現多個主器件結構。所有接口的輸出只有“0”或高阻狀態,數據和時鐘的高電平由線路上的上拉元件(“線與”結構)提供。每個接口的輸出緩沖區只有NMOS晶體管,沒有PMOS晶體管。必要時,這些晶體管變為“導通”,接口的輸出將為“0”。如果這些NMOS晶體管變為“關斷”,則接口的輸出變為高阻狀態。由于上拉元件連接到每條線路,如果連接到信號線的接口的所有輸出變成高Z狀態,則該線路被上拉直至VDD并變成“1”。這是“線與”結構。
在“線與”連接中,數據“0”比數據“1”強。也就是說,如果兩個接口分別輸出“0”和“1”(高阻狀態),則該線路的數據變為“0”。該強度優先級實現了對于防止多個主器件系統中發生數據沖突的仲裁方式。考慮兩個主器件同時向數據線輸出數據的情況,如果其中一個數據為“0”,另一個數據為“1”,則后一個接口將立即知道其它輸出為“0”,并根據自己的判斷立即停止線路訪問。結果是前一個接口將保留使用線路的優先級,后一個接口將在知道前一個接口的數據傳輸結束后恢復數據傳輸。這種仲裁方式使得多個主器件系統成為可能。
5. CAN(控制器區域網絡)
CAN是一種主要用于汽車內部通信的網絡。CAN的結構致力于抗噪聲。它采用差分數據線結構,不需要任何時鐘線。所以CAN是異步接口,盡管CAN僅由與I2C一樣的兩條信號線構成。
雙數據線即所謂的CAN.H和CAN.L。兩個數據信號之間的電壓差表示數據;較高電壓的CAN.H和較低電壓的CAN.L定義數據“0”,而這些信號的相同電壓電平定義數據“1”。這些定義實現了高的抗噪性,因為噪聲將以相同的方式同時影響兩條線路。
CAN接口有一種特殊的同步方式,不需要任何時鐘,主從器件之間沒有區別。因此,信號線上存在數據沖突的可能性,所以每個接口應設置優先級。接口之間的同步按以下方式進行。首先,發射器將在發送數據之前傳輸起始位“0”。因為到目前為止,信號線上的數據一直是“1”,所以其它接口將檢測到這個“0”數據,并將它們自己的時鐘同步到數據“0”的邊緣。當接收到傳輸的數據時,接收器將其時鐘定時調整到數據“0”的任意邊緣。當數據“1”繼續時,這個方法將出現問題,因為數據“1”在CAN.H或CAN.L上沒有邊緣。連續的數據序列“1”無邊緣,并且接收器可能與發射器失去同步。其解決方案是采用“位填充”技術,這種情況下,在五個連續的“1”數據之后插入一個數據“0”,這僅用于發射器的同步。接收器將使用數據“0”來同步其時鐘,并將其從接收的數據中消除。
如前所述,應對每個接口設置優先級,以防止數據沖突。為此,每個CAN接口都有標識符(11位)。標識符可用于確定每個接口傳輸數據的優先級,以防止數據沖突。
實際上,當數據“0”和數據“1”從不同的接口輸出到數據線時,數據“0”在CAN中的傳輸類似于在I2C中的傳輸。在起始位之后和傳輸數據之前,發射器將傳輸其自己的標識符。當兩個接口同時發送它們的標識符時,其中一個接口將取得優先級,輸出“0”,另一個輸出“1”。前一個接口可以占用數據線,在另一個接口之前完成發送。
6. USB 2.0(通用串行總線2.0)
USB 2.0是一種非常流行的串行接口,特別是對于個人電腦而言。眾所周知,USB 2.0被廣泛應用于各種應用,比如鍵盤、鼠標、打印機、閃存、硬盤、揚聲器等接口。
USB 2.0有三種速度等級,分別是低速(1.5Mbps)、全速(12Mbps)和高速(480Mbps)。
USB接口采用分層結構。在USB中,主器件稱為“主機”,從器件稱為“設備”。USB 2.0是一個星型網絡,其中一個“主機”控制著許多“設備”。例如,PC是主機,設備可以是通過USB電纜連接到PC的任何設備,比如鍵盤、鼠標等。
USB的顯著特點是即插即用。連接或卸下USB設備時,不必關閉電腦。這就是USB變得如此流行的原因之一。
為了使USB設備能夠很容易地連接到網絡或從網絡中移除,USB主機必須做一些工作。當USB設備連接到網絡時,該設備會向主機發送請求。接收來自設備的請求后,主機開始獲取設備的信息,選擇最合適的驅動器,并為設備分配地址。主機的這個操作稱為枚舉。枚舉成功后,主機可以正確訪問設備。
主機可控制的設備和集線器的最大數量為127。如果集線器插入網絡,則串聯連接的集線器數量必須小于或等于5。
USB 2.0電纜有4根導線:VDD、GND、信號D+和信號D-。對于一個傳輸數據,信號D+和D-彼此取互補值。如果D+為高電平,D-為低電平,則數據被稱為“差分1”。如果D+為低電平,D-為高電平,則數據被稱為“差分0”。
但在USB 2.0網絡的實際數據傳輸中,“差分1”和“差分0”并不一定分別意味著數據“1”和數據“0”。USB的數據格式為NRZI(反向不歸零)。當一個時鐘間隔內沒有變化時,此格式將定義數據“1”,當發生從高到低或從低到高的變化時,則定義數據“0”。
USB 2.0沒有任何時鐘線,所以它是異步接口。所以主機和驅動器必須像在CAN中一樣進行相互同步。傳輸8位SYNC碼,使接收器與發射器以USB全速同步。
數據傳輸時,在USB 2.0中連續傳輸6次數據“1”后,完成數據“0”的位填充,因為只有數據“1s”連續傳輸時,NRZI格式中無信號邊緣出現。
7. EtherMAC(以太網媒體訪問控制)
EtherMAC是以太網接口的一部分。由于以太網的接口結構非常復雜,所以不容易閘釋完全的以太網功能。我們只對以太網進行簡要說明,提供到目前為止所述的與其它串行接口的差異概述。
以太網的“以太”來自一種叫做“以太”的介質,它是一種物理學定義,曾經被認為可以填滿所有的空間。“以太”的存在最終被否定了,但由于“以太”被認為是無處不在的,所以它成為了網絡命名的起源。
以太網主要分為四層,即物理層、數據鏈路層、網絡層和上層。EtherMAC處理最低的兩層:物理層和數據鏈路層。
以太網電纜由四根信號線組成。兩條絞合線用于輸出數據,另兩條絞合線用于輸入數據。這種電纜即使沒有電屏蔽層也有很好的抗噪性(非屏蔽雙絞線:UTP)。由于沒有時鐘線,因此以太網是一個異步接口。
為了理解以太網的概念,我們先介紹一下10Base-T,盡管100Base-TX是當今最流行的版本,但10Base-T是基本的,且比100Base-TX簡單得多。
10Base-T是一個使用雙絞線的接口,具有10Mbps傳輸速率和基帶格式。
信號傳輸采用曼徹斯特代碼格式。在曼徹斯特代碼中,數據“1”和“0”分別定義為上升轉換和下降轉換。
以太網沒有任何時鐘線。接收器和發射器必須彼此同步,與CAN和USB2.0接口中一樣。但即使相同的數據連續重復,也不需要位填充,因為數據“1”和數據“0”中都有信號轉換。發射器發送數據前的56位連續脈沖,僅用于使接收器與發射器同步。
以太網沒有USB 2.0中所必不可少的主機和設備關系等層次結構。當接口的一個單元想要輸出數據時,該線路必須是空閑的。如果另一個單元占用線路,該單元必須等待。即使該單元已確保線路可用并開始發送數據,但如果另一個單元也開始同時發送數據,則會發生沖突。一旦發生沖突,所有單元將停止發送數據,并等待線路空閑。當一個單元嘗試開始發送時,可能會再次發生另一個沖突,因為其它單元也嘗試開始發送。為了防止這種永久性的沖突,以太網有一個防止沖突的對策。當發生沖突時,發射器的等待時間由隨機數決定。這對發生沖突的單元有效。但是當先前的一個單元開始再次發送數據時,新單元可能會發生沖突。一個單元最多可以發送16次相同的數據。
對于無主從器件關系的系統分擔通信責任而言,這是最佳的仲裁方式之一。
審核編輯:湯梓紅
-
微控制器
+關注
關注
48文章
7542瀏覽量
151316 -
寄存器
+關注
關注
31文章
5336瀏覽量
120230 -
CAN
+關注
關注
57文章
2744瀏覽量
463615 -
串行接口
+關注
關注
3文章
327瀏覽量
42603 -
uart
+關注
關注
22文章
1235瀏覽量
101354
原文標題:微控制器的七個串行接口
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論