摘 要: 串行通信模塊是每臺(tái)計(jì)算機(jī)所必須的對(duì)外通信模塊的一部分,但由于串行通信協(xié)議較多,串行接口也較多,所以,往往這部分模塊需要占用較多的體積和資源。將RS 232,RS 422和RS 485三種串行協(xié)議和同異步兩種串行傳輸方式通過(guò)FPGA兼容于一塊智能通信板卡上,通過(guò)上位機(jī)控制界面的控制,完成對(duì)8路串行通道的配置,并介紹了板卡的總體結(jié)構(gòu)及硬件設(shè)計(jì),展示了上位機(jī)控制界面的通信效果。結(jié)果表明,該智能串行通信卡能夠很好地完成多協(xié)議多方式的串行通信之間的切換,達(dá)到了預(yù)期的效果。
關(guān)鍵詞: 串行通信; 串行協(xié)議; 串行方式; FPGA; 智能串行通信卡
中圖分類號(hào): TN911?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)07?0039?04
0 引 言
串行通信作為計(jì)算機(jī)與其他設(shè)備之間廣泛使用的一種通信方式,具有開發(fā)簡(jiǎn)單,抗干擾性強(qiáng),傳輸距離遠(yuǎn)的特點(diǎn)。作為現(xiàn)在應(yīng)用比較廣泛的串行通信協(xié)議RS 232[1],RS 422[2]和RS 485[3]三種標(biāo)準(zhǔn)各有特點(diǎn),應(yīng)用于不同的方面,但是在實(shí)際應(yīng)用中,對(duì)于需要與應(yīng)用不同標(biāo)準(zhǔn)的設(shè)備實(shí)現(xiàn)通信,卻必須添加相應(yīng)的轉(zhuǎn)換模塊,這種方法既繁瑣又很麻煩,而且浪費(fèi)不必要的資源。在需要實(shí)現(xiàn)多標(biāo)準(zhǔn)多設(shè)備同時(shí)與主控計(jì)算機(jī)通信時(shí),以上述的傳統(tǒng)方式,除非主控機(jī)同時(shí)具有三種標(biāo)準(zhǔn)接口,否則幾乎無(wú)法實(shí)現(xiàn)這樣的功能,將會(huì)導(dǎo)致某些設(shè)備與主控機(jī)通信受阻,無(wú)法實(shí)現(xiàn)特定的性能要求,所以提出一種能夠智能化轉(zhuǎn)化上述三種串行傳輸標(biāo)準(zhǔn)的通信系統(tǒng)勢(shì)在必行。
1 總體方案
本文所設(shè)計(jì)的多協(xié)議串行通信模塊的總體結(jié)構(gòu)圖如圖1所示,由于本模塊有8路串行傳輸?shù)耐ǖ?,各通道所?zhí)行的傳輸協(xié)議由上位機(jī)控制界面通過(guò)FPGA對(duì)各路通道進(jìn)行配置,因此由外接設(shè)備所發(fā)出的各通道信號(hào)經(jīng)電平轉(zhuǎn)換電路進(jìn)入FPGA,F(xiàn)PGA內(nèi)的接收/發(fā)送緩存模塊在緩存后,各路通過(guò)調(diào)用RS 232/422/485相應(yīng)的處理模塊進(jìn)行處理。而后經(jīng)串/并轉(zhuǎn)換后,由協(xié)議轉(zhuǎn)換控制模塊傳輸給上位機(jī),完成與外接設(shè)備的實(shí)時(shí)通信。
2 硬件電路設(shè)計(jì)
本系統(tǒng)的硬件部分主要是由具有SCSI(Small Computer System Interface)標(biāo)準(zhǔn)[4]接口的板卡來(lái)實(shí)現(xiàn),板卡上總共有8路串行通道,每路通道的RS 232,RS 422及RS 485的標(biāo)準(zhǔn)協(xié)議的轉(zhuǎn)換控制、同異步串行方式的轉(zhuǎn)換選擇均由Xilinx Spartan6系列的FPGA芯片XC6SLX45完成,F(xiàn)PGA通過(guò)PCI9030與上位機(jī)控制程序完成通信。PCI9030將復(fù)雜的PCI總線轉(zhuǎn)換為簡(jiǎn)單的Local Bus總線[5],F(xiàn)PGA通過(guò)對(duì)Local Bus的讀寫完成與上位機(jī)的通信。由于FPGA芯片的管腳電平一般為標(biāo)準(zhǔn)的TTL電平,與RS 232,RS 422和RS 485串行協(xié)議的輸入電壓的電平不符,故還需要相應(yīng)的電壓轉(zhuǎn)換芯片進(jìn)行電平轉(zhuǎn)換。同時(shí),為了使8路串行通道能夠兼容多種串行接口標(biāo)準(zhǔn),每路通道需要有一款通道轉(zhuǎn)換芯片完成RS 232/RS 422/RS 485協(xié)議的電路轉(zhuǎn)換工作,F(xiàn)PGA通過(guò)對(duì)通道轉(zhuǎn)換芯片進(jìn)行控制從而配置每路通道所支持的通信協(xié)議[6]。圖2是串行通信卡的硬件結(jié)構(gòu)圖。
圖1 多協(xié)議串行通信模塊的總體結(jié)構(gòu)
圖2 智能串行通信卡硬件結(jié)構(gòu)圖
3 串行通信各模塊IP核設(shè)計(jì)
3.1 FPGA片內(nèi)程序設(shè)計(jì)
FPGA內(nèi)部程序大致分為三大模塊:異步UART處理模塊、同步HDLC處理模塊和協(xié)議轉(zhuǎn)換控制模塊,如圖3所示,其中異步UART和同步HDLC模塊各自又可劃分為發(fā)送和接收兩個(gè)部分,如圖4,圖5所示。接收流程如下,首先,8路串行通道所選擇的同異步通信方式及通信協(xié)議由上位機(jī)控制界面已經(jīng)設(shè)定,8路串行數(shù)據(jù)進(jìn)入FPGA后,分別由各路相應(yīng)的處理模塊進(jìn)行處理,而后存入各自的接收緩存(FIFO)中,等待PCI9030進(jìn)行讀取,最后發(fā)送給上位機(jī)。發(fā)送流程則是首先由上位機(jī)選定各通道的配置協(xié)議及方式,而后分別將8路通道上所要傳輸?shù)男畔⑼ㄟ^(guò)PCI9030寫入FPGA內(nèi)各自通道的發(fā)送緩存(FIFO),然后經(jīng)過(guò)相應(yīng)的處理發(fā)送給各通道接口電路直至外接設(shè)備。
圖3 FPGA片內(nèi)程序框圖
圖4 各通道接收程序流程圖
3.2 UART方式
UART(Universal Asynchronous Receiver/Transmitter)協(xié)議作為一種低速全雙工通信協(xié)議[7],是異步串行通信協(xié)議的一種,廣泛應(yīng)用于通信領(lǐng)域等各個(gè)場(chǎng)合。它工作于數(shù)據(jù)鏈路層,其工作原理是以串行方式一位接一位地傳輸數(shù)據(jù)字符的每個(gè)比特。
UART具有如下的協(xié)議特點(diǎn):
(1) UART協(xié)議是設(shè)備之間實(shí)現(xiàn)低速數(shù)據(jù)通信的標(biāo)準(zhǔn)協(xié)議。UART字符格式為1位起始位,5~8位數(shù)據(jù)位,1位奇偶校驗(yàn)位(可選),1位停止位。由于是異步通信,所以在數(shù)據(jù)發(fā)送時(shí),不需要同時(shí)發(fā)送時(shí)鐘。接收器接收數(shù)據(jù)的時(shí)候,用幾倍于波特率的時(shí)鐘對(duì)輸入數(shù)據(jù)流過(guò)采樣,通常采樣時(shí)鐘為波特率的16倍,然后使用16個(gè)采樣值的中間三個(gè)值。
(2) 串行異步數(shù)據(jù)傳輸時(shí),發(fā)送方通過(guò)在字符幀之間插入任意個(gè)空閑位使得幀與幀之間的時(shí)間間隔各不相同,也就是每個(gè)字符幀的傳送都是隨機(jī)的。
(3) 通過(guò)起始位來(lái)實(shí)現(xiàn)收發(fā)雙方的同步,起始位開啟一個(gè)字符幀的傳送,同時(shí)通知接收方數(shù)據(jù)傳送開始。在傳送每個(gè)幀之前,收發(fā)雙方都可以根據(jù)要求改變通信設(shè)置,例如改變傳輸?shù)乃俾剩úㄌ芈剩⒏淖償?shù)據(jù)位的個(gè)數(shù)、改變校驗(yàn)類型、改變停止位的長(zhǎng)度,但發(fā)送和接收雙方的字符格式和波特率必須統(tǒng)一。
UART處理模塊按照邏輯功能可以劃分為六個(gè)小模塊:發(fā)送緩存、接收緩存、波特率產(chǎn)生模塊、邏輯控制模塊、發(fā)送模塊和接收模塊。其中發(fā)送模塊和接收模塊是整個(gè)邏輯電路最核心的功能模塊,它們要完成協(xié)議的轉(zhuǎn)換和數(shù)據(jù)的發(fā)送接收。波特率產(chǎn)生模塊根據(jù)設(shè)定好的波特率產(chǎn)生相應(yīng)的分頻因子,然后對(duì)系統(tǒng)時(shí)鐘進(jìn)行相應(yīng)分頻得到波特率時(shí)鐘。采用數(shù)據(jù)緩存模塊FIFO主要有兩個(gè)考慮:一是為了解決FPGA和PCI9030的Local Bus跨時(shí)鐘域通信問(wèn)題而設(shè)立的,F(xiàn)PGA的內(nèi)部時(shí)鐘與Local Bus上的時(shí)鐘并不一致,數(shù)據(jù)不能直接傳輸,需要一個(gè)緩存地帶來(lái)解決存入和取出的速度不同的問(wèn)題;二是為了很好地解決8路串行通道的向上傳輸競(jìng)爭(zhēng)問(wèn)題,由于8路通道同時(shí)工作,各路相互獨(dú)立,而向上傳輸?shù)穆窂絽s只有32位的Local Bus,所以每路設(shè)立FIFO一方面先把數(shù)據(jù)緩存起來(lái),另一方面等待PCI9030對(duì)每路FIFO進(jìn)行讀取,由于讀取速度遠(yuǎn)遠(yuǎn)快于數(shù)據(jù)的存儲(chǔ)速度,所以可以保證8路通道與上位機(jī)的即時(shí)通信。邏輯控制模塊則是通過(guò)對(duì)上位機(jī)的控制信息的讀取,對(duì)本通道的相應(yīng)協(xié)議的配置等進(jìn)行控制,同時(shí)也對(duì)整個(gè)處理過(guò)程進(jìn)行控制。
3.3 HDLC方式
高級(jí)數(shù)據(jù)鏈路控制規(guī)程HDLC(High?level Data Link Control)是一個(gè)同步傳輸數(shù)據(jù)、面向比特的數(shù)據(jù)鏈路層協(xié)議[8]。IBM公司在70年代初期的時(shí)候首先提出了面向比特的數(shù)據(jù)鏈路層協(xié)議。該協(xié)議包括主站、從站和復(fù)合站三種類型的站點(diǎn)。主站主要負(fù)責(zé)命令幀的發(fā)送、響應(yīng)幀的接收,同時(shí)還負(fù)責(zé)初始化鏈路、控制流程、檢測(cè)差錯(cuò)和恢復(fù)鏈路。從站的主要職責(zé)是接收由主站發(fā)來(lái)的命令幀,向主站發(fā)送響應(yīng)幀,同時(shí)從站還配合主站進(jìn)行鏈路控制,比如參與差錯(cuò)恢復(fù)等。復(fù)合站將主站和從站的功能集于一身,既能發(fā)送命令幀又能接收響應(yīng)幀,并且負(fù)責(zé)控制整個(gè)鏈路。
HDLC協(xié)議根據(jù)通信雙方的傳輸響應(yīng)類型和鏈路結(jié)構(gòu),提供了正常響應(yīng)方式、異步響應(yīng)方式和異步平衡方式三種操作方式。本文中的HDLC即采用這種方式,正常響應(yīng)方式(NRM)適用于點(diǎn)?點(diǎn)和點(diǎn)?多點(diǎn)的不平衡鏈路結(jié)構(gòu),特別是點(diǎn)?多點(diǎn)的鏈路。這種方式中,整個(gè)鏈路的控制由主站負(fù)責(zé),主站主要工作包括初始化鏈路、控制數(shù)據(jù)流、恢復(fù)鏈路等。從站操作簡(jiǎn)單,只有在主站明確允許的情況下,它才可以作出響應(yīng)。
HDLC處理模塊主要分為七個(gè)小模塊:發(fā)送數(shù)據(jù)幀緩存模塊、接收數(shù)據(jù)幀緩存模塊、時(shí)鐘生成接收模塊、CRC校驗(yàn)碼生成模塊、CRC碼檢驗(yàn)?zāi)K,發(fā)送模塊、接收模塊。其中發(fā)送模塊主要完成HDLC協(xié)議的發(fā)送處理、標(biāo)志字的生成及插入“0”[9]。接收模塊主要完成標(biāo)志字檢測(cè)及刪除“0”,HDLC協(xié)議的接收處理等工作。數(shù)據(jù)幀緩存模塊的功能與UART模式下相同。時(shí)鐘生成接收模塊則是負(fù)責(zé)產(chǎn)生每路的發(fā)送同步時(shí)鐘和接收外設(shè)所傳輸?shù)慕邮胀綍r(shí)鐘,該模塊利用FPGA自身的全局時(shí)鐘資源,并不占用邏輯資源。CRC校驗(yàn)碼的生成和檢驗(yàn)則是為了保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性,提高線上資源的利用率。
3.4 協(xié)議轉(zhuǎn)換控制模塊
該模塊主要完成與上位機(jī)的通信,讀取上位機(jī)的控制信息,集中控制各通道RS 232/422/485協(xié)議的配置和同異步傳輸方式的配置,對(duì)數(shù)據(jù)的傳輸以及各通道相應(yīng)狀態(tài)信息的讀取進(jìn)行簡(jiǎn)單的控制,該模塊可以對(duì)各通道的傳輸協(xié)議以及方式進(jìn)行設(shè)置以期符合外接設(shè)備的通信要求。
圖6是PCI9030寫入FPGA的部分配置寄存器,其作用一是儲(chǔ)存記錄上位機(jī)控制界面所錄入的配置信息,二是FPGA通過(guò)對(duì)每路配置寄存器信息的讀取完成對(duì)各路的配置。
圖6 部分配置寄存器
表1是兩種寄存器部分標(biāo)志位的定義。
4 實(shí)驗(yàn)結(jié)果與分析
上位機(jī)控制界面如圖7所示,其功能是對(duì)每通道串口都可進(jìn)行通信方式(HDLC/UART)、通信協(xié)議(RS 232/422/485)、校驗(yàn)方式及波特率、停止位、數(shù)據(jù)位等進(jìn)行相應(yīng)的選擇及配置,波特率設(shè)置在當(dāng)通信方式為UART下可用;在通信方式為HDLC下,接收時(shí)通過(guò)同步時(shí)鐘接收數(shù)據(jù),發(fā)送時(shí)可設(shè)置波特率選擇所需要的同步時(shí)鐘,停止位、數(shù)據(jù)位均不可用。在所有通道配置完畢后,點(diǎn)擊配置按鈕,則將各通道配置信息傳送至FPGA的協(xié)議轉(zhuǎn)換控制模塊完成配置,配置完成后,彈出配置完成對(duì)話框,點(diǎn)擊確定后即可進(jìn)行每路通道的接收發(fā)送顯示,接收發(fā)送效果如圖7所示。
圖7 上位機(jī)串行通信效果圖
5 結(jié) 語(yǔ)
本文設(shè)計(jì)并實(shí)現(xiàn)了基于FPGA的多協(xié)議串行通信模塊,通過(guò)將三種通信協(xié)議集成于一塊板卡上,大大提高了通信模塊的高密度和集成度。FPGA通過(guò)接收上位機(jī)控制界面所設(shè)置的配置信息對(duì)各通道進(jìn)行配置,使應(yīng)用該模塊的通信板卡能良好的兼容三種通信協(xié)議及同異步通信方式,解決了接口板接口過(guò)多、體積過(guò)大的問(wèn)題。目前該板卡已在多套嵌入式系統(tǒng)中得到應(yīng)用,運(yùn)行良好,具有較好的安全性和可靠性。
參考文獻(xiàn)
[1] ANSITIA. ANSITIA?232?F interface between data terminal equipment and data circuit?terminating equipment employing serial binary data interchange [S]. [S.l.]. ANSITIA, 1997.
[2] EIATIA. EIATIA/EIA?422?B electrical characteristics of ba?lanced voltage digital interface circuits [S]. [S.l.]: EIATIA, 1994.
[3] EIA. EIA TSB?89?A application guidelines for TIA/EIA?485?A [S]. USA: EIA, 2006.
[4] ANSI. ANSI SCSI X3.131?1986 standard [S]. USA: ANSI, 1986.
[5] PLX Technology, Inc. SDK user manual [M]. USA: PLX Technology, Inc, 2006.
[6] 吳德銘.基于PCI總線的高速串行通信研究與實(shí)現(xiàn)[D].廈門:廈門大學(xué),2006.
[7] 朱勤,錢敏,楊翠軍.嵌入式UART的設(shè)計(jì)及FPGA驗(yàn)證[J].通信技術(shù),2012,45(1):150?153.
[8] 張必英.基于FPGA的HDLC協(xié)議控制器的設(shè)計(jì)[D].哈爾濱:哈爾濱工程大學(xué),2005.
[9] 高希權(quán).異步傳輸方式的HDLC協(xié)議的實(shí)現(xiàn)[J].通信技術(shù),2008,41(11):78?80.