串口与modem流量控制大全(2)

PC端处理:

    本端发送
          当 发现(不一定及时发现) CTS (-3V to -15V)无效时,停止发送,
          当 发现(不一定及时发现) CTS (3V to 15V)有效时,恢复发送;
    本端接收
          0           当接收buffers中的bytes           当接收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(RingIndicator振铃指示)------------这个引脚用于指示是否有90V铃流信号输入。如果检测到振铃信号,MODEM将周期改变RI引脚电平,变化频率与振铃频率无关,DTE设备检测RI上的电平变化,并计数,一旦符合规定次数,就发出DTR信号,指示DCE摘机应答。以前的“笨猫”没有CPU,所以需要DTE帮助判断是否有拨入,现在的“聪明猫”(HayesSmartmodem)有CPU,完全可以自动应答,我看,这个信号以后就可以省掉了,毕竟RS232是很早以前的标准,已经过时了,不必拘泥于原来的规范。


     DTE           DCE        AB                     HJD04D大型程控电话交换机
  ---------     ----------  电话线   ---------   ST-BUS -------------ST-BUS------------   E1
  |FIFO缓冲|---->|FIFO缓冲|--------->|SLIC板|<------->|DSN交换网络|<------>|DTP数字中继|<----->经汇接局到另一端局的相应电路
  ---------     ----------           ---------         -------------        ------------               (左图逆序)
       RTS--><--CTS                    ^               

你可能感兴趣的:(UART)