今天給大俠帶來基于FPGA的 UART 控制器設計(VHDL)(中),由于篇幅較長,分三篇。今天帶來第二篇,中篇,RS-232 串口通信簡介。話不多說,上貨。
導讀
串口的出現是在1980年前后,數據傳輸率是115kbps~230kbps。串口出現的初期是為了實現連接計算機外設的目的,初期串口一般用來連接鼠標和外置Modem以及老式攝像頭和寫字板等設備。串口也可以應用于兩臺計算機(或設備)之間的互聯及數據傳輸。由于串口(COM)不支持熱插拔及傳輸速率較低,部分新主板和大部分便攜電腦已開始取消該接口。串口多用于工控和測量設備以及部分通信設備中。
串口是串行接口的簡稱,也稱串行通信接口或串行通訊接口(通常指COM接口),是采用串行通信方式的擴展接口。串行接口(Serial Interface)是指數據一位一位地順序傳送。其特點是通信線路簡單,只要一對傳輸線就可以實現雙向通信(可以直接利用電話線作為傳輸線),從而大大降低了成本,特別適用于遠距離通信,但傳送速度較慢。
通信協(xié)議是指通信雙方的一種約定。約定包括對數據格式、同步方式、傳送速度、傳送步驟、檢糾錯方式以及控制字符定義等問題做出統(tǒng)一規(guī)定,通信雙方必須共同遵守。串口通信的兩種最基本的方式為:同步串行通信方式和異步串行通信方式。
同步串行通信是指SPI(Serial Peripheral interface)的縮寫,顧名思義就是串行外圍設備接口。SPI是一種高速的全雙工通信總線。封裝芯片上總共有四根線,PCB布局布線也簡單,所以現在很多芯片集成了這個協(xié)議。主要用于CPU和各種外圍器件進行通信,TRM450是SPI接口。
異步串行通信是指UART(Universal Asynchronous Receiver/Transmitter),通用異步接收/發(fā)送。UART是一個并行輸入成為串行輸出的芯片,通常集成在主板上。UART包含TTL電平的串口和RS232電平的串口。RS232也稱標準串口,也是最常用的一種串行通訊接口。RS-232-C 標準對兩個方面作了規(guī)定,即信號電平標準和控制信號線的定義。RS-232-C 采用負邏輯規(guī)定邏輯電平,信號電平與通常的TTL電平也不兼容,RS-232-C 將-5V~-15V 規(guī)定為“1”,+5V~+15V 規(guī)定為“0”。
一般情況下外設不能直接和主機直接相連,它們之間的信息交換主要存在以下問題:
- 速度不匹配 通常情況下外設的工作速度會比主機慢許多,而且外設之間的速度差異也比較大。
- 數據格式不匹配 不同的外設在進行信息存儲和處理時的數據單元可能不同,例如最基本的數據格式可以分為并行數據和串行數據。
- 信息類型不匹配 不同的外設可能采用不同類型的信號,有些是模擬信號,有些是數字信號,因此所采用的處理方式也不同。
為了解決外設和主機之間信息交換的問題,就需要設計一個信息交換的中間環(huán)節(jié)——接口。本篇將首先對接口技術進行簡要的介紹,然后以接口中最常用的 UART 控制器為例,詳細介紹用 FPGA 實現 UART 控制器的方法。
第二篇內容摘要:本篇介紹RS-232 串口通信簡介 ,包括串口通信概述協(xié)議 、RS-232 通信時序和 UART以及串口通信實現方案等相關內容。
二、RS-232 串口通信簡介
2.1 串口通信概述
在數據通信、計算機網絡以及分布式工業(yè)控制系統(tǒng)中,經常采用串行通信來交換數據和信息。1969 年,美國電子工業(yè)協(xié)會(EIA)將 RS-232C(簡稱 RS-232)定為串行通信接口的電氣標準,該標準定義了數據終端設備(DTE)和數據通信設備(DCE)間按位串行傳輸的接口信息,合理安排了接口的電氣信號和機械要求,適合于數據傳輸速率在 0~20000bit/s 范圍內的通信。RS-232 作為一種標準接口,不僅被內置于每一臺計算機中,同時也被內置于各種外設中。
RS-232 具有以下幾個優(yōu)點:
- 使用廣泛,幾乎每一臺 PC 都會有一個或者多個 RS-232 接口;
- 連接距離可達到 15m;
- 實現簡單,RS-232 用于雙向連接,只需要 3 條導線。
除了 RS-232 標準,美國電子工業(yè)協(xié)會(EIA)還制定了 RS-422 與 RS-485 標準。RS-422由 RS-232 發(fā)展而來,它是為彌補 RS-232 之不足而提出的。RS-422 定義了一種平衡通信接口,將傳輸速率提高到 10Mbit/s,傳輸距離延長到 4000 英尺(速率低于 100kbit/s 時),并允許在一條平衡總線上連接最多 10 個接收器。
RS-422 是一種單機發(fā)送、多機接收的單向、平衡傳輸規(guī)范,被命名為 TIA/EIA-422-A 標準。為擴展應用范圍,EIA 又于 1983 年在 RS-422 基礎上制定了 RS-485 標準,增加了多點、雙向通信能力,即允許多個發(fā)送器連接到同一條總線上,同時增加了發(fā)送器的驅動能力和沖突保護特性,擴展了總線共模范圍,命名為 TIA/EIA-485-A標準。
由于 EIA 提出的建議標準都是以“RS”作為前綴,所以在通信工業(yè)領域,仍然習慣將上述標準以 RS 作前綴稱謂。RS-232、RS-422 與 RS-485 的電氣參數如表 2 所示。
表 2 RS-232、RS-422 與 RS-485 的電氣參數表
雖然 RS-232、RS-422 與 RS-485 標準對接口的電氣特性做出了規(guī)定,但是沒有規(guī)定連接插件、電纜或協(xié)議,所以在此基礎上用戶可以建立自己的高層通信協(xié)議。RS-232 等協(xié)議在視頻傳輸中被廣泛應用,許多廠家都建立了一套高層通信協(xié)議,或公開或廠家獨家使用。如錄像機商家中的 Sony 與松下對錄像機的 RS-422 控制協(xié)議是有差異的,視頻服務器上的控制協(xié)議則更多了,如 Louth、Odetis 協(xié)議是公開的,而 ProLINK 則是基于 Profile 上的。
目前,RS-232 是 PC 機與通信工業(yè)中應用最廣泛的一種串行接口,本篇后兩篇就詳細介紹一下 RS-232 協(xié)議的內容和使用 FPGA 開發(fā) RS-232 接口的方法。
2.2 RS-232 協(xié)議
標準的 RS-232 接口有 25 根信號線,其中有 4 根數據線、11 根控制線、3 根定時線和 7根備用線。通常情況下,使用 25 根信號線中的 9 根就可以實現 RS-232 通信。
1)DSR 信號線
DSR(Data Set Ready)意思為數據裝置就緒,當其狀態(tài)為有效時,表明 Modem 處于可以使用的狀態(tài)。
注意:Modem 是 Modulator/DEModulator 的縮寫,中文名稱是調制解調器。Modem 是一種在發(fā)送端通過調制將數字信號轉換為模擬信號,而在接收端通過解調再將模擬信號轉換為數字信號的設備。
2)DTR 信號線
DTR(Data Terminal Ready)意思為數據終端就緒,當其狀態(tài)為有效時,表明數據終端可以使用。
3)RTS 信號線
RTS(Request To Send)意思為請求發(fā)送,即當終端需要發(fā)送數據時,使該信號有效,向Modem 請求發(fā)送。它用于控制 Modem 是否進入發(fā)送狀態(tài)。
4)CTS 信號線
CTS(Clear To Send)意思為允許發(fā)送,這個信號是對 RTS 信號的響應。當 Modem 已經準備好接收終端發(fā)送過來的數據時,使該信號有效,通知終端開始發(fā)送數據。
5)DCD 信號線
DCD(Data Carrier Detection)意思為數據載波檢出,當此信號為有效時表示 Modem 已經接通了通信鏈路,即本地 Modem 收到了通信鏈路另一端的遠程 Modem 送來的載波信號,終端可以準備接收數據。
6)RI 信號線
RI(Ringing)意思為振鈴指示,當本地 Modem 收到交換臺發(fā)送的振鈴呼叫信號時,使該信號有效,通知終端已被呼叫。
7)TxD 信號線
TxD(Transmitted Data)意思是發(fā)送數據,終端通過此信號線將數據發(fā)送給 Modem。
8)RxD 信號線
RxD(Received Data)意思是接收數據,終端通過此信號線從 Modem 接收數據。
9)地線
地線有兩根,分別是信號地 SG(Signal Ground)和保護地 PE(Protection Ground),信號地是所有信號的參考電平,保護地用于連接設備外殼或者地表。
常見的 RS-232 串行口連接器主要有兩種,一種是 25 針的 DB-25,另一種是 9 針的 DB-9,其示意圖如圖 1 所示。
圖 1 RS-232 串行口連接器示意圖
其中 DB-9 主要用于上述的 9 根信號線連接的方法,DB-25 可以連接所有 RS-232 標準定義的信號線。DB-25 也可用像 DB-9 那樣使用,但是它們的針號與信號之間的線連接關系是不一樣的,如表 3 所示。
表 3 DB-25、DB-9 針號信號線連接對應表
最為簡單且常用的 RS-232 連接方法是三線連接法,即地、接收數據和發(fā)送數據三腳相連。對于上述的 DB-25 連接器和 DB-9 連接器,三線連接法的原則如表 4 所示。
表 4 DB-25、DB-9 三線連接法
在電氣特性方面,標準 RS-232 接口有如下規(guī)定:
- 對于數據傳輸線 RxD 和 TxD,邏輯“1”對應的電平是-15V~-3V,邏輯“0”對應的電平是+3V~+15V。
- 對于 RTS、CTS、DSR、DTR、DCD 等信號線,信號有效時對應信號線上為正電壓+3V~+15V,反之則是負電壓-15V~-3V。
由于 RS-232 電氣特定規(guī)定的電平不符合通常電路中所使用的 TTL 或者 CMOS 電平,所以在接入電路之前需要對其進行轉換。RS-232 串口電平的轉換一般是使用專門的芯片實現的,其中為最常用的就是美信(MAXIM)公司的 MAX232。
MAX232 可以將串口設備需要發(fā)送的 TTL/CMOS邏輯電平轉換為 RS-232 邏輯電平,同時也可以將要接收的 RS-232 邏輯電平轉換為 TTL/CMOS電平,圖 2 所示就是 MAX232 芯片的頂層圖。MAX232 可提供 DIP/SO/TSSOP 3 種封裝,可以滿足不同的設計需求。
圖 2 MAX232 芯片的頂層圖
MAX232 的典型連接方法如圖 3 所示,其中有 5 個 0.1μ 的去耦電容;11 管腳和 10 管腳是 TTL/CMOS 電平輸入,對應 14 管腳和 7 管腳的 RS-232 電平輸出,它們一般接到 RS-232 的RxD 上;12 管腳和 9 管腳是 TTL/CMOS 電平輸出,對應 13 管腳和 8 管腳的 RS-232 電平輸入,它們一般接到 RS-232 的 TxD 上。
圖 3 MAX232 典型連接示意圖
2.3 RS-232 通信時序和 UART
在串行通信中,用“波特率”來描述數據的傳輸速率。所謂波特率,即每秒鐘傳送的二進制位數,其單位為 bit/s(bits per second),它是衡量傳輸串行數據速度快慢的重要指標。有時也用“位周期”來表示傳輸速率,位周期是波特率的倒數。國際上規(guī)定了一個標準波特率系列:110bit/s、300bit/s、600bit/s、1200bit/s、1800bit/s、2400bit/s、4800bit/s、9600bit/s、14.4kbit/s、19.2kbit/s、28.8kbit/s、33.6kbit/s、56kbit/s。如 9600bit/s,其意義是每秒傳送 9600 位數據,包含字符位和其他必須的位,如奇偶校驗位、起始位、停止位。
大多數串行接口電路的接收波特率和發(fā)送波特率都可以設置,但接收方的接收波特率必須與發(fā)送方的發(fā)送波特率相同。通信線上所傳輸的字符數據(代碼)是逐位傳送的,1 個字符由若干位組成,因此每秒鐘所傳輸的字符數(字符速率)和波特率是兩種概念。在串行通信中所說的傳輸速率是指波特率,而不是指字符速率,假如在異步串行通信中,傳送一個字符,包括12 位(其中有一個起始位,8 個數據位,2 個停止位),其傳輸速率是 1200bit/s,每秒所能傳送的字符數是 1200/(1+8+1+2)=100 個。
在串行通信中,除了可以設置波特率外,其他的如字符數據的位數、奇偶校驗位、停止位也可以被設置。其中,字符數據的位數可以被設置為 5~8 位;奇偶校驗位可以去除,也可以設置為奇校驗或者偶校驗;停止位可以設置為 1 位、1.5 位或者 2 位。
下面介紹一下串行通信的時序。串行總線在空閑時候保持邏輯“1”狀態(tài)(即串行連接線上的電平為-3V~-15V),當需要傳送一個字符時,首先會發(fā)送一個邏輯為“0”的起始位,表示開始發(fā)送數據;之后,就逐個發(fā)送數據位、奇偶校驗位和停止位(邏輯為“1”)。例如,通過RS-232 串行通信發(fā)送一個字符“1”(二進制為 01100001),設置為 8 位數據位,1 位奇偶校驗位,1 位停止位,則發(fā)送時序圖如圖 4 所示。
圖 4 RS-232 串行口通信時序圖
對于一個設備的處理器來說,要接收和發(fā)送串行通信的數據,還需要一個器件將串行的數據轉換為并行數據以便于處理器進行處理,這個器件就是 UART。UART(Universal AsynchronousReceiver/Transmitter)全稱是通用異步收發(fā)器,其功能是輔助處理器與串行設備之間的通信。
作為 RS-232 通信接口的一個重要部分,UART 具有以下功能:
- 將由計算機內部傳送過來的并行數據轉換為用于輸出的串行數據流;
- 將計算機外部傳遞來的串行數據轉換為字節(jié),供計算機內部使用并行數據的器件使用;? 在輸出的串行數據流中加入奇偶校驗位,并對從外部接收的數據流進行奇偶校驗;
- 在輸出數據流中加入啟停標記,并從接收數據流中刪除啟停標記;
- 提供和處理器之間的通信信號,可以處理處理器和串行通信設備之間的同步管理問題。
隨著處理器功能越來越強,目前大部分處理器中都集成了 UART,用戶的工作僅僅是根據需要對其進行配置即可。
2.4 串口通信實現方案
實現串口通信主要需要完成兩部分工作:
(1)將串口電平轉換為設備電路板的工作電平,即實現 RS-232 電平和 TTL/CMOS 電平的轉換;
(2)接收并且校驗串行的數據,將數據變成并行的并提供給處理器處理。
前面已經介紹了實現 RS-232 電平和 TTL/CMOS 電平轉換可以用接口芯片實現,實現數據的串行到并行轉化用的是 UART,它們是實現串行通信必不可少的兩個部分。雖然目前大部分處理器芯片中都集成了 UART,但是一般 FPGA 芯片卻沒有這個特點,所以使用 FPGA 作為處理器可以有兩個選擇,第一個選擇是使用 UART 芯片進行串并轉換,第二個選擇是在 FPGA 內部實現 UART 功能。
使用 UART 芯片進行串并轉換的優(yōu)點是設計簡單,但是卻會使設計的成本增加并且增加電路板的面積。選擇在 FPGA 片上實現 UART 能夠節(jié)省成本,但是會占用一部分 FPGA的資源,如果有一定富余的 FPGA 資源,這是一個不錯的選擇。本篇下面的內容將詳細介紹使用 FPGA 實現 UART 的思路和步驟。
本篇到此結束,下一篇帶來基于FPGA的 UART 控制器設計(VHDL)(下),使用 FPGA 實現 UART,包括UART 實現原理、UART 工作流程、信號監(jiān)測器模塊的實現、波特率發(fā)生器模塊的實現、移位寄存器模塊的實現、奇偶校驗器模塊的實現、總線選擇器模塊的實現、計數器模塊的實現、UART 內核模塊的實現、UART 頂層模塊的實現 、測試平臺的編寫和仿真等相關內容。