1 UART發(fā)展歷史1.1 早期的串行通訊設(shè)備早期的電報(bào)機(jī)器使用長度可變的脈沖信號進(jìn)行數(shù)據(jù)傳輸,比如摩斯電碼;
摩斯電碼
后來電傳打印機(jī)(teleprinters )普遍使用5、6、7或8個數(shù)據(jù)位來表示各種字符編碼,最終成為計(jì)算機(jī)外圍設(shè)備。電傳打字機(jī)( teletypewriter 簡稱 tty)成為小型計(jì)算機(jī)十分出色的通用I/O設(shè)備。
Teletypewritter
由于歷史的發(fā)展原因,早期在Unix終端是一個名字為ASR33的電傳打字機(jī),而電傳打字機(jī)的英文單詞為Teletype(或Teletypewritter),縮寫為tty。因此,終端設(shè)備也被稱為tty設(shè)備。這就是TTY這個名稱的來源。
1.2 早期的芯片級UARTDEC(Digital Equipment Corporation)公司的Gordon Bell 為該公司的PDP系列計(jì)算機(jī)設(shè)計(jì)了第一個UART,不過體積龐大,UART的線路占據(jù)了整個電路板;
后來DEC將串行線路單元的設(shè)計(jì)濃縮為早期的UART單芯片,以方便自己使用。
DEC是美國一家計(jì)算機(jī)公司;
西部數(shù)據(jù)(Western Digital)公司在1971年左右將其開發(fā)為第一個廣泛可用的UART單芯片 WD1402A。這是中型集成電路的早期產(chǎn)品。
Western Digital是美國計(jì)算機(jī)硬盤驅(qū)動器制造商和數(shù)據(jù)存儲公司。
1.3 現(xiàn)代UART的發(fā)展2000年代開始,大多數(shù)IBM或者相關(guān)的計(jì)算機(jī)都刪除了其外部RS232的COM端口,將其替換為帶寬性能更加出色的USB端口;
對于仍然需要RS-232串行COM端口的用戶,現(xiàn)在通常使用外部USB轉(zhuǎn)UART轉(zhuǎn)換器,常見的有CH340,Silicon Labs 210x的驅(qū)動程序,現(xiàn)在很多處理器和芯片都內(nèi)置了UART。
2 預(yù)備知識通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter,通常稱為UART),在UART通信中,兩個UART直接通信。
發(fā)送端的UART將來自控制設(shè)備(如CPU)的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),以串行方式將其發(fā)送到接收端的UART,然后由接收端的UART將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)以用于接收設(shè)備的正常處理。
這里只需要兩條線RX/TX即可在兩個UART之間傳輸數(shù)據(jù)。具體如下圖所示;
3 協(xié)議層UART傳輸?shù)臄?shù)據(jù)被封裝成數(shù)據(jù)包。每個數(shù)據(jù)包包含1個起始位,5~9個數(shù)據(jù)位(取決于UART的具體設(shè)置),一個可選的奇偶校驗(yàn)位以及1個或2個停止位,具體如下圖所示;
協(xié)議格式
起始位UART數(shù)據(jù)傳輸線通常在不傳輸數(shù)據(jù)時保持在高電平。
為了開始數(shù)據(jù)傳輸,發(fā)送端UART在一個時鐘周期內(nèi)將傳輸線從高電平拉低到低電平。
當(dāng)接收端UART檢測到高電壓到低電壓轉(zhuǎn)換時,它開始以波特率的頻率讀取數(shù)據(jù)位中的每一位數(shù)據(jù)。
數(shù)據(jù)數(shù)據(jù)位包含正在傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,則可以是5位,最多8位。如果不使用奇偶校驗(yàn)位,則數(shù)據(jù)幀的長度可以為9位。
在大多數(shù)情況下,數(shù)據(jù)首先以低有效位發(fā)送。
校驗(yàn)位在串口通信中一種簡單的檢錯方式。
有四種檢錯方式:偶校驗(yàn)、奇校驗(yàn)、高校驗(yàn)和低校驗(yàn)。當(dāng)然沒有校驗(yàn)位也是可以的。
對于偶和奇校驗(yàn)的情況,串口會設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用一個值確保傳輸?shù)臄?shù)據(jù)有偶個或者奇?zhèn)€邏輯高位。
舉個例子,如果數(shù)據(jù)是011,則滿足;
偶校驗(yàn),校驗(yàn)位為0,保證邏輯高的位數(shù)是偶數(shù)個。
奇校驗(yàn),校驗(yàn)位為1,這樣就有3個邏輯高位。
具體如下圖所示;
奇校驗(yàn)和偶校驗(yàn)
高位和低位不是真正的檢查數(shù)據(jù),而是強(qiáng)行將校驗(yàn)位設(shè)置為邏輯高或者邏輯低。這樣使得接收設(shè)備能夠知道一個位的狀態(tài),有機(jī)會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據(jù)是否不同步。
停止位發(fā)送端UART將數(shù)據(jù)傳輸線從低電壓驅(qū)動到高電壓至少持續(xù)兩位數(shù)據(jù)的時間寬度來表示整個數(shù)據(jù)包的傳輸已經(jīng)結(jié)束。
由于數(shù)據(jù)是在傳輸線上定時的,并且每一個設(shè)備有其自己的時鐘,很可能在通信中兩臺設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時鐘同步的機(jī)會。適用于停止位的位數(shù)越多,不同時鐘同步的容錯性越好,但是數(shù)據(jù)傳輸率同時也越慢。
波特率波特率是串口數(shù)據(jù)的傳輸速度,即Bit/s,常見的波特率有:9600,19200,38400,57600,115200,當(dāng)然還有很多波特率,不再一一給出;
假設(shè)目前UART的配置為,1個起始位,8個數(shù)據(jù)位,0個校驗(yàn)位,1個停止位,那么9600的波特率,可以計(jì)算出每一位數(shù)據(jù)的時間寬度為:
那么傳輸一個字節(jié)(也就是10 bit 數(shù)據(jù))需要的時間為 1.04 毫秒。
下面用串口抓取了UART的TX上的信號,其中一位數(shù)據(jù)的時間寬度為26微秒,具體如下圖所示;
則可以簡單計(jì)算得到;
因此波特率大概為 38400;
下表是各個波特率下數(shù)據(jù)位時間寬度;
4 傳輸過程發(fā)送端UART從數(shù)據(jù)總線轉(zhuǎn)換并行數(shù)據(jù):
發(fā)送端UART將起始位,奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)包中:
整個數(shù)據(jù)包從發(fā)送端UART串行發(fā)送到接收端UART;接收端UART按照預(yù)先配置好的波特率對數(shù)據(jù)線進(jìn)行采樣:
接收端UART解析接收的數(shù)據(jù),丟棄數(shù)據(jù)包中的起始位,奇偶校驗(yàn)位和停止位:
接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線:
5 物理層UART、RS232、RS485在串口通信中,主要區(qū)別是電平的不同,其中UART通常使用TTL電平,下面介紹這幾個存在的差異;
TTL
TTL全名是晶體管-晶體管邏輯集成電路(Transistor-Transistor Logic)
輸入高電平最小2V,輸出高電平最小2.4V,典型值3.4V;
輸入低電平最大0.8V,輸出低電平最大0.4V,典型值0.2V。
RS232
RS232 邏輯1電平(MARK)=-3V~-15V,邏輯0電平(SPACE)=+3~+15V;
同樣的,對于傳輸數(shù)據(jù)0x55,即二進(jìn)制的01010101,RS232和TTL的區(qū)別如下;
RS485
RS485是差分信號進(jìn)行串行傳輸;
邏輯1以兩線間的電壓差為+(2~6)V表示;
邏輯“0”以兩線間的電壓差為-(2~6)V表示;
在工業(yè)通信中,使用RS485比較多,因?yàn)镽S485是差分信號,可以抑制共模干擾,因此在惡劣的環(huán)境中擁有很好的抗干擾性,比較穩(wěn)定;
6 優(yōu)缺點(diǎn)沒有任何通信協(xié)議是完美的,以下是UART的一些利弊,可幫助您確定它們是否適合您的項(xiàng)目需求:
優(yōu)點(diǎn)
通信只需要兩條數(shù)據(jù)線;
無需時鐘信號;
有奇偶校驗(yàn)位,方便通信的差錯檢查;
只需要接收端和發(fā)送端設(shè)置好數(shù)據(jù)包結(jié)構(gòu),即可穩(wěn)定通信;
缺點(diǎn)
數(shù)據(jù)幀最大支持9位數(shù)據(jù);
不支持多主機(jī)或多從機(jī)的主從系統(tǒng);
編輯:jq
-
集成電路
+關(guān)注
關(guān)注
5378文章
11319瀏覽量
360428 -
電平
+關(guān)注
關(guān)注
5文章
357瀏覽量
39813 -
晶體管
+關(guān)注
關(guān)注
77文章
9610瀏覽量
137666 -
uart
+關(guān)注
關(guān)注
22文章
1219瀏覽量
101121 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
248瀏覽量
24345
原文標(biāo)題:我打賭!你還不會UART!不信,你看看~
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論