概述
嵌入式系統(tǒng)經(jīng)常需要集成電路之間的通信。舉個(gè)例子,一個(gè)數(shù)字溫度傳感器向主控芯片報(bào)告房間的環(huán)境溫度。通常情況,這種數(shù)據(jù)會(huì)通過一個(gè)串行接口來傳輸。
那么,什么是串行接口? 在最基本的角度來說,串行接口是一個(gè)移位寄存器,每次將數(shù)據(jù)移入/移出一個(gè)比特。 下面的插圖顯示了移位寄存器的數(shù)據(jù)先通過并行方式加載,比如內(nèi)存拷貝。在并行加載完成后,數(shù)據(jù)被逐位移出,從最小有效位開始。
那么,為什么我們要使用一個(gè)串行接口而不是并行接口呢? 如果我們想用并行接口傳輸一個(gè)32位的值,我們需要在微處理器上至少有32個(gè)引腳。并行總線的速度非??欤鼈冃枰罅康耐獠恳_,只為此單獨(dú)接口使用的引腳。在設(shè)備上添加額外的引腳會(huì)增加微處理器的材料成本和物理尺寸。
使用串行接口的動(dòng)機(jī)是,一個(gè)串行接口只由幾個(gè)引腳組成。 使用少量的引腳,我們可以傳輸任何大小的數(shù)據(jù)。 如果我們需要的數(shù)據(jù)是32位而不是8位,我們只需要增加時(shí)鐘周期。 減少引腳的數(shù)量也使印刷電路板(PCB/printed circuit board)的開發(fā)變得更加容易,因?yàn)樾枰谠O(shè)備之間布線的引腳少得多。
我們在這里要研究的串行接口被稱為UART。 術(shù)語UART是指通用異步接收/發(fā)送器(Universal Asynchronous Receiver/Transmitter)。 UART通常用于與沒有圖形顯示功能的設(shè)備連接。 UART可以向終端程序提供輸入/輸出功能,使用戶能夠監(jiān)控狀態(tài)并提供輸入功能。
UART基本構(gòu)造(Infrastructure)
-
需要的引腳(Pin)
UART接口由兩個(gè)引腳組成:Rx和Tx引腳。 Rx引腳用于接收數(shù)據(jù)。 Tx引腳用于傳輸數(shù)據(jù)。 當(dāng)兩個(gè)設(shè)備使用UART連接時(shí),一個(gè)設(shè)備的Rx引腳與第二個(gè)設(shè)備的Tx引腳相連。
-
通用寄存器(Common Registers)
Rx和Tx引腳通常連接到獨(dú)立的移位寄存器(一個(gè)用于移出數(shù)據(jù),一個(gè)用于移入數(shù)據(jù))。 兩個(gè)獨(dú)立的移位寄存器允許UART在同一時(shí)間發(fā)送和接收數(shù)據(jù)。
除了移位寄存器外,還有一個(gè)或多個(gè)狀態(tài)寄存器。 軟件通過檢查狀態(tài)寄存器來確定發(fā)送移位寄存器何時(shí)為空。 當(dāng)發(fā)送寄存器為空時(shí),下一個(gè)字節(jié)的數(shù)據(jù)可以被加載到發(fā)送移位寄存器中。 狀態(tài)寄存器也會(huì)有一個(gè)狀態(tài)位,指示何時(shí)收到新的數(shù)據(jù)字節(jié)。 另一方面,軟件可以讀取接收寄存器,并觸發(fā)刪除數(shù)據(jù)操作,并允許下一字節(jié)的數(shù)據(jù)被移入。
UART可以有額外的寄存器,允許軟件對UART的行為進(jìn)行配置。? 通過軟件可以設(shè)置接收發(fā)送數(shù)據(jù)的速率,還有所傳輸數(shù)據(jù)的格式。比如設(shè)置傳輸速度的波特率,每字節(jié)數(shù)據(jù)是否包含校驗(yàn)位。
數(shù)據(jù)包結(jié)構(gòu)(Packet Structure)
UART的關(guān)鍵特征之一是其名稱中的 "A"。 A "代表異步的意思。 UART在本質(zhì)上是異步的,因?yàn)樵O(shè)備之間沒有共享的時(shí)鐘。 相反,兩個(gè)設(shè)備必須就正在發(fā)送的數(shù)據(jù)的結(jié)構(gòu)和數(shù)據(jù)的發(fā)送速度達(dá)成一致。 這種協(xié)議允許UART接口對數(shù)據(jù)線進(jìn)行過度采樣(over sample),并將原始數(shù)據(jù)重新構(gòu)建為一個(gè)數(shù)據(jù)包。 我們將研究構(gòu)成UART數(shù)據(jù)包的三個(gè)特性。
-
數(shù)據(jù)速率(Data Rate)
為了在兩個(gè)UART之間正確發(fā)送數(shù)據(jù),兩個(gè)UART必須被配置為以相同的數(shù)據(jù)速率接收和發(fā)送數(shù)據(jù)。 這通常被稱為UART的波特率(baud rate)。 通過設(shè)置相同的波特率,UART的內(nèi)部狀態(tài)機(jī)可以設(shè)置移位寄存器工作的合適速率。 常見的數(shù)據(jù)速率包括9600和115200波特,但一些UART支持更高的數(shù)據(jù)速率,可達(dá)幾兆比特/秒。比如使用CC2564c的藍(lán)牙芯片,上面的UART,帶硬件流控的,設(shè)置的波特率可達(dá)3Mbit/s。
-
奇偶校驗(yàn)(Parity)
在某些情況下,數(shù)據(jù)包可能包含一個(gè)奇偶校驗(yàn)位。 奇偶校驗(yàn)位被接收設(shè)備用來確定在傳輸過程中是否發(fā)生了任何數(shù)據(jù)損壞。 如果一個(gè)數(shù)據(jù)包被配置為偶數(shù)奇偶校驗(yàn),包括奇偶校驗(yàn)位在內(nèi)的1的總數(shù)應(yīng)該是偶數(shù)。??如果一個(gè)數(shù)據(jù)包被配置為奇數(shù)奇偶校驗(yàn),那么包括奇偶校驗(yàn)位在內(nèi)的1的總數(shù)應(yīng)該是一個(gè)奇數(shù)。
-
數(shù)據(jù)幀(Data Framing)
為了使微處理器能夠檢測到數(shù)據(jù)開始發(fā)送,我們需要定義沒有數(shù)據(jù)被發(fā)送時(shí),Rx/Tx線的行為。 在大多數(shù)情況下,當(dāng)沒有數(shù)據(jù)被發(fā)送時(shí),Rx/Tx線都將被驅(qū)動(dòng)為高電平。 當(dāng)一個(gè)設(shè)備發(fā)送數(shù)據(jù)時(shí),發(fā)送過程的開始是一個(gè)起始位(start bit)。 UART將拉低Tx線使之處于低電平,持續(xù)時(shí)間是一個(gè)時(shí)鐘周期,根據(jù)數(shù)據(jù)傳輸速率而定的時(shí)鐘周期,表明數(shù)據(jù)的傳輸即將開始。
在起始位之后,數(shù)據(jù)根據(jù)定義好的數(shù)據(jù)傳輸速率逐位移出(shifted out),直到所有的數(shù)據(jù)傳輸完畢。 UARTs首先傳輸數(shù)據(jù)的最小有效位。 一旦所有數(shù)據(jù)傳輸完畢,就會(huì)發(fā)送奇偶校驗(yàn)位(此位可選,兩邊設(shè)備的配置一樣即可),然后是停止位。 UART通過拉高Tx線,保持高電平達(dá)1個(gè)周期來產(chǎn)生一個(gè)停止位,這個(gè)周期根據(jù)數(shù)據(jù)傳輸速率而定。許多UART可以被配置為產(chǎn)生1或2個(gè)停止位。
下圖展示了如何使用偶數(shù)和奇數(shù)奇偶校驗(yàn)來傳輸數(shù)值0x71。
發(fā)送的數(shù)據(jù)如果沒有起始位或停止位,就會(huì)出現(xiàn)成幀錯(cuò)誤。 UART可能會(huì)簡單地丟棄這些數(shù)據(jù),或者更有可能通過在狀態(tài)寄存器中設(shè)置一個(gè)狀態(tài)位來顯示一個(gè)錯(cuò)誤情況。 在大多數(shù)情況下,如果有大量的電磁干擾使傳輸中的數(shù)據(jù)失效,就會(huì)發(fā)生成幀錯(cuò)誤。
8N1
UARTs最常見的配置之一被稱為8N1。 這代表了8個(gè)數(shù)據(jù)位,沒有奇偶校驗(yàn)位,和一個(gè)停止位。 8N1每傳輸10個(gè)比特,就會(huì)傳輸8個(gè)比特的數(shù)據(jù)。 增加一個(gè)奇偶校驗(yàn)位和額外的停止位會(huì)增加每個(gè)數(shù)據(jù)包的開銷,并降低實(shí)際數(shù)據(jù)的總體吞吐量。
參考:
1,UART basics文章來源:http://www.zghlxwxcb.cn/news/detail-477880.html
UART Basics – ECE353: Introduction to Microprocessor Systems – UW–Madison文章來源地址http://www.zghlxwxcb.cn/news/detail-477880.html
到了這里,關(guān)于嵌入式 - UART介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!