數據通訊的兩種方式:web
並行通訊:利用多根傳輸線並行傳輸。短距離、快速、通訊效率高。編程
串行通訊:一條傳輸線逐位順序傳輸。遠距離、低速、線路簡單、低成本。數組
串口通訊的概念很是簡單,串口按位(bit)發送和接收字節。儘管比按字節(byte)的並行通訊慢,可是串口能夠在使用一根線發送數據的同時用另外一根線接收數據。它很簡單而且可以實現遠距離通訊。好比IEEE488定義並行通行狀態時,規定設備線總長不得超過20米,而且任意兩個設備間的長度不得超過2米;而對於串口而言,長度可達1200米。異步
UART(Universal Asynchronous Receiver/Transmitter),通用異步收發傳輸器。函數
串口通訊協議oop
通訊協議是指通訊雙方約定的一些規則。對於兩個進行通訊的端口,這些參數必須匹配:測試
a,比特率:這是一個衡量通訊速度的參數。它表示每秒鐘傳送的bit的個數。例如300波特表示每秒鐘發送300個bit。當咱們提到時鐘週期時,就是指比特率,例如若是協議須要4800波特率,那麼時鐘是4800Hz。這意味着串口通訊在數據線上的採樣率爲4800Hz。一般電話線的比特率爲14400,28800和36600。比特率能夠遠遠大於這些值,可是波特率和距離成反比。高比特率經常用於放置的很近的儀器間的通訊。編碼
b,數據位:通訊中實際傳輸數據的位數。一般是 五、六、七、8 。url
c,中止位:用於表示單個包/幀的最後一位。典型的值爲1,1.5和2位。因爲數據是在傳輸線上定時的,而且每個設備有其本身的時鐘,極可能在通訊中兩臺設備間出現了小小的不一樣步。所以中止位不只僅是表示傳輸的結束,而且提供計算機校訂時鐘同步的機會。適用於中止位的位數越多,不一樣時鐘同步的容忍程度越大,可是數據傳輸率同時也越慢。spa
d,奇偶校驗位:在串口通訊中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。固然沒有校驗位也是能夠的。對於偶和奇校驗的狀況,串口會設置校驗位(數據位後面的一位),用一個值確保傳輸的數據有偶個或者奇個邏輯高位。例如,若是數據是011,那麼對於偶校驗,校驗位爲0,保證邏輯高的位數是偶數個。若是是奇校驗,校驗位爲1,這樣就有3個邏輯高位。高位和低位不真正的檢查數據,簡單置位邏輯高或者邏輯低校驗。這樣使得接收設備可以知道一個位的狀態,有機會判斷是否有噪聲干擾了通訊或者是否傳輸和接收數據是否不一樣步。
UART基本結構
⑴輸出緩衝寄存器,它接收CPU從數據總線上送來的並行數據,並加以保存。
⑵ 輸出移位寄存器,它接收從輸出緩衝器送來的並行數據,以發送時鐘的速率把數據逐位移出,即將並行數據轉換爲串行數據輸出。
⑶ 輸入移位寄存器,它以接收時鐘的速率把出如今串行數據輸入線上的數據逐位移入,當數據裝滿後,並行送往輸入緩衝寄存器,即將串行數據轉換成並行數據。
⑷ 輸入緩衝寄存器,它從輸入移位寄存器中接收並行數據,而後由CPU取走。
⑸控制寄存器,它接收CPU送來的控制字,由控制字的內容,決定通訊時的傳輸方式以及數據格式等。例如採用異步方式仍是同步方式,數據字符的位數,有無奇偶校驗,是奇校驗仍是偶校驗,中止位的位數等參數。
⑹狀態寄存器。狀態寄存器中存放着接口的各類狀態信息,例如輸出緩衝區是否空,輸入字符是否準備好等。在通訊過程當中,當符合某種狀態時,接口中的狀態檢測邏輯將狀態寄存器的相應位置「1」,以便讓CPU查詢。
工做原理
發送接收
發送邏輯對從發送FIFO 讀取的數據執行「並→串」轉換。控制邏輯輸出起始位在先的串行位流,而且根據控制寄存器中已編程的配置,後面緊跟着數據位(注意:最低位 LSB 先輸出)、奇偶校驗位和中止位。
在檢測到一個有效的起始脈衝後,接收邏輯對接收到的位流執行「串→並」轉換。此外還會對溢出錯誤、奇偶校驗錯誤、幀錯誤和線停止(line-break)錯誤進行檢測,並將檢測到的狀態附加到被寫入接收FIFO 的數據中。
波特率產生
波特率除數(baud-rate divisor)是一個22 位數,它由16 位整數和6 位小數組成。波特率發生器使用這兩個值組成的數字來決定位週期。經過帶有小數波特率的除法器,在足夠高的系統時鐘速率下,UART 能夠產生全部標準的波特率,而偏差很小。
數據收發
發送時,數據被寫入發送FIFO。若是UART 被使能,則會按照預先設置好的參數(波特率、數據位、中止位、校驗位等)開始發送數據,一直到發送FIFO 中沒有數據。一旦向發送FIFO 寫數據(若是FIFO 未空)
UART 的忙標誌位BUSY 就有效,而且在發送數據期間一直保持有效。BUSY 位僅在發送FIFO 爲空,且已從移位寄存器發送最後一個字符,包括中止位時才變無效。即 UART 再也不使能,它也能夠指示忙狀態。
中斷控制
出現如下狀況時,可以使UART 產生中斷:
FIFO 溢出錯誤
線停止錯誤(line-break,即Rx 信號一直爲0 的狀態,包括校驗位和中止位在內)
奇偶校驗錯誤
幀錯誤(中止位不爲1)
接收超時(接收FIFO 已有數據但未滿,然後續數據長時間不來)
發送
接收
因爲全部中斷事件在發送到中斷控制器以前會一塊兒進行「或運算」操做,因此任意時刻 UART 只能向中斷產生一箇中斷請求。經過查詢中斷狀態函數UARTIntStatus( ),軟件能夠在同一個中斷服務函數裏處理多箇中斷事件(多個並列的if 語句)。
FIFO 操做
發送FIFO的基本工做過程: 只要有數據填充到發送FIFO 裏,就會當即啓動發送過程。因爲發送自己是個相對緩慢的過程,所以在發送的同時其它須要發送的數據還能夠繼續填充到發送 FIFO 裏。當發送 FIFO 被填滿時就不能再繼續填充了,不然會形成數據丟失,此時只能等待。已發送完畢的數據會被自動清除,在發送FIFO 裏同時會多出一個空位。
接收FIFO的基本工做過程: 當硬件邏輯接收到數據時,就會往接收FIFO 裏填充接收到的數據。程序應當及時取走這些數據,數據被取走也是在接收FIFO 裏被自動刪除的過程,所以在接收 FIFO 裏同時會多出一個空位。若是在接收 FIFO 裏的數據未被及時取走而形成接收FIFO 已滿,則之後再接收到數據時因無空位能夠填充而形成數據丟失。
收發FIFO 主要是爲了解決UART 收發中斷過於頻繁而致使CPU 效率不高的問題而引入的。在進行 UART 通訊時,中斷方式比輪詢方式要簡便且效率高。可是,若是沒有收發 FIFO,則每收發一個數據都要中斷處理一次,效率仍然不夠高。若是有了收發FIFO,則能夠在連續收發若干個數據後才產生一次中斷而後一併處理,這就大大提升了收發效率。
徹底沒必要要擔憂FIFO 機制可能帶來的數據丟失或得不到及時處理的問題,由於它已經幫你想到了收發過程當中存在的任何問題,只要在初始化配置UART 後,就能夠放心收發了, FIFO 和中斷例程會自動搞定一切。
迴環操做
UART 能夠進入一個內部迴環(Loopback)模式,用於診斷或調試。在迴環模式下,從Tx 上發送的數據將被Rx 輸入端接收。在設計系統時,爲了判斷通訊故障是外部的數據鏈路的故障,仍是CPU內部驅動或者CPU自己的問題,就要採用Loopback模式來測試。
串行紅外協議
在某些 ARM 芯片裏,UART 還包含一個 IrDA 串行紅外(SIR)編碼器/ 解碼器模塊。IrDA SIR 模塊的做用是在異步UART數據流和半雙工串行SIR 接口之間進行轉換。片上不會執行任何模擬處理操做。SIR 模塊的任務就是要給UART 提供一個數字編碼輸出和一個解碼輸入。UART 信號管腳能夠和一個紅外收發器鏈接以實現IrDA SIR物理層鏈接。
串行傳送,數據是一位一位串行傳送的,而計算機處理數據是並行數據。因此當數據由計算機送至數據發送器時,首先把串行數據轉換爲並行數才能送入計算機處理。所以串並轉換是串行接口電路的重要任務。所以,在串行接口中,必需要有 " 接收移位寄存器 " (串→並)和 " 發送移位寄存器 " (並→串). 在數據輸入過程當中,數據 1 位 1 位地從外設進入接口的 " 接收移位寄存器 " ,當 " 接收移位寄存器 " 中已接收完 1 個字符的各位後,數據就從 " 接收移位寄存器 " 進入 " 數據輸入寄存器 " . CPU 從 " 數據輸入寄存器 " 中讀取接收到的字符.(並行讀取,即 D7~D0 同時被讀至累加器中). " 接收移位寄存器 " 的移位速度由 " 接收時鐘 " 肯定.
在數據輸出過程當中, CPU 把要輸出的字符(並行地)送入 " 數據輸出寄存器 " , " 數據輸出寄存器 " 的內容傳輸到 " 發送移位寄存器 " ,而後由 " 發送移位寄存器 " 移位,把數據 1 位 1 位地送到外設. " 發送移位寄存器 " 的移位速度由 " 發送時鐘 " 肯定.
接口中的 " 控制寄存器 " 用來容納 CPU 送給此接口的各類控制信息,這些控制信息決定接口的工做方式.
" 狀態寄存器 " 的各位稱爲 " 狀態位 " ,每個狀態位均可以用來指示數據傳輸過程當中的狀態或某種錯誤.例如,用狀態寄存器的 D5 位爲 "1" 表示 " 數據輸出寄存器 " 空,用 D0 位表示 " 數據輸入寄存器滿 " ,用 D2 位表示 " 奇偶檢驗錯 " 等.
可以完成上述 " 串 <- -> 並 " 轉換功能的電路,一般稱爲 " 通用異步收發器 " ( UART : Universal Asynchronous Receiver and Transmitter )。
握手協議
RS-232通行方式容許簡單鏈接三線:Tx、Rx和地線。可是對於數據傳輸,雙方必須對數據定時採用使用相同的波特率。儘管這種方法對於大多數應用已經足夠,可是對於接收方過載的狀況這種使用受到限制。這時須要串口的握手功能。在這一部分,咱們討論三種最經常使用的RS-232握手形式:軟件握手、硬件握手和Xmodem。
a,軟件握手:一般用在實際數據是控制字符的狀況,相似於GPIB使用命令字符串的方式。必須的線仍然是三根:Tx,Rx和地線,由於控制字符在傳輸線上和普通字符沒有區別,函數SetXModem容許用戶使用或者禁止用戶使用兩個控制字符XON和XOFF。這些字符在通訊中由接收方發送,使發送方暫停。 例如:假設發送方以高波特率發送數據。在傳輸中,接收方發現因爲CPU忙於其餘工做,輸入buffer已經滿了。爲了暫時中止傳輸,接收方發送XOFF,典型的值是十進制19,即十六進制13,直到輸入buffer空了。一旦接收方準備好接收,它發送XON,典型的值是十進制17,即十六進制11,繼續通訊。輸入buffer半滿時,LabWindows發送XOFF。此外,若是XOFF傳輸被打斷,LabWindows會在buffer達到75%和90%時發送XOFF。顯然,發送方必須遵循此守則以保證傳輸繼續。
b,硬件握手:第二種是使用硬件線握手。和Tx和Rx線同樣,RTS/CTS和DTR/DSR一塊兒工做,一個做爲輸出,另外一個做爲輸入。第一組線是RTS(Request to Send)和CTS(Clear toSend)。當接收方準備好接收數據,它置高RTS線表示它準備好了,若是發送方也就緒,它置高CTS,表示它即將發送數據。另外一組線是DTR(DataTerminal Ready)和DSR(Data SetReady)。這些線主要用於Modem通訊。使得串口和Modem通訊他們的狀態。
c,XModem握手:XModem文件傳輸協議。這個協議在Modem通訊中很是通用。儘管它一般使用在Modem通訊中,XModem協議可以直接在其餘遵循這個協議的設備通訊中使用。
(1)實現數據格式化:由於來自CPU的是普通的並行數據,因此,接口電路應具備實現不一樣串行通訊方式下的數據格式化的任務。在異步通訊方式下,接口自動生成起止式的幀數據格式。在面向字符的同步方式下,接口要在待傳送的數據塊前加上同步字符。
(2)進行串-並轉換:串行傳送,數據是一位一位串行傳送的,而計算機處理數據是並行數據。因此當數據由計算機送至數據發送器時,首先把串行數據轉換爲並行數才能送入計算機處理。所以串並轉換是串行接口電路的重要任務。
(3)控制數據傳輸速率:串行通訊接口電路應具備對數據傳輸速率——波特率進行選擇和控制的能力。
(4)進行錯誤檢測:在發送時接口電路對傳送的字符數據自動生成奇偶校驗位或其餘校驗碼。在接收時,接口電路檢查字符的奇偶校驗或其餘校驗碼,肯定是否發生傳送錯誤。
(5)進行TTL與EIA電平轉換:CPU和終端均採用TTL電平及正邏輯,它們與EIA採用的電平及負邏輯不兼容,需在接口電路中進行轉換。
(6)提供EIA-RS-232C接口標準所要求的信號線:遠距離通訊採用MODEM時,須要9根信號線;近距離零MODEM方式,只須要3根信號線。這些信號線由接口電路提供,以便與MODEM或終端進行聯絡與控制。
MODEM
調制解調器,是一種計算機硬件,它能把計算機的數字信號(低頻的數字基帶信號)翻譯成可沿普通電話線傳送的脈衝信號(高頻),而這些脈衝信號又可被線路另外一端的另外一個調制解調器接收,並譯成計算機可懂的語言。這一簡單過程完成了兩臺計算機間的通訊。
Modem,實際上是Modulator(調製器)與Demodulator(解調器)的簡稱,中文稱爲調制解調器。根據Modem的諧音,親暱地稱之爲「貓」。所謂調製,就是把數字信號(離散信號)轉換成電話線上傳輸的模擬信號(連續信號);解調,即把模擬信號轉換成數字信號。
UART: http://baike.baidu.com/link?url=pxxv99v0IeNfkzGZ1QAQW28jFI9o4fM_jUJ_6a3hzLBF8EhLqf8q9g-jjj80LEBY