賀竹林,王東響,朱琴躍
HDLC(High-Level Data Link Control)協(xié)議是一種面向比特的高級(jí)數(shù)據(jù)鏈路控制規(guī)程,由于其通信速率高、差錯(cuò)檢測(cè)能力強(qiáng)、支持透明傳輸?shù)葍?yōu)點(diǎn),廣泛應(yīng)用于包括列車控制網(wǎng)絡(luò)在內(nèi)的諸多現(xiàn)場(chǎng)總線通信領(lǐng)域[1]。目前,國內(nèi)應(yīng)用于列車通信網(wǎng)絡(luò)中的HDLC設(shè)備大多從國外引進(jìn),而國內(nèi)部分研發(fā)機(jī)構(gòu)也基于FPGA對(duì)HDLC協(xié)議控制器進(jìn)行了設(shè)計(jì)[2-5]。隨著國內(nèi)列車通信網(wǎng)絡(luò)中HDLC通信接口設(shè)備應(yīng)用的日益廣泛,對(duì)相關(guān)產(chǎn)品的國產(chǎn)化研究就顯得尤為必要。為此,本文在深入研究HDLC協(xié)議標(biāo)準(zhǔn)的基礎(chǔ)上,對(duì)基于該協(xié)議的列車網(wǎng)絡(luò)接口單元的設(shè)計(jì)和實(shí)現(xiàn)進(jìn)行了研究,以期為該產(chǎn)品下一步真正應(yīng)用于列車通信網(wǎng)絡(luò)系統(tǒng)打下基礎(chǔ)。
根據(jù)ISO13239國際標(biāo)準(zhǔn),HDLC協(xié)議主要有NRM(Normal Response Mode)、ARM(Asynchronous Response Mode)、ABM(Asynchronous Balanced Mode)3種工作模式,它們分別針對(duì)非平衡鏈路結(jié)構(gòu)和平衡鏈路結(jié)構(gòu)的網(wǎng)絡(luò)工作情況[6]。
本設(shè)計(jì)主要針對(duì)HDLC網(wǎng)絡(luò)工作在NRM方式下進(jìn)行研究。在該方式中,整個(gè)網(wǎng)絡(luò)由一個(gè)主站和多個(gè)從站組成。主站主要功能是發(fā)送命令(包括數(shù)據(jù)信息)幀、接收響應(yīng)幀,并負(fù)責(zé)對(duì)整個(gè)鏈路控制系統(tǒng)的初啟、流程的控制、差錯(cuò)檢測(cè)或恢復(fù)等;從站主要功能是接收由主站發(fā)來的命令幀,向主站發(fā)送響應(yīng)幀,并且配合主站參與差錯(cuò)恢復(fù)等鏈路控制。主站與從站之間采用RS485通信,一個(gè)主站最多可以掛載31個(gè)從站,在半雙工模式下通信速率最高可達(dá)10Mbit/s。HDLC協(xié)議的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),如圖1所示:
圖1 HDLC網(wǎng)絡(luò)拓?fù)鋱D
HDLC協(xié)議是一種面向比特的數(shù)據(jù)鏈路規(guī)程,在通信過程中報(bào)文的收發(fā)以HDLC幀的形式進(jìn)行。根據(jù)ISO13239國際標(biāo)準(zhǔn),HDLC報(bào)文幀由起始段、地址段、控制段、信息段、校驗(yàn)段、終止段構(gòu)成,其基本幀格式,如表1所示:
表1 HDLC基本幀格式
在HDLC基本幀格式中,起始段和終止段均為0x7E;地址段存放發(fā)送站或接收站的地址;控制段包含對(duì)整個(gè)鏈路的控制信息;信息段存放的則是用戶待發(fā)送的數(shù)據(jù);校驗(yàn)段的內(nèi)容是從地址段到信息段的校驗(yàn)和,根據(jù)實(shí)際需求可選用CRC-8、CRC-16、CRC-32 3種校驗(yàn)方式。從地址段到校驗(yàn)段的比特位均參與透明傳輸,即在數(shù)據(jù)幀收發(fā)過程中,發(fā)送端進(jìn)行 5 連‘1’插‘0’操作,接收端進(jìn)行 5 連‘1’刪‘0’操作。
根據(jù)數(shù)據(jù)幀中控制字段的比特指派不同,可以將HDLC幀分成I幀、S幀和U幀3種類型。I幀主要用于信息的傳輸;S幀負(fù)責(zé)數(shù)據(jù)幀傳輸過程中的流控制;而U幀用于數(shù)據(jù)鏈路的建立和拆除。HDLC幀控制段的比特指派與幀類型的對(duì)應(yīng)關(guān)系,如表2所示:
表2 幀類型與控制段編碼
其中,在數(shù)據(jù)幀收發(fā)過程中,具體可以通過RR幀、RNR幀、REJ幀、SREJ幀4種S幀來實(shí)現(xiàn)流控制,這4種幀的具體功能如下。
RR幀——接收準(zhǔn)備好,準(zhǔn)備接收N(R)幀,前N(R)-1幀已正確接收。
RNR幀——接收未準(zhǔn)備好,暫停接收N(R)幀,前N(R)-1幀已正確接收。
REJ幀——拒絕接收,重新發(fā)送N(R)及其以后各幀,前N(R)-1幀已正確接收。
SREJ幀——選擇拒絕接收,只要求重新發(fā)送第N(R)幀,其它幀均已正確接收。
網(wǎng)絡(luò)接口單元主要由嵌入式CPU模塊、HDLC通信網(wǎng)卡以及電源三大部分組成。其中CPU模塊主要負(fù)責(zé)對(duì)HDLC通信網(wǎng)卡的調(diào)度與數(shù)據(jù)收發(fā)控制;HDLC通信網(wǎng)卡負(fù)責(zé)HDLC幀的封裝和解析,以及對(duì)整個(gè)數(shù)據(jù)鏈路的控制;電源模塊用于對(duì)CPU模塊和HDLC通信網(wǎng)卡供電。網(wǎng)絡(luò)接口單元內(nèi)部的CPU模塊與HDLC通信網(wǎng)卡之間基于CPCI總線進(jìn)行連接,該網(wǎng)絡(luò)接口單元采用RS485通信接口與其它單元進(jìn)行通信,具體硬件總體結(jié)構(gòu),如圖2所示:
圖2 網(wǎng)絡(luò)接口單元硬件框圖
本通信網(wǎng)卡主要基于協(xié)議控制器SAB82532進(jìn)行設(shè)計(jì)。SAB82532是西門子公司開發(fā)的一款增強(qiáng)型高級(jí)多協(xié)議串行通信控制器(ESCC),它能夠?qū)崿F(xiàn)高級(jí)鏈路控制協(xié)議的同步或異步串行通信,最高傳輸速率可達(dá)到10Mbit/s[7]。
在本文設(shè)計(jì)的HDLC通信網(wǎng)卡中,協(xié)議控制器SAB82532向上通過CPCI總線與嵌入式主控CPU相連,向下通過RS485總線收發(fā)器與其他網(wǎng)絡(luò)接口單元的HDLC網(wǎng)卡進(jìn)行通信,相應(yīng)網(wǎng)卡的硬件框圖,如圖3所示:
圖3 HDLC網(wǎng)卡硬件框圖
本網(wǎng)卡硬件設(shè)計(jì)中主控CPU采用存儲(chǔ)器映射方式對(duì)外圍器件進(jìn)行尋址。系統(tǒng)中CPU通過CPCI總線為SAB82532分配的地址空間為0x83002000~0x830021FF,并采用譯碼器進(jìn)行地址選擇。SDRAM選用MT48LC2M32B2-7,它是一款具有2M*32bit存儲(chǔ)容量的隨機(jī)存儲(chǔ)器,最高工作頻率可達(dá)143MHz,能夠滿足系統(tǒng)對(duì)存儲(chǔ)深度和存儲(chǔ)速度的要求。RS485總線收發(fā)器采用MAX485,網(wǎng)絡(luò)節(jié)點(diǎn)之間的通信采用半雙工方式,通過協(xié)議控制器的/RTS信號(hào)來控制RS485收發(fā)器的數(shù)據(jù)接收和發(fā)送。由于SAB82532是雙通道,故每個(gè)接口單元都連接兩個(gè)MAX485芯片。
在上述硬件設(shè)計(jì)的基礎(chǔ)上,本網(wǎng)絡(luò)接口單元的軟件主要從HDLC通信網(wǎng)卡板級(jí)通道驅(qū)動(dòng)軟件和應(yīng)用層通信軟件兩方面進(jìn)行設(shè)計(jì)。
3.1.1 SAB82532初始化設(shè)置
SAB82532協(xié)議控制器支持HDLC、ASYNC、BISYNC 3種通信協(xié)議,該器件還擁有兩個(gè)獨(dú)立的通道,每個(gè)通道在HDLC通信協(xié)議下都有4種不同的工作模式,通過配置寄存器參數(shù)可以實(shí)現(xiàn)通信協(xié)議和工作模式的選擇,并且還可以設(shè)定通信波特率、CRC校驗(yàn)方式、地址字段大小等參數(shù)。其中,SAB82532在HDLC協(xié)議下的4種工作模式分別為:
(1)自動(dòng)模式:自動(dòng)識(shí)別地址字段,地址字段為8位或16位,窗口尺寸為1,報(bào)文長(zhǎng)度不限,能夠自動(dòng)處理S幀和I幀。
(2)非自動(dòng)模式:自動(dòng)識(shí)別地址字段,地址字段為8位或16位,窗口尺寸不限。
(3)透明模式:自動(dòng)識(shí)別地址字段,地址字段為8位或16位。
(4)擴(kuò)展的透明模式:全透明傳輸,F(xiàn)LAG、CRC、Info字段以及位填充可以自己定義,靈活性大。
表3為HDLC通信采用透明模式進(jìn)行信息輸時(shí)協(xié)議控制器相關(guān)寄存器參數(shù)配置情況,如表3所示:
表3 SAB82532寄存器參數(shù)配置
其中,SAB82532的波特率設(shè)置有標(biāo)準(zhǔn)型和增強(qiáng)型,標(biāo)準(zhǔn)型中N=(BR9~BR0)D,XTAL時(shí)鐘分頻因數(shù)為k=(N+1)*2,分 頻 范 圍 為 2~2048; 增 強(qiáng) 型 中 N=(BR5~BR0)D,M=(BR9~BR6)D,XTAL時(shí)鐘分頻因數(shù)為k=(N+1)*2^M,分頻范圍為1~2097152。本文為了達(dá)到高速通信的目的,采用20MHz晶振,工作在標(biāo)準(zhǔn)波特率生成方式下,因此通信速率范圍為10Kbit/s~10Mbit/s,用戶可以通過人機(jī)界面靈活設(shè)定。
另外,HDLC網(wǎng)絡(luò)工作在NRM時(shí),通信節(jié)點(diǎn)地址的設(shè)置如下:本節(jié)點(diǎn)地址應(yīng)寫在RAL1和RAL2寄存器中,并且RAL1=RAL2;主站發(fā)送幀的目標(biāo)地址根據(jù)命令幀和響應(yīng)幀不同分別寫在XAD1和XAD2中;從站發(fā)送響應(yīng)幀的目標(biāo)地址只能是主站,故從站XAD1=主站RAL1=主站RAL2;從站無需發(fā)送命令幀,故從站的XAD1無需設(shè)定。
3.1.2 HDLC通道數(shù)據(jù)收發(fā)軟件設(shè)計(jì)
SAB82532協(xié)議控制器在通信過程中均通過發(fā)送緩存器XFIFO和接收緩存器RFIFO分別進(jìn)行數(shù)據(jù)幀的發(fā)送和接收,其每個(gè)通道的數(shù)據(jù)發(fā)送和接收流程分別,如圖4、圖5所示:
圖4 HDLC數(shù)據(jù)發(fā)送流程
圖5 HDLC數(shù)據(jù)接收流程4.2網(wǎng)絡(luò)接口單元通信軟件的設(shè)計(jì)與實(shí)現(xiàn)
由圖4、圖5可知,當(dāng)發(fā)送HDLC數(shù)據(jù)幀時(shí),首先需要讀入超時(shí)定時(shí)器t1的時(shí)間間隔和超時(shí)重傳次數(shù)n1,并使能發(fā)送寄存器XFIFO,而后產(chǎn)生一個(gè)中斷,并判斷上次啟動(dòng)的定時(shí)器是否超時(shí),若超時(shí)則重傳,直至超過重傳次數(shù)n1;而接收HDLC數(shù)據(jù)幀時(shí),首先需使能接收寄存器RFIFO,而后讀出RFIFO中的數(shù)據(jù)幀,判斷該幀格式和幀編號(hào)是否錯(cuò)誤,若錯(cuò)誤則丟棄,否則將該幀中信息解析后上交,并清空RFIFO寄存器。
網(wǎng)絡(luò)接口單元應(yīng)用層的通信軟件基于VC++開發(fā)平臺(tái)進(jìn)行設(shè)計(jì)。通過調(diào)用Windows系統(tǒng)底層提供的一些API函數(shù)以及HDLC通信網(wǎng)卡所提供的板級(jí)驅(qū)動(dòng)函數(shù),用戶可以很方便地設(shè)計(jì)友好的人機(jī)界面實(shí)現(xiàn)通信節(jié)點(diǎn)的參數(shù)配置和數(shù)據(jù)的收發(fā)功能。一般地,網(wǎng)絡(luò)接口單元應(yīng)用層的數(shù)據(jù)通信軟件流程,如圖6所示:
圖6 網(wǎng)絡(luò)接口單元通信流程
3.2.1 基本API函數(shù)設(shè)計(jì)
由圖6可知,網(wǎng)絡(luò)接口單元在上電后需對(duì)協(xié)議控制器進(jìn)行各個(gè)寄存器的復(fù)位、通道檢測(cè)以及寄存器相應(yīng)參數(shù)的配置工作。為了使用戶能在應(yīng)用層對(duì)多達(dá)幾十個(gè)寄存器直接進(jìn)行訪問操作,而屏蔽掉每個(gè)寄存器底層不同硬件地址的差異,本軟件中采用DeviceIoControl()函數(shù)實(shí)現(xiàn)對(duì)各個(gè)寄存器的直接訪問,該函數(shù)的原型如下:
其中,設(shè)備句柄用來標(biāo)識(shí)所訪問的設(shè)備,通過設(shè)置不同的控制碼,可以調(diào)用設(shè)備驅(qū)動(dòng)程序的不同類型的功能。本函數(shù)設(shè)定的參數(shù)以結(jié)構(gòu)體的形式放在輸入緩沖區(qū)中,該結(jié)構(gòu)體將SAB82532用到的32個(gè)寄存器定義為無符號(hào)整型。
類似地,為了便于在應(yīng)用層對(duì)協(xié)議控制器的XFIFO和RFIFO進(jìn)行直接訪問從而實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收功能,軟件中采用WriteFile()函數(shù)來實(shí)現(xiàn)將待發(fā)數(shù)據(jù)寫入SAB82532的XFIFO寄存器,并由協(xié)議控制器負(fù)責(zé)將數(shù)據(jù)封裝成幀發(fā)送出去,其中XFIFO大小為32字節(jié)。同理,數(shù)據(jù)接收功能則采用ReadFile()函數(shù)予以實(shí)現(xiàn),具體實(shí)現(xiàn)時(shí),采用單獨(dú)的讀線程實(shí)時(shí)檢測(cè)RFIFO的狀態(tài),當(dāng)RFIFO非空時(shí)就讀取其中的數(shù)據(jù),RFIFO寄存器的大小也為32字節(jié)。WirteFile()函數(shù)和ReadFile()函數(shù)的原型分別如下:
為了方便用戶進(jìn)行通信過程軟件的二次編程開發(fā),本設(shè)計(jì)在原API函數(shù)基礎(chǔ)上封裝設(shè)計(jì)了一些常用的輸入輸出函數(shù)分別如下:
int OpenPort(int PortNumber); //端口打開函數(shù),PortNumber取值為0或1,端口打開成功返回1,失敗返回0,PortNumber設(shè)置錯(cuò)誤時(shí)返回-1。
int ClosePort(int PortNumber); //端口打開函數(shù),PortNumber取值為0或1,端口關(guān)閉成功返回1,失敗返回0,PortNumber設(shè)置錯(cuò)誤時(shí)返回-1。
BOOL InitSet(int PortNumber, int BaudRate, int CheckSum,BYTE LocalAddress);//板卡初始化函數(shù),初始化成功返回TRUE,失敗返回FALSE。
BOOL TransmitData(int PortNumber,Byte TargetAddress,CString Data);//發(fā)送數(shù)據(jù)函數(shù),TargetAddress為發(fā)送數(shù)據(jù)的目標(biāo)節(jié)點(diǎn)地址,大小為一個(gè)字節(jié),Data為所要發(fā)送的字符串?dāng)?shù)據(jù),大小不限。數(shù)據(jù)發(fā)送成功返回TRUE,失敗返回FALSE。
根據(jù)上述封裝設(shè)計(jì)后的函數(shù),用戶可以很方便地對(duì)HDLC網(wǎng)絡(luò)接口單元應(yīng)用層的通信軟件進(jìn)行設(shè)計(jì)。基于上述函數(shù)設(shè)計(jì)并實(shí)現(xiàn)的HDLC通信測(cè)試軟件運(yùn)行截圖,實(shí)際通信測(cè)試表明上述驅(qū)動(dòng)API函數(shù)的設(shè)計(jì)和封裝是可行的,如圖7所示:
圖7 通信測(cè)試軟件運(yùn)行截圖
基于上述原理設(shè)計(jì)并完成的列車通信網(wǎng)絡(luò)接口單元,實(shí)現(xiàn)了HDLC協(xié)議所規(guī)定的基本通信功能。通過實(shí)驗(yàn)室環(huán)境下通信性能的長(zhǎng)期運(yùn)行和測(cè)試,表明該通信接口單元在各方面的性能均達(dá)到了預(yù)期的目標(biāo),這為下一步真正應(yīng)用到實(shí)際列車通信網(wǎng)絡(luò)打下了基礎(chǔ)。
[1]葉星星.地鐵列車診斷系統(tǒng)中央控制單元的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2011.
[2]應(yīng)三從,張行.基于FPGA的HDLC協(xié)議控制器[J].四川大學(xué)學(xué)報(bào),2008,40(3):116-120.
[3]陳金華.基于HDLC協(xié)議的RS485通信設(shè)備的研制[J].測(cè)控技術(shù),2010,29(6):98-101.
[4]鄧鳳軍,張龍,王益忠.基于PCI總線的HDLC通信卡的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(8):30-32.
[5]羅文翰,張劍鋒.基于MPC860的HDLC通道驅(qū)動(dòng)程序的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2005,31(5):66-68.
[6]ISO/IEC 13239.Information technology-Telecommu nications and information exchange between systems-High- level data link control (HDLC)procedures[S]. Switzerland International Electro-technical Commission,2002.
[7]SAB82532 User’s Manual . Enhanced Serial Communication Controller[Z].Germany:Siemens,2007.