基于NiosII軟核的HDLC通信協(xié)議的實(shí)現
一 引言
本文引用地址:http://dyxdggzs.com/article/201706/349086.htmHDLC(High-level Data Link Control)協(xié)議是通信領(lǐng)域中應用最廣泛的協(xié)議之一,是面向比特的高級數據鏈路控制規程,具有強大的差錯檢測功能和同步傳輸特點(diǎn),保證數據的可靠傳輸[3]。市場(chǎng)上很多專(zhuān)用的HDLC芯片因追求功能的完備,而使芯片的控制變得復雜。實(shí)際上對某些特殊的場(chǎng)合,可選擇HDLC協(xié)議中最符合系統要求的部分功能,設計一種功能相對簡(jiǎn)單、使用靈活的控制器。
NiosII系統是Altera公司的SoPC解決方案,它是一個(gè)運行在FPGA上的32位RSIC處理器。Altera公司對于NiosII的開(kāi)發(fā)提供了強大的設計開(kāi)發(fā)平臺QuartusII、SOPC Builder以及NiosII IDE[2] [4]。這樣,硬件電路與外設的連接,NiosII軟核的配置,C語(yǔ)言編寫(xiě)與調試可有機地結合起來(lái),大大提高了系統設計的效率,便于系統的更新與升級。
本設計即是采用Altera公司的CYCLONEII芯片EP2C35-672 FPGA實(shí)現基于NiosII的HDLC協(xié)議控制系統。在完成通信協(xié)議、保證可靠通信的前提下,最終實(shí)現主控機與基站終端之間實(shí)時(shí)、可靠的信息交互與監控管理功能[1]。
二 HDLC協(xié)議說(shuō)明[3]
HDLC協(xié)議具有以下特點(diǎn):數據報文可透明傳輸;全雙工通訊;采用窗口機制和捎帶應答;采用幀校驗序列,并對信息幀進(jìn)行順序編號,防止漏收或重收,傳輸可靠性高;傳輸控制功能和處理功能分離,應用非常靈活。HDLC執行數據傳輸控制功能,一般分為3個(gè)階段:數據鏈路建立階段、信息幀傳送階段、數據鏈路釋放階段。
HDLC協(xié)議以幀為基本信息單位傳輸數據,無(wú)論是傳輸數據信息或是控制信息,每個(gè)幀都采用統一的幀格式,如圖1所示:
圖1 HDLC幀格式
1. 標志字段(F)
HDLC協(xié)議規定,所有信息的傳輸必須以一個(gè)標志字開(kāi)始,且以同一個(gè)標志字結束,這個(gè)標志字就是01111110。接收方可以通過(guò)搜索01111110來(lái)判斷幀的開(kāi)始和結束,以此建立幀同步。
2. 地址字段(A)
地址字段表示鏈路上站的地址。地址字段為8位,也可用8的倍數進(jìn)行擴展,用于標識接收該幀的站地址。
3. 控制字段(C)
控制字段為8位,用來(lái)表示幀類(lèi)型、幀編號以及命令、響應等。由圖1知,由于C字段的構成不同,可以把HDLC幀分為三種類(lèi)型:信息(I)幀、監控(S)幀、無(wú)編號(U)幀。在控制字段中,第1位是“0”的為I幀,第1、2位是“10”的為S幀,第1、2位是“11”的為U幀。
4. 信息字段(I)
信息字段內包含了用戶(hù)的數據信息和來(lái)自上層的各種控制信息。在I幀和某些U幀中,具有該字段。HDLC幀的信息長(cháng)度是可變的,其長(cháng)度由收發(fā)站緩沖器的大小和線(xiàn)路的差錯情況決定,但必須是8bit的整數倍。它可傳送標志字以外的任意二進(jìn)制信息。
5.幀校驗序列字段(FCS)
幀校驗序列用于對幀進(jìn)行CRC循環(huán)冗余校驗。在HDLC協(xié)議中采用16位循環(huán)冗余校驗碼進(jìn)行差錯控制,其校驗范圍從地址字段的第1比特到信息字段的最后1比特的序列,并且規定為了透明傳輸而插入的“0”不在校驗范圍內。它的生成多項式為g(x)=X16+X12+X5+1。
三 系統簡(jiǎn)介
基站系統往往被安置在比較分散、環(huán)境比較惡劣且無(wú)人值守的地方,因此它運行的可靠性就顯得尤為重要。SOPC的諸多特點(diǎn)滿(mǎn)足了此類(lèi)系統的要求?;诖硕ㄎ?,該系統選用pc機作為監控中心,SOPC片上系統作基站端,它們之間采用HDLC協(xié)議來(lái)實(shí)現可靠通信。監控中心完成建立和斷開(kāi)鏈路的功能,SOPC基站系統除了接收、執行監控中心發(fā)來(lái)的命令外,還要完成現場(chǎng)數據的采集控制,并將數據上傳至監控中心。
對于通信雙方,數據都有發(fā)送與接收兩個(gè)傳輸方向,即上行數據流和下行數據流。發(fā)送數據時(shí),按照HDLC協(xié)議,先將數據封裝成幀,即加上幀頭、地址字段、控制字段、信息字段、CRC校驗段、幀尾,當緩沖區有空間時(shí),將成幀數據送交緩沖區待發(fā)送,數據幀再經(jīng)UART送到對方的RS-232接口,數據進(jìn)入收方的緩沖區,收方則執行與發(fā)送相反的操作,即從緩沖區讀出數據、對其解幀、CRC校驗判斷、解碼,并按照所提取的信息執行相應操作。完整的系統總框圖如圖2所示:
圖2 系統框圖
四 基于NiosII的SOPC功能設計
分為硬件設計與軟件設計,分別在QuartusII、SOPC Builder和NiosII IDE中完成。
1 硬件設計
(1) 硬件設計結構
硬件設計結構包括RS-232接口、PIO接口、顯示模塊和自定義CRC校驗指令,這些部分都是用NiosII軟核來(lái)配置的。NiosII作為系統的流程控制中心,其作用是不言而喻的,通過(guò)采用SOPC Builder對NiosII進(jìn)行定制,極大的減少了系統的使用資源。整個(gè)系統硬件設計框圖如圖3所示:
圖3 NiosII硬件原理圖
?。?)NiosII軟核配置
利用QuartusII軟件中的SOPC Builder,添加處理器、總線(xiàn)、片內ROM、PIO、UART、NiosII其它外設及接口。系統的頂層模塊由NiosII軟核處理器標準版和系統時(shí)鐘組成,系統時(shí)鐘通過(guò)鎖相環(huán)PLL再分配給各外設及SDRAM。
?。?)自定義CRC校驗指令
可編程軟核處理器最大的特點(diǎn)是靈活到可以方便的增加指令,這樣可以把系統中用軟件處理耗時(shí)多的關(guān)鍵算法用硬件邏輯電路來(lái)實(shí)現。自定義指令其實(shí)就是用戶(hù)讓NiosII軟核完成的一個(gè)功能,這個(gè)功能由采用HDL語(yǔ)言描述的電路模塊來(lái)實(shí)現,該模塊被連接到NiosII軟核的算術(shù)邏輯部件上。
CRC校驗的一般算法需要大量的邏輯與循環(huán)運算,如果用軟件來(lái)實(shí)現則要占用很多個(gè)時(shí)鐘周期,使系統的效率降低,而用硬件完成則僅需要幾個(gè)時(shí)鐘周期。NiosII正好提供了用戶(hù)自定義指令的功能,因此給NiosII添加自定義CRC校驗指令來(lái)完成該部分功能,大大提高了系統的效率。
2 NiosII應用軟件設計
NiosII應用軟件用C語(yǔ)言實(shí)現,完成了HDLC協(xié)議和對基站系統的控制兩個(gè)任務(wù)。首先完成HDLC協(xié)議中所要求的解幀校驗處理、數據重新打包轉發(fā)、錯誤處理等操作,確保通訊的暢通與可靠?;径嗽诮邮盏奖O控中心的命令后,在應用軟件的控制下,驅動(dòng)設備執行相應操作,主要是對溫度、濕度、電壓、煙感度等參數的讀取及環(huán)境參數的調整,執行完畢后將結果反饋回監控中心?;诖怂枷?,NiosII軟件分為HDLC協(xié)議實(shí)現部分和命令執行部分。
?。?) 協(xié)議實(shí)現部分
a、接收數據
首先,建立鏈路完成對幀序列、各種外設參量、標志位等變量的初始化。函數void DeFrame( )用于每收到一幀后的解幀處理,即包括幀長(cháng)度的判斷、CRC 校驗、幀類(lèi)型辨認、幀序號的對照。CRC校驗碼的運算由函數ALT_CI_CRC_CCITT( )完成,具體操作是調用配置的自定義CRC校驗指令,賦數據值,然后通過(guò)硬件運算返回計算的CRC碼,再和數據幀中的校驗碼對比,相同則是正確信息,不等則判為錯誤信息。
b、發(fā)送數據
定義變量volatile int edge_capture來(lái)進(jìn)行基站環(huán)境參數信息的捕捉,如溫度、濕度、電壓等。NiosII應用軟件根據對環(huán)境參量的讀取和判斷,還要對異常狀況做特殊處理。比如,如果某參量出現超標則必需立刻發(fā)送信息幀進(jìn)行告警,以使用戶(hù)進(jìn)行及時(shí)的調整。
具體發(fā)送時(shí),數據先裝幀再送入緩沖區等待。為了防止幀丟失造成通訊雙方處于僵滯的等待狀態(tài),引入計時(shí)器,即每發(fā)一次信息幀都要啟動(dòng)計時(shí)器進(jìn)行計時(shí),若計時(shí)器溢出,重發(fā)上一幀并重新計時(shí)。以發(fā)送電壓值為例,對其具體過(guò)程進(jìn)行說(shuō)明:
void InfoVoltageFrame( ); //裝電壓幀
void SendBuf(unsigned char Frame[],int SendDataLen); //幀送緩沖區
void TimeDelay( ); //啟動(dòng)計時(shí)器
若超時(shí),置超時(shí)標志DelayFlag=1;
在此條件下,調用函數ReSendFrame( ); //重發(fā)上一幀
再次啟動(dòng)計時(shí)器TimeDelay( );
c、HDLC協(xié)議中滑動(dòng)窗口的處理
只將滑動(dòng)窗口協(xié)議中最關(guān)鍵的幀序號變化的具體代碼呈現出來(lái):
……
If ((RvByte(2) And HF)/2)=VR Then 'NS與VR作比較,相等則接收并發(fā)送確認幀
VR = ((VR + 1) And H7)
……
If (RvByte(2) And HF) = 1 Then '收到確認S幀
SysTime.Enabled = False
VS = ((VS + 1) And H7)
……
?。?)命令執行軟件部分
這部分軟件主要是驅動(dòng)設備執行相應命令。一方面,監控中心啟動(dòng)自動(dòng)監控功能, NiosII每隔5秒會(huì )接收到監控中心發(fā)來(lái)的讀取參量信息命令,NiosII執行命令并讀取外設參量送至發(fā)送緩存;另一方面,若環(huán)境參量發(fā)生變化,NiosII會(huì )對其進(jìn)行判斷,如果超標則立即主動(dòng)發(fā)告警信息幀給監控中心。
五 結束語(yǔ)
本文提出了一種基于FPGA的HDLC協(xié)議控制系統設計方案,并利用Altera公司的CYCLONEII芯片EP2C35-672來(lái)實(shí)現。實(shí)踐表明,利用NiosII實(shí)現的HDLC協(xié)議控制系統操作簡(jiǎn)單、使用靈活,能夠很好地應用于各種小型通信設備。通過(guò)不同階段大量的測試,系統工作可靠、穩定,完成了實(shí)時(shí)可靠的通訊與準確的控制。
本文作者創(chuàng )新點(diǎn):
1、 技術(shù)手段的創(chuàng )新:使用NiosII這種新型的SOPC技術(shù)實(shí)現了HDLC協(xié)議。
2、 應用領(lǐng)域的創(chuàng )新:實(shí)現了對基站各種信息(如工作電壓、環(huán)境溫度、濕度、煙感度等)的實(shí)時(shí)監控與可靠管理。
評論