什么是UART?
通用異步接收器/發(fā)射器,通常稱為UART,是一種串行,異步,全雙工通信協(xié)議,廣泛用于嵌入式領(lǐng)域。
UART連接
UART通道有兩條數(shù)據(jù)線。每個設(shè)備上都有一個 RX 引腳和一個 TX 引腳(RX 用于接收,TX 用于發(fā)送)。每個設(shè)備的 RX 引腳連接到另一個設(shè)備的 TX 引腳。請注意,沒有共享時鐘線!這是通用異步接收器發(fā)送方的“異步”方面。
作為一種異步串行通信協(xié)議,UART的工作原理是逐位傳輸傳輸數(shù)據(jù)的每個二進制位。在UART通信協(xié)議中,當(dāng)信號線上的狀態(tài)為高電平時,表示“1”,當(dāng)信號線上的狀態(tài)為低電平時,表示“0”。
例如,當(dāng)使用UART通信協(xié)議傳輸一個字節(jié)的數(shù)據(jù)時,在信號線上產(chǎn)生八種高電平和低電平組合。
串行通信是指利用一條傳輸線逐位順序傳輸數(shù)據(jù),或者兩條信號線可以形成全雙工通信,如RS232。特點是通信線路簡單,使用簡單的電纜即可實現(xiàn)通信,成本降低,適合遠距離通信的應(yīng)用,但傳輸速度慢。
異步通信以一個字符作為傳輸單元。通信中兩個字符之間的時間間隔不是固定的,但同一字符中兩個相鄰位之間的時間間隔是固定的。一般來說,兩個UART設(shè)備之間的通信不需要時鐘線。此時,需要在兩個UART設(shè)備上指定相同的傳輸速率,以及空閑位,起始位,奇偶校驗位和結(jié)束位,即遵循相同的協(xié)議。
數(shù)據(jù)傳輸速率以波特率表示,即每秒傳輸?shù)奈粩?shù)。例如,如果數(shù)據(jù)傳輸速率為120個字符/秒,每個字符為10位(1個起始位,7個數(shù)據(jù)位,1個校驗位,1個停止位),則其傳輸?shù)牟ㄌ芈蕿?0×120 = 1200個字符/秒= 1200波特。
數(shù)據(jù)通信格式
起始位
每次通信開始時,發(fā)送方都會發(fā)送一個邏輯“0”信號(VOL),指示傳輸字符的開始。由于總線在空閑時處于高電平,因此在開始通信時首先發(fā)送與空閑狀態(tài)明顯不同的信號,即VOL。
數(shù)據(jù)位
起始位之后是我們要傳輸?shù)臄?shù)據(jù)。數(shù)據(jù)位可以是 5、6、7、8、9 位等。形成一個字符(通常為 8 位)。如 ASCII 碼(7 位)和擴展 BCD 碼(8 位)。最低位先發(fā)送,最高位最后發(fā)送。使用低電平表示“0”,使用高電平表示“1”以完成數(shù)據(jù)位的傳輸。
奇偶校驗位
將此位添加到數(shù)據(jù)位后,“1”位的位數(shù)應(yīng)為偶數(shù)(偶數(shù)奇偶校驗)或奇數(shù)(奇偶奇偶校驗),以驗證數(shù)據(jù)傳輸?shù)恼_性。校驗位其實就是調(diào)整號,串口校驗分為幾種方式:
無奇偶校驗
奇偶校驗:如果數(shù)據(jù)位中“1”的數(shù)字是偶數(shù),則奇偶校驗位為“1”,如果“1”的數(shù)字為奇數(shù),則奇偶校驗位為“0”。
偶數(shù)奇偶校驗:如果數(shù)據(jù)中“1”的數(shù)字是偶數(shù),則奇偶校驗位為“0”,如果是奇數(shù),則奇偶校驗位為“1”。
標(biāo)記平價:校驗位始終為 1(不常用)。
平價:奇偶校驗位始終為 0(不常用)。
停止位
它是字符數(shù)據(jù)的結(jié)束標(biāo)記。它可以是 1 位、1.5 位或 2 位 VOH。由于數(shù)據(jù)是在傳輸線上定時的,并且每個設(shè)備都有自己的時鐘,因此在通信中兩個設(shè)備之間很可能會出現(xiàn)小的不同步。因此,停止位不僅指示傳輸結(jié)束,而且還為計算機提供了校正時鐘的機會。停止位越多,數(shù)據(jù)傳輸越穩(wěn)定,但數(shù)據(jù)傳輸速度越慢。
協(xié)議層
在協(xié)議層中,指定了數(shù)據(jù)包的內(nèi)容,由起始位、主數(shù)據(jù)、校驗位和停止位組成。雙方的數(shù)據(jù)包格式必須一致,才能正常發(fā)送和接收數(shù)據(jù)。
波特率
由于異步通信中沒有時鐘信號,因此兩個通信設(shè)備需要就波特率達成一致。常見的有4800、9600、115200等。
通信的開始和停止信號:串行通信的數(shù)據(jù)包從開始信號開始,以停止信號結(jié)束。數(shù)據(jù)包的開始信號由邏輯0的數(shù)據(jù)位表示,數(shù)據(jù)包的停止信號可以用邏輯0的5.1、1、5.2或1個數(shù)據(jù)位表示,只要雙方同意即可。
數(shù)據(jù)檢查:在有效數(shù)據(jù)之后,有一個可選的數(shù)據(jù)校驗位。由于數(shù)據(jù)通信相對容易受到外界干擾,傳輸數(shù)據(jù)偏斜,可以在傳輸過程中增加校驗位來解決這個問題。檢查方法包括奇數(shù)檢查、偶數(shù)檢查、0 檢查(空格)、1 檢查(標(biāo)記)和無奇偶校驗。
奇偶校驗要求有效數(shù)據(jù)和奇偶校驗位中的“1”數(shù)為奇數(shù)。
例如,8 01101001 位有效數(shù)據(jù),總共有 4 個“1”。如果校驗位為“1”,則最后傳輸?shù)臄?shù)據(jù)將是 8 位有效數(shù)據(jù)加上 1 位校驗位,總計 9 位。偶數(shù)奇偶校驗和奇數(shù)奇偶校驗要求正好相反。幀數(shù)據(jù)和奇偶校驗位中“1”的數(shù)目要求為偶數(shù),如數(shù)據(jù)幀:11001010。此時,數(shù)據(jù)框中“1”的數(shù)量為4,因此偶數(shù)奇偶校驗位為“0”。0 check 表示無論有效數(shù)據(jù)的內(nèi)容是什么,校驗位始終為“0”,1 check 表示校驗位始終為“1”。
錯誤狀態(tài)
以下是使用 UART 時可能會遇到的一些錯誤:
成幀錯誤
UART狀態(tài)和控制寄存器將指示各種狀態(tài)條件,包括與傳輸相關(guān)的錯誤狀態(tài)。了解此協(xié)議可以更輕松地理解錯誤狀態(tài)。它們包括成幀錯誤,當(dāng)接收器在預(yù)期的位時間看不到停止位時會發(fā)生。如果數(shù)據(jù)線在預(yù)期停止位時未處于預(yù)期的高電平狀態(tài)(取決于設(shè)置 UART 的數(shù)據(jù)和奇偶校驗位的數(shù)量),則 UART 將發(fā)出成幀錯誤的信號。
奇偶校驗錯誤
僅當(dāng) UART 處于奇偶校驗?zāi)J綍r,才會引發(fā)奇偶校驗錯誤。在奇偶校驗?zāi)J较?,發(fā)送一個額外的位來保存所有傳輸?shù)臄?shù)據(jù)位的奇偶校驗(偶數(shù)或奇數(shù))。如果數(shù)據(jù)位出錯(1 表示 0 或 0 表示 1),則奇偶校驗位將出錯,并且將引發(fā)指定錯誤的錯誤。
溢出錯誤
當(dāng)接收方在下一個字符到達之前不處理(從輸入緩沖區(qū)中刪除字符)時,會發(fā)生溢出錯誤。
中斷條件
中斷條件不一定是錯誤。當(dāng)接收器輸入處于邏輯低電平狀態(tài)超過一定持續(xù)時間(通常超過一個字符時間)時,就會發(fā)生這種情況。對于接收者來說,它看起來像一個帶有成幀錯誤的全0字符。在 python 代碼中,您可以看到重置是通過發(fā)送中斷觸發(fā)的。這會將數(shù)據(jù)線拉低足夠長的時間,以便MCLR被拉低并復(fù)位電路板。
以下是UART,I2c和SPI之間的區(qū)別
您可能想知道,這三種通信中哪一種是最好的?是UART,I2C還是SPI?
沒有“最佳”的通信外圍設(shè)備,每個通信外設(shè)都有自己的優(yōu)點和缺點。因此,用戶應(yīng)選擇最適合其項目的通信外設(shè)。例如,如果您想要最快的通信外設(shè),SPI 將是理想的選擇。另一方面,如果用戶想要連接多個設(shè)備而又不太復(fù)雜,I2C 將是理想的選擇,因為它最多可以連接 127 臺設(shè)備并且易于管理。
很多MUC控制器都支持UART協(xié)議,SPI協(xié)議和I2C協(xié)議,比如Seeeduino XIAO 控制器,用戶可以根據(jù)自己的需求選擇不同的接口設(shè)備。
寫在最后
不同通信協(xié)議都有其優(yōu)點和缺點,根據(jù)應(yīng)用場景合理選擇即可,這樣我們的MUC控制器就可以控制各種各樣的硬件設(shè)備或傳感器設(shè)備了!
-
發(fā)射器
+關(guān)注
關(guān)注
6文章
849瀏覽量
53473 -
時鐘
+關(guān)注
關(guān)注
11文章
1734瀏覽量
131490 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101404 -
異步接收器
+關(guān)注
關(guān)注
0文章
6瀏覽量
5658
發(fā)布評論請先 登錄
相關(guān)推薦
評論