孫倩
【摘要】 本文介紹了RS232串口通信協(xié)議的基本概念,并在串口通信的基礎(chǔ)上,引入可編程邏輯器件,實(shí)現(xiàn)多幀數(shù)據(jù)通信。通過簡單的物理連線實(shí)現(xiàn)PC與器件,器件與器件之間較復(fù)雜的通信信息交互,通用性較強(qiáng)。
【關(guān)鍵字】 FPGA 串口通信 Verilog HDL語言 幀數(shù)據(jù)解析
一、前言
在常用的RS232通信中,可實(shí)現(xiàn)單片系統(tǒng)間的數(shù)據(jù)交互,然而我們利用串口通信僅僅為了得到一個(gè)字節(jié)的數(shù)據(jù)就顯得太過浪費(fèi)。實(shí)際通信應(yīng)用中,在串口發(fā)送時(shí),我們需要將一組串口數(shù)據(jù)封裝組合為一幀數(shù)據(jù),設(shè)置一個(gè)幀數(shù)據(jù)指令約束,規(guī)定幀頭、數(shù)據(jù)長度、有效數(shù)據(jù)、校驗(yàn)信息、幀尾等可用信息。因此實(shí)現(xiàn)串口幀數(shù)據(jù)通信,在有限的串口連線上賦予更多通信信息,豐富了器件間數(shù)據(jù)交互內(nèi)容。
二、串口通信協(xié)議組成
簡單的RS232串口通信利用TXD,RXD實(shí)現(xiàn)全雙工通信。協(xié)議中規(guī)定通用字格式為:1位起始位、8位數(shù)據(jù)位、奇偶校驗(yàn)位、1位停止位組成。按位發(fā)送和接收字節(jié)。在串口發(fā)送時(shí),主設(shè)備按照串口格式組成順序,以某一波特率產(chǎn)生TXD,主設(shè)備的TXD作為從設(shè)備的RXD,檢測RXD下降沿,以相同的波特率接收數(shù)據(jù),操作可逆。只要保證接收與發(fā)送端各自的波特率時(shí)鐘一致,便可保證通信的順利進(jìn)行,即完成一個(gè)字節(jié)的數(shù)據(jù)交互。
三、幀數(shù)據(jù)通信
在單字節(jié)串口通信的基礎(chǔ)上,將多個(gè)數(shù)據(jù)組合成有規(guī)律的一幀數(shù)據(jù)進(jìn)行通信。利用FPGA可對(duì)通信數(shù)據(jù)靈活組合,只要保證收、發(fā)端遵從實(shí)現(xiàn)約束的幀通信協(xié)議,便能完成數(shù)據(jù)交互。我們以串口幀數(shù)據(jù)通信實(shí)現(xiàn)PC對(duì)某一產(chǎn)品的各子模塊功能檢測為例,通過Verilog HDL語言,完成邏輯編寫,模塊分為接收模塊、發(fā)送模塊、FIFO緩存級(jí)模塊、波特率設(shè)置模塊。
發(fā)送模塊主要實(shí)現(xiàn)單字節(jié)串口數(shù)據(jù)的組合成一幀數(shù)據(jù)對(duì)外發(fā)送,實(shí)質(zhì)是對(duì)單字節(jié)串口發(fā)送模塊的反復(fù)調(diào)用。一幀數(shù)據(jù)通信格式以幀頭單字節(jié)0xAA,幀數(shù)據(jù)長度(一字節(jié))、檢測對(duì)應(yīng)子模塊編號(hào)(N+1個(gè)字節(jié))、設(shè)定幀尾0x55結(jié)尾,無檢驗(yàn)位,數(shù)據(jù)格式如圖3-1所示。
接收模塊主要實(shí)現(xiàn)對(duì)一幀串口指令的接收識(shí)別解析,通信解析流程如圖3-2所示。首先檢測RXD的下降沿,解析幀頭數(shù)據(jù),同時(shí)計(jì)數(shù)器字節(jié)計(jì)數(shù)開始,判斷幀頭數(shù)據(jù)為0xaa,解析數(shù)據(jù)長度,由寄存器變量緩存(一字節(jié)),解析檢測對(duì)應(yīng)子模塊編號(hào)(N+1個(gè)字節(jié)),解析幀頭數(shù)據(jù)為0x55后通信完成,判斷計(jì)數(shù)器記錄字節(jié)個(gè)數(shù)與寄存器變量緩存的數(shù)據(jù)長度是否一致,判斷通信中是否漏掉數(shù)據(jù),邏輯實(shí)現(xiàn)過程由狀態(tài)機(jī)完成。FIFO緩存級(jí)模塊用于幀數(shù)據(jù)緩存處理,避免數(shù)據(jù)覆蓋。波特率設(shè)置模塊用于接收、發(fā)送端通信速度的靈活把控。
在正確接收完成后,接收端提取檢測對(duì)應(yīng)子模塊編號(hào)進(jìn)行對(duì)應(yīng)校驗(yàn)工作,校驗(yàn)完成后,將檢驗(yàn)結(jié)果與接收的幀數(shù)據(jù)重組,以幀頭0xAA,幀數(shù)據(jù)長度(一字節(jié))、檢測對(duì)應(yīng)子模塊編號(hào)(N+1個(gè)字節(jié))、檢測結(jié)果(一字節(jié))、幀尾0x55的形式發(fā)送回PC上位機(jī)。從而完成對(duì)該產(chǎn)品指定功能模塊的校驗(yàn)工作。實(shí)際應(yīng)用中,幀數(shù)據(jù)可多加一級(jí)和校驗(yàn)字節(jié),避免接收端將有效數(shù)據(jù)中0x55誤判斷為幀尾數(shù)據(jù),增強(qiáng)串口通信的可靠性。
四、總結(jié)
基于FPGA的串口幀數(shù)據(jù)通信實(shí)現(xiàn),利用簡單的RS232通信協(xié)議可滿足器件之間完成復(fù)雜的數(shù)據(jù)交互,通信靈活性更強(qiáng),可用于PC對(duì)器件的復(fù)雜功能調(diào)控,操作更加直觀,人機(jī)交互良好。
參 考 文 獻(xiàn)
[1]鄭彪, 汪秉文. 串口通信在工業(yè)控制中的應(yīng)用[J]. 自動(dòng)化儀表, 2002, 23(4):58-59.
[2]王富東, 邵光慶. 單片機(jī)多串口通訊技術(shù)及其應(yīng)用[J]. 儀器儀表學(xué)報(bào), 2002, 23(z1):262-264.
[3]程鍇, 張楠. 串口通訊技術(shù)在組態(tài)軟件中應(yīng)用[J]. 電子測量技術(shù), 2004(4):82-82.
[4]王麗, 雷秀, 余建國. 基于PC機(jī)與單片機(jī)AT89C52的串行通信協(xié)議設(shè)計(jì)[J]. 機(jī)電工程技術(shù), 2006, 35(2):19-21.
[5]李瑩, 賈彬. 一種基于狀態(tài)機(jī)的串口通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[J]. 電子設(shè)計(jì)工程, 2012, 20(7):100-103.