热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

与modem通信

来源: 作者: 时间:2007-12-07 Tag: 点击:

    RTS(Request To Send请求发送),CTS(Clear To Send清除发送)------------半双工时,用于收发模式切换。属于辅助流控信号。半双工的意思是说,发的时候不收,收的时候不发。那么怎么区分收发呢?缺省时是DCE向DTE发送数据,当DTE决定向DCE发数据时,先有效RTS,表示DTE希望向DCE发送,一般DCE不能马上转换收发状态,DTE就通过监测CTS是否有效来判断可否发送,这样避免了DTE在DCE未准备好时发送所导致的数据丢失。
    全双工时,这两个信号一直有效即可。
     以上所述是RS232标准的定义,然而在MODEM中,完全没有遵守这个规范,而是将其用于硬件流控。很多人根据RTS和CTS的字面意思理解他们的用法往往百思不得其解,再加上半双工/全双工,就更加云里雾里了。RTS和CTS在MODEM中的用法与他们字面的含义没有任何关系,他们已经由贺氏公司重新定义了用法。以下是网友dengm给出的程序,详细说明了RTS和CTS在MODEM里的用法。RTS用于指示本端是否可以接收数据,CTS指示对端是否可以接收数据。
   
    www.21ic.com
    dengm 发表于 2005-1-14 07:52 侃单片机

    PC端处理:
    本端发送
          当 发现(不一定及时发现) CTS (-3V to -15V)无效时,停止发送,
          当 发现(不一定及时发现) CTS (3V to 15V)有效时,恢复发送;
    本端接收
          0<M<N<LEN_OF_RX_BUFFERS(不要在处于边界时才给出指示,否则对端很有可能来不及停发而造成本端接受缓冲区溢出。)
          当接收buffers中的bytes<M 时,给 RTS 有效信号(+3v to +15v),
          当接收buffers中的bytes>N 时,给 RTS 无效信号(-3v to -15v);
   
    MODEM端处理:
          同上,但RTS与CTS交换

     图1表示DTE向DCE发送数据时的流控过程。DTE和DCE一般都会有一定容量的FIFO(先入先出)缓冲区,例如16字节。DTE以设定的波特率(如 115200)向DCE发送数据,当DCE的FIFO缓冲区快满时,DCE使CTS无效,DTE软件检测到此信号后停止发送。同时DCE继续向电话线上发送数据,一旦发出,DCE的FIFO就变成不满,CTS恢复有效,允许DTE继续写入。串口波特率只是接口速率,不是Modem的实际传输速率,一般发送都快于接收,为避免溢出丢失数据,均需要接收端控制发送端发送速度,即流控。
    DCE向DTE发送数据用RTS进行流控,过程与上面讲的类似。

     流控在通信里的作用非常重要,它能使发送和接收保持均衡,避免数据因为收发速率不匹配而丢失。例如:在TCP协议里,当数据丢失时,总是假定丢包是由于网络拥塞引起的,此时采用拥塞避免算法,超时时间加倍,拥塞窗减半,尽管此时信道正常,有数据可以发,但因为拥塞窗减小导致不能发送,而且超时等待时间加倍,TCP的性能将急剧下降,测试报告不会好看。信道上因为误码引起的丢包和网络上因为拥塞造成的丢包都是不可控的,而收发速率不匹配造成的数据丢失完全可以通过流控避免,因此,在接收速率小于/等于发送速率的地方都要使用流控。硬件流控不能跨越设备,软件流控可以实现端到端控制。
    注意:MODEM是否配置硬件流控可以通过AT指令动态修改。在不支持硬件流控时,这两个信号在数据传输状态一直有效。此时可以无流控,或者通过ON(0x11)/XOFF(0x13)软件流控。
   
    RI(Ring Indicator振铃指示)------------这个引脚用于指示是否有90V铃流信号输入。如果检测到振铃信号,MODEM将周期改变RI引脚电平,变化频率与振铃频率无关,DTE设备检测RI上的电平变化,并计数,一旦符合规定次数,就发出DTR信号,指示DCE摘机应答。以前的“笨猫”没有 CPU,所以需要DTE帮助判断是否有拨入,现在的“聪明猫”(Hayes Smartmodem)有CPU,完全可以自动应答,我看,这个信号以后就可以省掉了,毕竟RS232是很早以前的标准,已经过时了,不必拘泥于原来的规范。


     DTE           DCE        AB                     HJD04D大型程控电话交换机
  ---------     ----------  电话线   ---------  ST-BUS ------------- ST-BUS ------------   E1
  |FIFO缓冲|---->|FIFO缓冲|--------->| SLIC板 |<------->|DSN交换网络|<------>|DTP数字中继|<----->经汇接局到另一端局的相应电路
  ---------     ----------           ---------         -------------        ------------               (左图逆序)
       RTS--> <--CTS                    ^                  |     ^
                                        |                  |     |
                         公共资源  ----------------------------------------------------------
                                     铃流源                 |   信号音(拨号/回铃/忙/催挂音)
                                                           V
                                                         DTMF双音多频收号器
                                      图1 硬件流控图(DTE向DCE发送数据)

    如图1,MODEM的另一端连接电话线,通过AB线与对端(局端)程控电话交换机SLIC板(用户线接口电路)相连,需要实现用户线信令(摘机、挂机、振铃、拨号音、忙/催挂/回铃音等),还有用于判断链路通断的载波检测。
   
    以上讨论的DB9串口是很早以前设计的,随着技术的发展,MODEM越来越聪明,软件完全可以取代一些硬件控制连线,甚至重新设计MODEM串口。如果今后遇见不符合现在定义的MODEM接口是不足为奇的。

    ****************************************
    * (4) 串口交叉连接方式和MODEM工作时序  *
    ****************************************
    交叉连接用于两个DTE设备互连
    图略
    (1)最简连接
        用于调试目的等非RS232应用,通信软件不能检测DSR、DCD、CTS信号
        (本端)--(对端):  (2)--(3)  (3)--(2)  (5)--(5)
        1--4--6--7--8--9悬空
    (2)RS232连接
        用于屏蔽RS232通信软件的检测,早期BIOS和OS通信软件只能在符合RS232规则的接口线上运行,此种接法可使其只用3根线即可正常工作。
        短接本端 1--4--6;短接本端 7--8
        (本端)--(对端):  (2)--(3)  (3)--(2)  (5)--(5)
        9悬空
    (3)完全连接
        忽略DCD和RI,带硬件流控的交叉连接
        (本端)--(对端):  (2)--(3)  (3)--(2)  (5)--(5)  (7)--(8)  (8)--(7)  (6)--(4)  (4)--(6)
        1和9悬空
    (4)NULL MODEM连接
        用于模拟两个DTE之间通过MODEM连接。在PPP开发时,可以节省大量通信费用。
        (本端连接)--(对端连接):(2)-(3) (3)-(2) (7--8)--(1) (6--9)--(4) (5)--(5) (1)--(7--8) (4)--(6--9) (9--6)--(4)

    MODEM的工作时序:
        在整个通信过程中,DTR和DSR及DCD必须一直有效,RTS和CTS用于硬件流控(软件实现的),RTS有效时指示DTE可以收,CTS有效时指示DCE可以收(详见引脚说明)。
         当电话打入时,交换机SLIC(用户线接口电路)板发出90V振铃信号,MODEM识别后发出RI信号,RI变化频率与振铃频率无关,PC机对RI变化记数,达到触发值时,PC机发出DTR信号通知MODEM摘机应答。MODEM发出载波后有效DSR,通知PC已摘机。当接收到对端载波后,DCD有效,指示话音通道连通。通信完毕任一方停止载波,导致两端载波消失,PC检测到DCD无效,就使DTR无效,MODEM随后使DSR无效响应之,一次通信过程结束。
        现在的MODEM一般都可以自动应答,RI信号可忽略。当MODEM识别出振铃后,摘机应答并发载波,同时有效DSR,通知 PC机有拨入,PC随即有效DTR,允许拨入。当收到对端载波,MODEM有效DCD,指示话音通道连通。通信完毕任一方停止载波,导致两端载波消失, PC检测到DCD无效,就使DTR无效,MODEM随后使DSR无效响应之,一次通信过程结束。
        PC机拨出时,先有效DTR,指示MODEM摘机拨号,MODEM回应DSR有效,在识别出拨号音后拨号,然后在回铃音结束后发载波,一旦收到对端载波,MODEM有效DCD,指示话音通路连通。此后,就可以进行PPP协商了。通信完毕任一方停止载波,导致两端载波消失,PC检测到DCD无效,就使DTR无效,MODEM随后使DSR无效响应之,一次通信过程结束。

    *************************
    * (5) 硬件学习方法总结  *
    *************************
     我认为学习硬件最重要的是抓住4个关键点:引脚、时序、寄存器和协议。硬件的参考资料就是数据手册(datasheet),虽然大部分由英文写成,但是科技英语并不象想象中那么难,而且数据手册的内容编排有规律可寻。一般,先介绍总体特点概述(卖点),顺便做一下公司广告(什么leadership一类的),然后是结构/功能框图、引脚说明、时序分析、寄存器说明、硬件所实现的具体协议(USB、PCI、E1等)、应用范例demo、直流/交流特性、封装、订购信息、联系方法等,手册里往往还会总结一些图、表、关键字目录索引,方便读者阅读。
    ------
    |引脚|
    ------
     引脚是对硬件工程师最重要的信息之一,务必将其背记下来。背下来的好处多多,基本上扫一眼图纸就能猜出芯片是干什么用的;对一些不常用的设计技巧能马上发现,进而学习之;能立即指出明显的低级错误;能轻易区分不同型号相同种类的芯片;有利于不断积累硬件经验,熟能生巧。总之,背下引脚能大大提高工作效率,不必频繁查书,不必中断思路,让精力集中在应用设计上。
    面对几百个引脚的芯片,看似无法记住,实则简单Easy。譬如:地址线32根、数据线32根,电源5根、地线20根,一会儿就记住了89根引脚线,然后按功能记I2C、SPI、ST-BUS、USB、JTAG等固定用法的引脚线,不管用在哪个芯片上,这些引脚种类和功能都相同,有时,只要记住功能就能把相关引脚一一背出,或者只须记住差异点即可。一旦背下一个芯片,那么与之类似的一系列芯片就都不在话下了。
    万事开头难,一旦习惯了,随时记住几百个引脚的芯片也不是难事,这是专业硬件工程师的基本功。
    ------
    |时序|
    ------
     时序是硬件工程师获得的另一个重要信息,务必反复咀嚼回味。时序图可以清楚全面地展示硬件的工作过程,从中我们可以得到想要的细节。硬件设计的一大任务是抑制干扰噪声,通过分析时序可以找到最佳的处理方法。比如:在数据的中点采样,可以获得前后各50%的抖动裕量;通过满足建立/保持时间,使得数据采样正确。
    一般来说,时序图展示的是理想情况下的位置关系,实际电路中还要受到生产工艺和现场情况的影响。比如:温度、湿度会影响介电常数,进而影响阻抗匹配。实际波形有上冲、下冲、振铃等幅度变化;相位有超前、滞后变化;时钟有不同步问题等等。这些问题限制了时序图的适用范围,使用中切记满足前提条件。例如:PCI的突发访问字节数在时序图上可以做得很大,这样传输效率高,但是因为生产工艺达不到要求,不能保证时钟低抖动,阻抗也不能完全匹配,如果突发访问字节数过大,会造成误差累积,导致采样错误,因此实际中一般限制在4字节以下。我们只可以把时序图当作理论参考,切记不能过份相信,要看时序只能通过示波器和逻辑分析仪。
    本来直流和交流特性不是时序内容,但因为对时序影响较大,所以就应该配合时序一起看。

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册