周 琳, 沈劍滄, 鮑培明
(①安徽財貿職業(yè)學院 計算機科學系,安徽 合肥 230619;②固體微結構物理國家重點實驗室,南京大學 物理學系,江蘇 南京 210093;③南京師范大學 計算機科學系,江蘇 南京 210097)
數(shù)據(jù)在傳輸過程中,需要遵循一定的數(shù)據(jù)鏈路控制協(xié)議。目前數(shù)據(jù)通信中使用的數(shù)據(jù)鏈路控制協(xié)議主要有面向字符的數(shù)據(jù)鏈路層協(xié)議 BSC協(xié)議和面向位的數(shù)據(jù)鏈路層協(xié)議HDLC協(xié)議。相比較而言,面向位的數(shù)據(jù)鏈路層協(xié)議HDLC協(xié)議具有鮮明的優(yōu)點:
① 使用統(tǒng)一的幀格式,實現(xiàn)數(shù)據(jù)、命令和響應的傳輸,實施起來方便;
② 采用零位插入法,使規(guī)程可以支持任意的位流傳輸,保證了信息傳輸?shù)耐该餍裕?/p>
③ 采用窗口機制和捎帶應答,支持全雙工工作方式,允許在未收到確認情況下,連續(xù)發(fā)送多個幀,提高信息傳輸?shù)男剩?/p>
④ 采用幀校驗序列,并設置窗口序號,提高信息傳輸?shù)恼_性和可靠性[1]。
HDLC協(xié)議克服了BSC協(xié)議半雙工、低速率、處理復雜,傳輸數(shù)據(jù)必須采用?!确绞?,有字符校驗能力而無塊校驗能力等若干弱點。因此,在微機查號系統(tǒng)的設計中,采用HDLC協(xié)議來確保數(shù)據(jù)信息在微機查號排隊設備和話務員坐席臺之間正確高效地交換。
HDLC協(xié)議的實現(xiàn)方式有軟件實現(xiàn)或專用硬件芯片實現(xiàn)兩種。目前常用的硬件芯片有Motorola公司的MC92460、ST公司的MK5025、Zarlink公司的MT8952B等。由于采用硬件可達到快速封裝和解析,提高設備工作效率的目的,本文提出了在微機查號系統(tǒng)中采用 Zarlink公司的處理芯片MT8952B,以實現(xiàn)可靠的數(shù)據(jù)傳輸?shù)脑O計方案。
微機查號系統(tǒng)即通信特服114,如圖1所示。
圖1 微機查號系統(tǒng)
在用戶撥打114時,用戶的呼入信號經過程控交換機進入微機查號設備進行排隊,當話務員坐席空閑時,排隊器將用戶的呼入信號與坐席接通,話務員通過操作坐席計算機完成查號工作并送出自動語音進行報號。
HDLC協(xié)議芯片MT8952B是從屬于語音卡上的芯片,語音卡在微機查號系統(tǒng)中主要應用于坐席工作臺和114排隊器設備的坐席接口板之間信息的傳遞、坐席接口板和線路接口板之間信息交換等。坐席工作臺與設備之間通信采用雙絞線電纜連接方式,傳送2B+D信號,其中D信道的信號信息格式為HDLC協(xié)議格式。語音卡結構框圖如圖2所示。
圖2 語音卡結構
在坐席計算機送出自動語音報號信息時,單片機將從坐席計算機接收到的數(shù)字狀態(tài)信息和從存儲芯片中讀出的數(shù)字報號語音信息送到MT8952B HDLC協(xié)議控制器中,MT8952B HDLC協(xié)議控制器對數(shù)據(jù)打包并增加幀校驗序列,變成具有HDLC協(xié)議功能的串行ST.BUS格式數(shù)據(jù),然后送入114排隊器中,由114排隊器中的數(shù)字網(wǎng)絡接口芯片MT8981對其進行數(shù)據(jù)格式轉換,轉換成適合在線路上傳輸?shù)拇a流,并在線路上進行傳輸,而接收數(shù)據(jù)過程與發(fā)送數(shù)據(jù)過程正好相反。
MT8952BHDLC協(xié)議芯片從硬件結構上主要分三大塊:控制模塊、發(fā)送模塊、接收模塊。
控制模塊可接受外部的控制,主要完成復位芯片及初始化、地址譯碼、公共寄存器的控制、設置時鐘及時序方式等功能。
發(fā)送模塊由發(fā)送FIFO(First In First Out高速緩存)和協(xié)議封裝兩個子模塊組成,可完成發(fā)送控制、封裝數(shù)據(jù)協(xié)議以及對數(shù)據(jù)進行并串轉換等功能,其中,協(xié)議封裝主要包括封裝數(shù)據(jù)包頭和包尾、計算數(shù)據(jù)包的 CRC校驗核及對整個數(shù)據(jù)流進行零插入處理等幾個步驟。
接收模塊由接收FIFO和協(xié)議解析兩個子模塊組成??赏瓿山邮湛刂?、解析數(shù)據(jù)協(xié)議以及對收到的數(shù)據(jù)進行串并轉換等功能,其中,協(xié)議解析通過去掉插入的零字位、對數(shù)據(jù)包進行CRC校驗以及剝掉數(shù)據(jù)包的包頭和包尾等幾個步驟,最終還原出封裝前的數(shù)據(jù)。
在微機查號系統(tǒng)中MT8952B芯片初始化操作包括5個步驟:
① 芯片初始加電,操作控制寄存器中的RST字位 ,復位整個芯片;
② 設置時鐘寄存器中的時鐘方式字位,選擇芯片工作在外部時鐘還是內部時鐘方式,一般采用外部時鐘方式。即芯片收、發(fā)數(shù)據(jù)時使用芯片外接時鐘管腿上所輸入的時鐘;
③ 為了便于觀察,可設置控制寄存器中空閑狀態(tài)字位,使芯片的發(fā)送管腿在空閑時發(fā)出7E(01111110)信號;
④ 設置控制寄存器中收、發(fā)使能字位,激活接收、發(fā)送模塊;
⑤ 選擇需要使用的中斷,并將其在中斷控制寄存器中所對應的字位設置為有效。保證芯片能正常收發(fā),至少需要使用的中斷有:
Tx m/n FULL :n為發(fā)送FIFO容量,in為發(fā)送FIFO中待發(fā)的字節(jié)數(shù):
Tx DONE:一整包數(shù)據(jù)發(fā)送完畢 ;
Rx n/m FULL :n為接收FIFO容量,nl為接收FIFO中已接收的字節(jié)數(shù);
其中,實現(xiàn)步驟①、②的代碼如下:
在微機查號系統(tǒng)中MT8952B芯片實現(xiàn)數(shù)據(jù)的發(fā)送過程控制分為3種情況:
① 當需要發(fā)送的數(shù)據(jù)不足n個字節(jié)(n為發(fā)送FIFO容量)時,則把除最后一個字節(jié)外的所有的數(shù)據(jù)寫入發(fā)送 FIFO,然后設置控制寄存器中的EOP(End Of Packet)字位,標識下一個將要寫入的字節(jié)是本包數(shù)據(jù)的最后一個字節(jié),最后將最后一個字節(jié)寫入到發(fā)送FIFO,發(fā)送操作完畢[2];
② 當需要發(fā)送的數(shù)據(jù)大于n個字節(jié)(n為發(fā)送FIFO容量 )時 ,則多次把前n個字節(jié)寫入到發(fā)送FIFO中,當待發(fā)送數(shù)據(jù)少于或等于n~m個字節(jié)時,在最后一次中斷響應程序中,進行如同步驟①的操作;也可以采用中斷方式,第一次把前 n個字節(jié)寫入到發(fā)送 FIFO中然后等待 “Tx m/n FULL”中斷的產生,在中斷響應程序中把接下來數(shù)據(jù)中的n—n1個字節(jié)寫入發(fā)送FIFO;在最后一次中斷響應程序中,進行如同步驟①的操作[2];
③ 結束一包數(shù)據(jù)的發(fā)送后,直到“Ix DONE”中斷產生并響應,才可以啟動下一包數(shù)據(jù)的發(fā)送。
對于MT8952B芯片來說,n為19。
在微機查號系統(tǒng)中數(shù)據(jù)發(fā)送控制的具體實現(xiàn)細節(jié)如下。
(1)坐席狀態(tài)信息發(fā)送
坐席狀態(tài)信息量小于等于FIFO容量,即小于19字節(jié),因此,直接將要發(fā)送的坐席狀態(tài)信息寫入數(shù)據(jù)發(fā)送寄存器即可。發(fā)數(shù)據(jù)包子程序如下,其中FAST是變量,用于存放坐席狀態(tài)信息,其特點是信息比較少,少于FIFO允許的最大信息19字節(jié)。
(2)數(shù)字化報號語音發(fā)送
數(shù)字化報號語音數(shù)據(jù)量可能較大,因此是一種長信息的發(fā)送。當語音數(shù)據(jù)量大于FIFO容量時通過循環(huán)字控制數(shù)據(jù)進行多次發(fā)送即可。實現(xiàn)代碼如下:
(3)最后一個字節(jié)的發(fā)送處理
最后一個字節(jié)的發(fā)送處理方式,即將控制寄存器的 D0位寫入高電平,通知 CPU下一個要發(fā)送的數(shù)據(jù)是最后一個字節(jié),再進行數(shù)據(jù)的發(fā)送。程序如下:
當接收模塊接收到數(shù)據(jù)時,視情況不同會產生不同中斷。接收數(shù)據(jù)控制分為3種情況:
① 當接收到的數(shù)據(jù)包長小于n個字節(jié)(n為接收FIFO容量)時,會產生“Rx DONE”中斷,此時在中斷響應程序中讀取接收FIFO中的數(shù)據(jù),同時通過讀FIFO控制寄存器中的接收狀態(tài)位,判斷下一個字節(jié)是否為最后一個字節(jié),如果不是,繼續(xù)從接收FIFO中讀出數(shù)據(jù);如果是,則同樣通過讀FIFO控制寄存器中的接收狀態(tài)位來檢查對此包數(shù)據(jù)的CRC校驗是否正確,如 CRC校驗正確,則讀入最后一個字節(jié),完成一包有效數(shù)據(jù)的接收;反之,則丟棄該包數(shù)據(jù);
② 當接收到的數(shù)據(jù)包長大于n個字節(jié)(n為接收FIFO容量)時,會產生“Rx m/n FULL”中斷,此時在中斷響應程序中讀出m一1個字節(jié)(接收FIFO在接收數(shù)據(jù)過程中不能為空,至少保證有1個字節(jié)存在),等待下一個“Rx m/n FULL”中斷。如果接收FIFO中已接收到最后一個字節(jié)后,接收模塊會產生“Rx DONE”中斷,中斷響應操作如同上面所述[2];
③ 如果在接收過程中接收模塊產生“Rx ABORT”中斷,則意味著正在接收的一包數(shù)據(jù)為無效,丟棄已收到的字節(jié)[2]。
例如,微機查號系統(tǒng)中接收坐席狀態(tài)程序框圖如圖 3所示。
圖3 接收坐席狀態(tài)程序
程序從MT8952B的FIFO狀態(tài)寄存器中讀取狀態(tài)信息,判斷接受數(shù)據(jù)為數(shù)據(jù)包的哪個部分:數(shù)據(jù)包頭、數(shù)據(jù)包中或數(shù)據(jù)包尾。具體數(shù)據(jù)則是從FIFO數(shù)據(jù)接受寄存器中讀出的。程序設置標志位 RNPT在接收到數(shù)據(jù)尾時判斷在此之前是否正確接收過數(shù)據(jù)包頭,如果是,表明數(shù)據(jù)接收正確,取數(shù)據(jù),如果不是則放棄,轉出錯處理程序。程序設置CX為20,控制循環(huán)次數(shù)大于19,確保19字節(jié)數(shù)據(jù)可以正確讀出。
微機查號系統(tǒng)使用語音卡實現(xiàn)做細計算機和114排隊器設備之間信息及語音的傳送。語音卡采用MT8952B協(xié)議芯片,以硬件的形式進行幀格式實現(xiàn)與解析,即將要發(fā)送的數(shù)據(jù)封裝成 HDLC協(xié)議幀格式并以數(shù)據(jù)包的形式送出;將接收的具有協(xié)議幀格式的數(shù)據(jù)包進行解析,從中提取出有效數(shù)據(jù),傳送給座席計算機,完成信息的雙向傳輸與交換[3]。采用該芯片實現(xiàn)的查號系統(tǒng)的信息交換,可以將問候語與報號信息都以數(shù)據(jù)包形式自動報出,有效地減輕了話務員的工作量,提高效率。如果采用兩片MT8952B芯片,結合軟件編程,還可以實現(xiàn)兩路交叉工作,一路處于話務員應答狀態(tài)時,另一路可以向另一個用戶報號,更有效地提高接入率,處理率。采用硬件芯片形式實現(xiàn)與采用軟件實現(xiàn)形式相比,更加簡潔高效[4]。設備已經被很多電信公司采用,實踐證明它是一種行之有效和穩(wěn)定的技術。
[1] 付新虎,史浩,鄭喜鳳,丁鐵夫. HDLC協(xié)議在通信系統(tǒng)中的應用[J].電子技術, 2005(08):58-60.
[2] 韓露. 專用 HDLC協(xié)議芯片的應用[J].移動通信,2003(增刊):231-232.
[3] 談國文,張煒,朱丹,等.基于 HDLC協(xié)議的實時通信軟件的設計與實現(xiàn)[J].計算機工程與科學, 2000,22(04):87-90.
[4] 文冠果,陳家錦,梁松海,等.一種新型的 128路多通道 HDLC引擎設計[J].微電子學與計算機,2004,21(09):173-176.