基于STR71X的高級數(shù)據(jù)鏈路控制規(guī)程設(shè)計
高級數(shù)據(jù)鏈路控制(HDLC,High-level Data LinkControl)規(guī)程是由同際標(biāo)準(zhǔn)化組織開發(fā),面向比特同步的數(shù)據(jù)鏈路層協(xié)議。
隨著ARM處理器市場的成熟,ARM處理器上的高級數(shù)據(jù)鏈路控制器外設(shè),幾乎涵蓋了HDLC規(guī)程常用的大部分子集。隨著處理能力的提高,在ARM的底層對HDLC通信過程進行控制,具有成本低、靈活性好、便于擴展為操作系統(tǒng)上的應(yīng)用程序等優(yōu)點。
1 STR71X系列的數(shù)據(jù)鏈路控制器
1.1 STR71X的芯片介紹
STR71X系列足基于16/32位ARM7TDMI內(nèi)核的微控制器。該系列中的所有器件都包含片上高速單電壓Flash存儲器和高速RAM存儲器。除了HDLC同步通信接口外,還提供了I2C、UART、BSPI、USB2.0、CAN接口等,極大地豐富了該系列在通信、網(wǎng)絡(luò)等方面的控制能力。
1.2 STR71X的HDLC模塊介紹
STR71X系列上的高級數(shù)據(jù)鏈路控制器支持全雙工操作,能夠自動完成標(biāo)志的設(shè)置、零位的檢測、校驗序列(FCS,F(xiàn)rame Check Sequence)的產(chǎn)生和校驗;32位可屏蔽地址區(qū)域識別,3種可供選擇的時鐘,支持NRZ、NRZI、FM0或MANCHESTER數(shù)據(jù)編碼模式,支持時鐘恢復(fù)的數(shù)字鎖相環(huán)(DPLL);內(nèi)部含1個8位波特率生成器,2個128字節(jié)RAM緩沖器。實際應(yīng)用中,fm0數(shù)據(jù)編碼模式下,可以實現(xiàn)250 kb/s的數(shù)據(jù)收發(fā)。
1.3 STR71X系列采用的HDLC幀的格式
STR71X的HDLC模塊中數(shù)據(jù)是以幀為單位發(fā)送的。STR71X系列采用的HDLC的幀格式如下:
前(后)同步碼:在發(fā)送器使能,且HDLC_TCTL中的前同步碼發(fā)送使能開啟的情況下,當(dāng)把要傳送的數(shù)據(jù)的字節(jié)數(shù)寫入寄存器時,HDLC模塊就開始發(fā)送0~16位的前同步碼。
標(biāo)志序列:采用“0111 1110”為標(biāo)忐序列,所有的幀必須以“0111 1110”標(biāo)志開始和結(jié)束。標(biāo)志的檢測和插入由HDLC模塊自動完成。在傳送的數(shù)據(jù)中,“0”后面跟隨連續(xù)的6個“1”再跟一個“0”,就會被模塊識別為標(biāo)志。一個標(biāo)志可以同時作為一個幀的開始標(biāo)志和下一個幀的結(jié)束標(biāo)志。
地址序列:STR71X有8組地址寄存器,通過設(shè)置可以實現(xiàn)32位可屏蔽私有地址域的識別,或者4字節(jié)的可屏蔽組地址域的識別(后者用于廣播傳送模式)。
信息序列:需要傳送的數(shù)據(jù)或者字符。
校驗序列:FCS域?qū)?biāo)志位和插入的“0”以外的數(shù)據(jù),進行循環(huán)冗余校驗,采用CCITT(g(x)=16+X12+X5+1)對地址域,字節(jié)數(shù)據(jù)和FCS域數(shù)據(jù)生成CRC編碼。接收方根據(jù)該編碼進行檢錯,但不糾錯。如果報錯,將丟棄該幀。
零插入:為了保證標(biāo)志碼“0111 1110”不在幀的內(nèi)部出現(xiàn),STR71X采用硬件自動實現(xiàn)“零插入”。該法在發(fā)送端監(jiān)視除標(biāo)志碼以外的所有字段,當(dāng)發(fā)現(xiàn)有連續(xù)5個“1”出現(xiàn)時,便在其后添加一個“0”;在接收端,連續(xù)的5個“1”后面的“0”自動被刪除。
幀間時間填充:可以選擇為發(fā)送標(biāo)志,或者發(fā)送空閑狀態(tài)。
2 STR71X系列中HDLC模塊配置
HDLC模塊發(fā)送和接收可以有3種時鐘配置:PLL2輸出,PCLK1和DPLL。時鐘配置框圖如圖1所示。
HDLC控制器可以處理NRZ、NRZI、FM0、MAN-CHESTER編碼。編解碼方式可以獨立選擇,分別由HDLC_TCTL和HDLC_RCTL控制。使用PLL2為時鐘源時,HDLC模塊只能運行在NRZ和NRZI模式。
3 STR71X系列中HDLC模塊編程
3.1 開啟外設(shè)寄存器的訪問及配置編譯環(huán)境
根據(jù)使用到的外設(shè),編輯71x_conf.h文件,設(shè)定為:#define_HDLC,#define_GPIO,#define_TIM。去掉DEBUG注釋屏蔽標(biāo)記,允許在監(jiān)視窗口查看外設(shè)寄存器。
將STR71X系列的集成軟件函數(shù)庫添加到編譯環(huán)境下,并且按照STR71X的使用說明配置編譯環(huán)境。
3.2 發(fā)送接收環(huán)境的設(shè)置
①配置不同的分頻系數(shù),產(chǎn)生適當(dāng)?shù)牟僮黝l率,配置HDLC的時鐘為PLL2的輸出。
3.3 發(fā)送過程和接收過程
利用庫函數(shù)將數(shù)據(jù)寫入緩沖區(qū),當(dāng)TEN置位時,寫入需要傳送的數(shù)據(jù)字節(jié)數(shù)。按如下方法配置好中斷函數(shù),就可以實現(xiàn)中斷模式的傳送。
3.4 測試過程
編寫串口程序,將接收到的數(shù)據(jù)用超級終端顯示出來。利用串口將實驗板數(shù)據(jù)傳送到PC機,在Windows界面下,用系統(tǒng)自帶的超級終端檢驗數(shù)據(jù)傳輸?shù)恼_性。
結(jié) 語
HDLC規(guī)程透明傳輸、可靠性高,對于不同的使用需求有很好的靈活性。在沒有操作系統(tǒng)的模式下,利用ST公司的硬件模塊實現(xiàn)HDLC協(xié)議的傳輸,不僅可以減少不必要的開銷,而且增強了對硬件直接應(yīng)用的靈活性。