基于NiosII傳真通信規(guī)程的分析與設(shè)計(jì)實(shí)現(xiàn)
目前傳真通信的產(chǎn)品開發(fā)主要是基于Conexant等公司的專用傳真芯片,對系統(tǒng)二次開發(fā)。本文從替代傳統(tǒng)專用芯片的角度,提出一種新的基于NiosII傳真系統(tǒng)方案,即軟硬件協(xié)同開發(fā)的流程,分析并設(shè)計(jì)實(shí)現(xiàn)傳真通信。
1 傳真通信規(guī)程分析
1.1 傳真過程描述
T.30建議規(guī)定了通信規(guī)程的適用范圍、所用術(shù)語的解釋、傳真呼叫描述、傳真用的單音信號(hào)方式和二進(jìn)制信號(hào)方式[1]。圖1為傳真階段過程圖。
(1)階段A:呼叫建立,連通傳真通信雙方傳輸線,使傳真機(jī)接入線路。撥號(hào)和應(yīng)答雙方均可由人工或自動(dòng)兩種操作完成。
(2)階段B:報(bào)文前過程,報(bào)文傳輸?shù)臏?zhǔn)備階段,包括性能識(shí)別和選擇條件命令及接收條件確認(rèn)。命令部分包括性能命令、訓(xùn)練、同步及可選的非標(biāo)準(zhǔn)設(shè)備命令、終端識(shí)別命令、查詢(發(fā)送)命令和回聲抑制器解除。
(3)階段C:報(bào)文中過程,由信息傳輸過程和報(bào)文傳輸組成。信息傳輸過程與報(bào)文傳輸同時(shí)進(jìn)行,并控制傳輸信號(hào)完整性,如傳輸同步、差錯(cuò)檢測及糾錯(cuò)和線路管理。若沒有差錯(cuò)檢測和糾錯(cuò)處理,則該階段只傳輸報(bào)文數(shù)據(jù)。
(4)階段D:報(bào)文后過程,傳真雙方在完成傳輸一頁報(bào)文后進(jìn)行該過程。包含消息結(jié)束信號(hào)、確認(rèn)信號(hào)、多頁信號(hào)和傳真結(jié)束過程信號(hào)。如果信息傳輸完畢,則直接進(jìn)入E階段。
(5)階段E:呼叫釋放,可以手動(dòng)或自動(dòng)進(jìn)行。在信息傳輸完畢或上述各階段操作異常時(shí),雙方分別進(jìn)入該階段,將傳真機(jī)與線路脫離。
1.2 傳真二進(jìn)制碼信號(hào)結(jié)構(gòu)
傳真過程用的二進(jìn)制信號(hào),以300 b/s的速率傳送,這是三類機(jī)二進(jìn)制代碼過程數(shù)據(jù)傳輸?shù)臉?biāo)準(zhǔn)速率。二進(jìn)制代碼的傳真控制過程都使用HDLC幀結(jié)構(gòu)。一個(gè)HDLC幀結(jié)構(gòu)由先導(dǎo)序列、標(biāo)志序列、地址字段、控制字段、信息字段、幀校驗(yàn)序列組成。
由于采用的調(diào)制解調(diào)器為TM-EC5658V Data/Voice/Fax Modem,它完成幀校驗(yàn)和幀封裝工作,所以數(shù)字終端設(shè)備DTE與調(diào)制解調(diào)器通信過程中的HDLC幀結(jié)構(gòu)如圖2所示。
(1)地址字段:表示該鏈路上發(fā)送或接收該幀的地址。提供多點(diǎn)連接安排中的指定終端的標(biāo)識(shí)。在傳真通信中,由于公用電話交換網(wǎng)中只進(jìn)行點(diǎn)對點(diǎn)的通信,故限定為單一信號(hào)格式。
(2)控制字段:該字段8 bit數(shù)據(jù),用來提供末幀及非末幀的標(biāo)志。格式為1100 x000,過程中的非末幀,x=0,末幀,x=1,這樣可以區(qū)別末幀和非末幀。末幀是指為期待從對方站發(fā)來響應(yīng)之前所發(fā)送的最后一幀。
(3)HDLC信息字段:T.30建議書中HDLC信息字段被劃分為傳真控制字段和傳真信息字段兩部分。傳真控制字段由8 bit或16 bit構(gòu)成,二進(jìn)制碼表示各種命令或響應(yīng)信號(hào),可以提供28=256種控制信號(hào)。傳真信息字段的作用是進(jìn)一步說明傳真控制字段的內(nèi)容,提供各種標(biāo)識(shí)、選擇、控制參數(shù)等信息。傳真信息字段是以8 bit為一組的數(shù)據(jù)信息來說明傳真過程。
(4)幀校驗(yàn)序列,幀校驗(yàn)序列為16 bit位寬數(shù)據(jù),用于檢測傳輸中可能產(chǎn)生的差錯(cuò)。DTE向Modem發(fā)送幀數(shù)據(jù)時(shí)不需要幀校驗(yàn)序列,Modem完成幀校驗(yàn)。Modem向DTE傳送幀數(shù)據(jù)時(shí),附帶有幀校驗(yàn)數(shù)據(jù)。
1.3 傳真通信流程分析
主叫端主動(dòng)發(fā)出一次傳真呼叫,其既可以發(fā)送也可以接收傳真文件。一般情況下,當(dāng)一方有文件需要發(fā)送時(shí),可作為主叫端發(fā)送傳真文件。在輪詢狀態(tài)下,主叫端檢測被叫端是否有文件需要傳送。當(dāng)主叫端和被叫端均為全自動(dòng)操作時(shí),主叫端先將傳真機(jī)接入電路,檢測到撥號(hào)音后撥號(hào),啟動(dòng)計(jì)時(shí)并向線路發(fā)送主叫單音信號(hào),在設(shè)置本端傳真模式后進(jìn)入階段B。
階段B要完成對通信雙方的標(biāo)識(shí),包括收發(fā)操作的確認(rèn)、兼容性識(shí)別以及傳輸速率的確定。具體過程如下:
(1)被叫端將其性能指標(biāo)(如支持的頁面大小、傳輸速率等)封裝在DIS(Digital Identification Signal)中,通知主叫端發(fā)送。
(2)主叫端根據(jù)被叫端性能指標(biāo)做兼容性判斷。若本地?zé)o文件發(fā)送而對方有文件發(fā)送,則作為接收機(jī)發(fā)送DTC(Digital Transmistion Command)信號(hào);若本地有文件發(fā)送且對方機(jī)器兼容,則發(fā)送DCS(Digital Command Signal)通知接收端本次傳真過程所采用的傳輸參數(shù),并發(fā)送協(xié)商速率下的訓(xùn)練序列。
(3)接收端正確接收到訓(xùn)練后發(fā)送CFR(Confirmation To Receive)信號(hào),否則發(fā)送FTT(Failure To Train)信號(hào),發(fā)送端更新DCS相應(yīng)字段并重發(fā)降速訓(xùn)練序列,直至接收到CFR。
在收發(fā)雙方確定連接所能夠支持的最大速率傳輸速率下傳輸報(bào)文。非糾錯(cuò)模式的報(bào)文在階段C一次性全部傳輸完畢,其報(bào)文后命令有三種,分別為多頁信號(hào)MPS(MultiPage Signal)、傳真過程結(jié)束信號(hào)EOP(End Of Procedure)和報(bào)文結(jié)束信號(hào)EOM(End Of Message)。正確接收報(bào)文后接收端發(fā)送MCF(Message Confirmation)信號(hào)。發(fā)送端收到MCF后,進(jìn)入E階段,并發(fā)送DCN(Disconnect)信號(hào),雙方拆鏈路。
1.4 調(diào)制解調(diào)器通信原理分析
Modem集成標(biāo)準(zhǔn)RS-232接口,通過RS-232接口的TxD和RxD兩條信號(hào)線完成DCE(Data Communication Equipment)和DTE(Data Terminal Equipment)的數(shù)據(jù)交換和控制信號(hào)交換。DTE發(fā)送AT命令到DCE,即Modem。Modem執(zhí)行命令后通過RxD返回結(jié)果給DTE。圖3是Modem通信的示意圖。Modem每執(zhí)行一條AT指令,都要返回當(dāng)前的狀態(tài);傳真過程中向Modem串口發(fā)送AT指令和HDLC幀數(shù)據(jù)。
由于Modem的性能不同,對應(yīng)不同的工作模式,Class 1服務(wù)類別DCE提供為支持G3傳真操作所需要的服務(wù)水平。DTE通過AT指令向Modem傳遞命令和參數(shù)。Modem執(zhí)行AT命令的結(jié)果就是修改Modem寄存器的值,即設(shè)置Modem操作狀態(tài)。通過設(shè)置Modem的服務(wù)類型后,撥號(hào)進(jìn)入傳真流程。
[!--empirenews.page--]2 傳真規(guī)程設(shè)計(jì)實(shí)現(xiàn)
2.1 傳真系統(tǒng)設(shè)計(jì)
系統(tǒng)開發(fā)工具選擇QuartusII和NiosII IDE環(huán)境,結(jié)合SoPC技術(shù),軟硬件協(xié)同設(shè)計(jì)開發(fā)。器件選擇Altera公司的Cyclone系列EPEC20F400C開發(fā)板,使用QuartusII中SoPC Builder對硬件系統(tǒng)進(jìn)行定義,完成硬核開發(fā)的集成過程。根據(jù)設(shè)計(jì)需要對CPU進(jìn)行定制,包括CPU的數(shù)據(jù)和指令緩存的大小、CPU寄存器數(shù)量等[4]。除了NiosII之外,還需要將外圍設(shè)備的IP添加進(jìn)來。本設(shè)計(jì)就是將在前面提到的各種NiosII自帶的各種IP核(UART控制器、定時(shí)器等)添加進(jìn)來,其余自定義的邏輯器件接口同CPU的連接只需在SoPC Builder中將對應(yīng)的接口模塊添加進(jìn)來即可。
NiosII核與調(diào)制解調(diào)器通信是通過UART控制器實(shí)現(xiàn)的。原來的UART直接選用Altera公司提供的標(biāo)準(zhǔn)UART組件,通信時(shí)通過寄存器單字節(jié)收發(fā),每個(gè)字節(jié)都會(huì)有中斷觸發(fā)。為了方便軟件編程,Altera提供硬件抽象層HAL(Hardware Abstract Level)系統(tǒng)庫驅(qū)動(dòng)程序,該驅(qū)動(dòng)程序是一個(gè)集成到HAL系統(tǒng)中的HAL字符模式設(shè)備驅(qū)動(dòng)程序,代替訪問UART寄存器,編程者直接使用HAL的API和ANSI C標(biāo)準(zhǔn)庫函數(shù)訪問UART。此時(shí),UART相當(dāng)于字符設(shè)備文件,可以像打開文件、讀寫文件一樣操作UART設(shè)備。
對UART的操作與對文件的操作一樣。打開UART設(shè)備后,向調(diào)制解調(diào)器發(fā)送的AT指令和HDLC幀數(shù)據(jù)以寫文件的方式寫入U(xiǎn)ART設(shè)備,UART把數(shù)據(jù)發(fā)送至調(diào)制解調(diào)器的串口,命令執(zhí)行對應(yīng)的操作。調(diào)制解調(diào)器通過串口把結(jié)果值和HDLC幀數(shù)據(jù)返回到UART設(shè)備,程序以讀文件的方式從UART設(shè)備讀取數(shù)據(jù),并判斷執(zhí)行下一步對應(yīng)的操作。系統(tǒng)框圖如圖4所示。
2.2 程序流程設(shè)計(jì)
傳真發(fā)送過程就是對Modem不斷操作的過程,通過Modem完成數(shù)據(jù)的收發(fā)及信號(hào)的握手。DTE向調(diào)制解調(diào)器發(fā)送命令,調(diào)制解調(diào)器DCE對命令做出響應(yīng),完成該命令的操作,并返回命令執(zhí)行的結(jié)果碼。
對調(diào)制解調(diào)器發(fā)送的命令是AT指令,命令形式化為“AT+命令值”,例如“AT+FRH=3”,表示命令Modem準(zhǔn)備以300 b/s的速率接收數(shù)據(jù)。根據(jù)T.30建議書的要求,發(fā)送的TCF信號(hào)是連續(xù)1.5 s的“0”序列,設(shè)計(jì)過程中通過反復(fù)實(shí)驗(yàn),用軟件連續(xù)發(fā)送一定的字節(jié)內(nèi)比特位為0的數(shù)據(jù),可達(dá)到通信要求。在接收TCF信號(hào)時(shí),把接收到的0比特?cái)?shù)據(jù)存入緩沖區(qū),然后判斷是否滿足在當(dāng)前通信速率下的連續(xù)0比特?cái)?shù)據(jù)量。在報(bào)文傳輸階段,發(fā)送的數(shù)據(jù)為處理后(掃描、二值化、編碼)二進(jìn)制數(shù)據(jù),根據(jù)ITU-T T.4標(biāo)準(zhǔn),傳輸?shù)臄?shù)據(jù)可以采用MH/MR/MMR編碼,并且每行的編碼數(shù)據(jù)發(fā)送時(shí)間不能少于20 ms[5]。所以編碼數(shù)據(jù)傳輸時(shí)要對數(shù)據(jù)量小的一行編碼進(jìn)行0 bit填充,這部分在軟件設(shè)計(jì)時(shí)實(shí)現(xiàn)。報(bào)文數(shù)據(jù)以字節(jié)為單位將8 bit數(shù)據(jù)高低位順序顛倒,再傳送給UART。報(bào)文數(shù)據(jù)傳送完之后需添加發(fā)送結(jié)束標(biāo)記<DLE><ETX>,告訴Modem報(bào)文數(shù)據(jù)結(jié)束。
同樣,接收傳真時(shí),T.30建議書對判斷連續(xù)1.5 s的“0”沒有具體要求,這里采用緩沖區(qū)數(shù)據(jù)判斷,把接收的“0”存入緩沖單元,判斷“0”的個(gè)數(shù)來決定當(dāng)前的通信速率是否滿足。在接收到報(bào)文數(shù)據(jù)后,需要把結(jié)束標(biāo)記從數(shù)據(jù)中濾出,存入緩沖區(qū),再傳送給譯碼打印系統(tǒng)或存儲(chǔ)Tiff文件。限于篇幅,僅給出如圖5所示的發(fā)送單頁傳真樣張軟件實(shí)現(xiàn)流程圖。
3 驗(yàn)證與調(diào)試
在NiosII IDE開發(fā)環(huán)境下完成設(shè)計(jì)代碼,將Nios硬核和軟件程序下載到FPGA開發(fā)板上,在線調(diào)試。最后在開發(fā)板上運(yùn)行該程序,實(shí)現(xiàn)與遠(yuǎn)端普通傳真機(jī)的傳真業(yè)務(wù)通信。所選擇的遠(yuǎn)端普通傳真機(jī)為光電傳真機(jī)OEF319系列傳真機(jī)和Pansonnic系列傳真機(jī)。測試主要內(nèi)容為:
(1)發(fā)送傳真。在PC機(jī)上將符合ITU標(biāo)準(zhǔn)的測試樣張Tiff文件中的傳真數(shù)據(jù)存儲(chǔ)到文件,運(yùn)行NiosII環(huán)境時(shí)暫存到緩沖區(qū),執(zhí)行傳真通信,將傳真數(shù)據(jù)發(fā)送出去。遠(yuǎn)端傳真機(jī)打印出數(shù)據(jù)和樣張對比,文字清晰可讀。
(2)接收傳真。和遠(yuǎn)端傳真機(jī)通信,接收對方發(fā)來的傳真數(shù)據(jù)并緩存。由于沒有打印設(shè)備,不能有效對比接收數(shù)據(jù)和樣張。把本次接收的數(shù)據(jù)緩存,作為發(fā)送傳真的測試數(shù)據(jù),基本保證了傳真測試。采用這樣的測試策略,接收傳真的功能基本實(shí)現(xiàn)。在后面深入研究中,可以將打印設(shè)備添加到FPGA開發(fā)板的系統(tǒng)中,這樣就完善了傳真系統(tǒng)。
經(jīng)測試對比分析,傳真流程合理,與商用傳真機(jī)正常通信。但傳真附加功能和整個(gè)傳真系統(tǒng)還有待于進(jìn)一步完善。 本文深入分析了T.30傳真通信建議書,基于NiosII軟件集成開發(fā)環(huán)境實(shí)現(xiàn)了傳真通信規(guī)程,并將軟件下載到Altera公司系列開發(fā)板上。通過測試驗(yàn)證,實(shí)現(xiàn)了和普通商用傳真機(jī)的傳真通信?;贜iosII軟核的傳真通信規(guī)程的實(shí)現(xiàn),為嵌入式傳真機(jī)提供了一種新的設(shè)計(jì)開發(fā)策略,為傳真機(jī)產(chǎn)品升級(jí)和提高性能提供了參考;對打破國外傳真機(jī)芯片及產(chǎn)品的壟斷,實(shí)現(xiàn)中國傳真機(jī)自主知識(shí)產(chǎn)權(quán)及產(chǎn)業(yè)化,都具有重要的現(xiàn)實(shí)意義。