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