uart詳解

多學習,多喝水!


一、uart概述

1、基礎概念

通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART。它將要傳輸的資料在串行通信並行通信之間加以轉換。作爲把並行輸入信號轉成串行輸出信號的芯片,UART通常被集成於其他通訊接口的連結上。

 

 

img

2、硬件基礎

UART有4個pin(VCC, GND, RX, TX), 用的TTL電平, 低電平爲0(0V),高電平爲1(3.3V或以上)。

  • TX:發送數據端,要接對面設備的RX

  • RX:接收數據端,要接對面設備的TX

  • GND:保證兩設備共地,有統一的參考平面

3、基本原理

異步通信以一個字符爲傳輸單位,數據傳送速率用波特率來表示,即每秒鐘傳送的二進制位數。例如數據傳送速率爲120字符/秒,而每一個字符爲10位(1個起始位,7個數據位,1個校驗位,1個結束位),則其傳送的波特率爲10×120=1200字符/秒=1200波特。數據通信格式如下圖:

 

 

其中各位的意義如下:

起始位:先發出一個邏輯”0”信號,表示傳輸字符的開始。

數據位:可以是5~8位邏輯”0”或”1”。如ASCII碼(7位),擴展BCD碼(8位)。

校驗位:數據位加上這一位後,使得“1”的位數應爲偶數(偶校驗)或奇數(奇校驗)

停止位:它是一個字符數據的結束標誌。可以是1位、1.5位、2位的高電平。

空閒位:處於邏輯“1”狀態,表示當前線路上沒有資料傳送

 

 

 

異步通信是按字符傳輸的,接收設備在收到起始信號之後只要在一個字符的傳輸時間內能和發送設備保持同步就能正確接收。下一個字符起始位的到來又使同步重新校準(依靠檢測起始位來實現發送與接收方的時鐘自同步的)

4、通信方式

1)工作模式

<1>中斷模式

這就是說,當要收發數據時會向CPU發出中斷請求,由CPU完成收發的工作

<2>DMA模式

這就是說,當要收發數據發出DMA請求,然後DMA向CPU發出總線請求,CPU將總線交給DMA之後,由DMA控制數據的收發工作。

2)數據收發方式

<1>使用FIFO(先入先出) 在發送端,首先檢查對方是否請求發送以及FIFO是否已滿,只有當對方有發送請求且FIFO未滿的情況下,纔會向FIFO寫入數據,當FIFO數據達到一定數量是,就會進行中斷請求或DMA請求,將數據通過移位寄存器發送出去。在接收端,通過移位寄存器將數據存入FIFO中。 在接收端,首先檢查FIFO是否已滿,如果FIFO未滿,則可以發出請求發送信號。

<2>不使用FIFO 在發送端首先檢查發送緩衝器是否爲空以及是否有發送請求,如果發送緩衝區爲空,就會向發送緩衝區寫入數據,然後產生中斷請求或DMA請求,將數據發送到接收端。當接收端的接收緩衝區接收到數據後,先讀取數據,然後再次請求發送數據。 注:

FIFO 是“First-In First-Out”的縮寫,意爲“先進先出”,是一種常見的隊列操作。

發送FIFO的基本工作過程: 只要有數據填充到發送FIFO 裏,就會立即啓動發送過程。由於發送本身是個相對緩慢的過程,因此在發送的同時其它需要發送的數據還可以繼續填充到發送 FIFO 裏。當發送 FIFO 被填滿時就不能再繼續填充了,否則會造成數據丟失,此時只能等待。這個等待並不會很久,以9600 的波特率爲例,等待出現一個空位的時間在1ms 上下。發送 FIFO 會按照填入數據的先後順序把數據一個個發送出去,直到發送 FIFO 全空時爲止。已發送完畢的數據會被自動清除,在發送FIFO 裏同時會多出一個空位。

接收FIFO的基本工作過程: 當硬件邏輯接收到數據時,就會往接收FIFO 裏填充接收到的數據。程序應當及時取走這些數據,數據被取走也是在接收FIFO 裏被自動刪除的過程,因此在接收 FIFO 裏同時會多出一個空位。如果在接收 FIFO 裏的數據未被及時取走而造成接收FIFO 已滿,則以後再接收到數據時因無空位可以填充而造成數據丟失。

收發FIFO 主要是爲了解決UART 收發中斷過於頻繁而導致CPU 效率不高的問題而引入的。在進行 UART 通信時,中斷方式輪詢方式要簡便且效率高。但是,如果沒有收發 FIFO,則每收發一個數據都要中斷處理一次,效率仍然不夠高。如果有了收發FIFO,則可以在連續收發若干個數據(可多至14 個)後才產生一次中斷然後一併處理,這就大大提高了收發效率。

 

 

 

 

 

 

 

 

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章