楼主好好看看下面这篇文章就明白啦:
基于NiosII传真通信规程的分析与设计实现
传真机作为图文通信设备得到了广泛应用。为了进行正常通信,需要在通信过程中进行一些“操作”,或者由机器自动执行某些操作,发送方和接收方要进行“磋商”。接收/发送双方要经过发出表示信号、命令信号、响应信号和证实信号这一过程,这是一个不断“操作”和“确认”的渐进过程。这个通信规程就是ITU-T在T.30建议中作的规定,T.30建议书作为传真机在公用电话交换网上的传输规程,对公用电话交换网上传真业务的发展起到了决定性的作用。
目前传真通信的产品开发主要是基于Conexant等公司的专用传真芯片,对系统二次开发。本文从替代传统专用芯片的角度,提出一种新的基于NiosII传真系统方案,即软硬件协同开发的流程,分析并设计实现传真通信。
1 传真通信规程分析
1.1 传真过程描述
T.30建议规定了通信规程的适用范围、所用术语的解释、传真呼叫描述、传真用的单音信号方式和二进制信号方式[1]。图1为传真阶段过程图。
(1)阶段A:呼叫建立,连通传真通信双方传输线,使传真机接入线路。拨号和应答双方均可由人工或自动两种操作完成。
(2)阶段B:报文前过程,报文传输的准备阶段,包括性能识别和选择条件命令及接收条件确认。命令部分包括性能命令、训练、同步及可选的非标准设备命令、终端识别命令、查询(发送)命令和回声抑制器解除。
(3)阶段C:报文中过程,由信息传输过程和报文传输组成。信息传输过程与报文传输同时进行,并控制传输信号完整性,如传输同步、差错检测及纠错和线路管理。若没有差错检测和纠错处理,则该阶段只传输报文数据。
(4)阶段D:报文后过程,传真双方在完成传输一页报文后进行该过程。包含消息结束信号、确认信号、多页信号和传真结束过程信号。如果信息传输完毕,则直接进入E阶段。
(5)阶段E:呼叫释放,可以手动或自动进行。在信息传输完毕或上述各阶段操作异常时,双方分别进入该阶段,将传真机与线路脱离。
1.2 传真二进制码信号结构
传真过程用的二进制信号,以300 b/s的速率传送,这是三类机二进制代码过程数据传输的标准速率。二进制代码的传真控制过程都使用HDLC帧结构。一个HDLC帧结构由先导序列、标志序列、地址字段、控制字段、信息字段、帧校验序列组成。
由于采用的调制解调器为TM-EC5658V Data/Voice/Fax Modem,它完成帧校验和帧封装工作,所以数字终端设备DTE与调制解调器通信过程中的HDLC帧结构如图2所示。
(1)地址字段:表示该链路上发送或接收该帧的地址。提供多点连接安排中的指定终端的标识。在传真通信中,由于公用电话交换网中只进行点对点的通信,故限定为单一信号格式。
(2)控制字段:该字段8 bit数据,用来提供末帧及非末帧的标志。格式为1100 x000,过程中的非末帧,x=0,末帧,x=1,这样可以区别末帧和非末帧。末帧是指为期待从对方站发来响应之前所发送的最后一帧。
(3)HDLC信息字段:T.30建议书中HDLC信息字段被划分为传真控制字段和传真信息字段两部分。传真控制字段由8 bit或16 bit构成,二进制码表示各种命令或响应信号,可以提供28=256种控制信号。传真信息字段的作用是进一步说明传真控制字段的内容,提供各种标识、选择、控制参数等信息。传真信息字段是以8 bit为一组的数据信息来说明传真过程。
(4)帧校验序列,帧校验序列为16 bit位宽数据,用于检测传输中可能产生的差错。DTE向Modem发送帧数据时不需要帧校验序列,Modem完成帧校验。Modem向DTE传送帧数据时,附带有帧校验数据。
1.3 传真通信流程分析
主叫端主动发出一次传真呼叫,其既可以发送也可以接收传真文件。一般情况下,当一方有文件需要发送时,可作为主叫端发送传真文件。在轮询状态下,主叫端检测被叫端是否有文件需要传送。当主叫端和被叫端均为全自动操作时,主叫端先将传真机接入电路,检测到拨号音后拨号,启动计时并向线路发送主叫单音信号,在设置本端传真模式后进入阶段B。
阶段B要完成对通信双方的标识,包括收发操作的确认、兼容性识别以及传输速率的确定。具体过程如下:
(1)被叫端将其性能指标(如支持的页面大小、传输速率等)封装在DIS(Digital Identification Signal)中,通知主叫端发送。
(2)主叫端根据被叫端性能指标做兼容性判断。若本地无文件发送而对方有文件发送,则作为接收机发送DTC(Digital Transmistion Command)信号;若本地有文件发送且对方机器兼容,则发送DCS(Digital Command Signal)通知接收端本次传真过程所采用的传输参数,并发送协商速率下的训练序列。
(3)接收端正确接收到训练后发送CFR(Confirmation To Receive)信号,否则发送FTT(Failure To Train)信号,发送端更新DCS相应字段并重发降速训练序列,直至接收到CFR。
在收发双方确定连接所能够支持的最大速率传输速率下传输报文。非纠错模式的报文在阶段C一次性全部传输完毕,其报文后命令有三种,分别为多页信号MPS(MultiPage Signal)、传真过程结束信号EOP(End Of Procedure)和报文结束信号EOM(End Of Message)。正确接收报文后接收端发送MCF(Message Confirmation)信号。发送端收到MCF后,进入E阶段,并发送DCN(Disconnect)信号,双方拆链路。
1.4 调制解调器通信原理分析
Modem集成标准RS-232接口,通过RS-232接口的TxD和RxD两条信号线完成DCE(Data Communication Equipment)和DTE(Data Terminal Equipment)的数据交换和控制信号交换。DTE发送AT命令到DCE,即Modem。Modem执行命令后通过RxD返回结果给DTE。图3是Modem通信的示意图。Modem每执行一条AT指令,都要返回当前的状态;传真过程中向Modem串口发送AT指令和HDLC帧数据。
由于Modem的性能不同,对应不同的工作模式,Class 1服务类别DCE提供为支持G3传真操作所需要的服务水平。DTE通过AT指令向Modem传递命令和参数。Modem执行AT命令的结果就是修改Modem寄存器的值,即设置Modem操作状态。通过设置Modem的服务类型后,拨号进入传真流程。
2 传真规程设计实现
2.1 传真系统设计
系统开发工具选择QuartusII和NiosII IDE环境,结合SoPC技术,软硬件协同设计开发。器件选择Altera公司的Cyclone系列EPEC20F400C开发板,使用QuartusII中SoPC Builder对硬件系统进行定义,完成硬核开发的集成过程。根据设计需要对CPU进行定制,包括CPU的数据和指令缓存的大小、CPU寄存器数量等[4]。除了NiosII之外,还需要将外围设备的IP添加进来。本设计就是将在前面提到的各种NiosII自带的各种IP核(UART控制器、定时器等)添加进来,其余自定义的逻辑器件接口同CPU的连接只需在SoPC Builder中将对应的接口模块添加进来即可。
NiosII核与调制解调器通信是通过UART控制器实现的。原来的UART直接选用Altera公司提供的标准UART组件,通信时通过寄存器单字节收发,每个字节都会有中断触发。为了方便软件编程,Altera提供硬件抽象层HAL(Hardware Abstract Level)系统库驱动程序,该驱动程序是一个集成到HAL系统中的HAL字符模式设备驱动程序,代替访问UART寄存器,编程者直接使用HAL的API和ANSI C标准库函数访问UART。此时,UART相当于字符设备文件,可以像打开文件、读写文件一样操作UART设备。
对UART的操作与对文件的操作一样。打开UART设备后,向调制解调器发送的AT指令和HDLC帧数据以写文件的方式写入UART设备,UART把数据发送至调制解调器的串口,命令执行对应的操作。调制解调器通过串口把结果值和HDLC帧数据返回到UART设备,程序以读文件的方式从UART设备读取数据,并判断执行下一步对应的操作。系统框图如图4所示。
2.2 程序流程设计
传真发送过程就是对Modem不断操作的过程,通过Modem完成数据的收发及信号的握手。DTE向调制解调器发送命令,调制解调器DCE对命令做出响应,完成该命令的操作,并返回命令执行的结果码。
对调制解调器发送的命令是AT指令,命令形式化为“AT+命令值”,例如“AT+FRH=3”,表示命令Modem准备以300 b/s的速率接收数据。根据T.30建议书的要求,发送的TCF信号是连续1.5 s的“0”序列,设计过程中通过反复实验,用软件连续发送一定的字节内比特位为0的数据,可达到通信要求。在接收TCF信号时,把接收到的0比特数据存入缓冲区,然后判断是否满足在当前通信速率下的连续0比特数据量。在报文传输阶段,发送的数据为处理后(扫描、二值化、编码)二进制数据,根据ITU-T T.4标准,传输的数据可以采用MH/MR/MMR编码,并且每行的编码数据发送时间不能少于20 ms[5]。所以编码数据传输时要对数据量小的一行编码进行0 bit填充,这部分在软件设计时实现。报文数据以字节为单位将8 bit数据高低位顺序颠倒,再传送给UART。报文数据传送完之后需添加发送结束标记
,告诉Modem报文数据结束。
同样,接收传真时,T.30建议书对判断连续1.5 s的“0”没有具体要求,这里采用缓冲区数据判断,把接收的“0”存入缓冲单元,判断“0”的个数来决定当前的通信速率是否满足。在接收到报文数据后,需要把结束标记从数据中滤出,存入缓冲区,再传送给译码打印系统或存储Tiff文件。限于篇幅,仅给出如图5所示的发送单页传真样张软件实现流程图。
3 验证与调试
在NiosII IDE开发环境下完成设计代码,将Nios硬核和软件程序下载到FPGA开发板上,在线调试。最后在开发板上运行该程序,实现与远端普通传真机的传真业务通信。所选择的远端普通传真机为光电传真机OEF319系列传真机和Pansonnic系列传真机。测试主要内容为:
(1)发送传真。在PC机上将符合ITU标准的测试样张Tiff文件中的传真数据存储到文件,运行NiosII环境时暂存到缓冲区,执行传真通信,将传真数据发送出去。远端传真机打印出数据和样张对比,文字清晰可读。
(2)接收传真。和远端传真机通信,接收对方发来的传真数据并缓存。由于没有打印设备,不能有效对比接收数据和样张。把本次接收的数据缓存,作为发送传真的测试数据,基本保证了传真测试。采用这样的测试策略,接收传真的功能基本实现。在后面深入研究中,可以将打印设备添加到FPGA开发板的系统中,这样就完善了传真系统。
经测试对比分析,传真流程合理,与商用传真机正常通信。但传真附加功能和整个传真系统还有待于进一步完善。 本文深入分析了T.30传真通信建议书,基于NiosII软件集成开发环境实现了传真通信规程,并将软件下载到Altera公司系列开发板上。通过测试验证,实现了和普通商用传真机的传真通信。基于NiosII软核的传真通信规程的实现,为嵌入式传真机提供了一种新的设计开发策略,为传真机产品升级和提高性能提供了参考;对打破国外传真机芯片及产品的垄断,实现中国传真机自主知识产权及产业化,都具有重要的现实意义。
来源:langen