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

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(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                                         ^
                                                             |
                         公共资源  ----------------------------------------------------------
                                     铃流源                   信号音(拨号/回铃/忙/催挂音)
                                                           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无效响应之,一次通信过程结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php中的address,html中address是什么意思?(代码示例)

本篇文章主要介绍了关于address标签用法。或许有些朋友对于address标签有点陌生&#xff0c;也会产生address是什么意思的疑问&#xff0c;毕竟在我们日常建站过程中&#xff0c;很少会用到这个标签。但是俗话说&#xff0c;存在即合理。html里每一个标签都有他自己的定义和用处…

modem建链过程详述

终端 MODEM 步骤1|DTR-->| 步骤2|TXD-->| 步骤3|<--DSR| 步骤4|<--DCD| 步骤5|<--CTS| 步骤6|<--RXD| 1、由终端送DTR信号到MODEM&#xff0c;DTR信号由RS232的DTR脚送出&#xff0c;告诉MODEM终端已准备好&#xff1b; 2、终端送TXD信号到MODEM&#xf…

存储过程没有执行完后没有释放锁_面试必问---synchronized实现原理及锁升级过程你懂吗?...

synchronized实现原理及锁升级过程前言:synchronized是Java内置的机制&#xff0c;是JVM层面的&#xff0c;而Lock则是接口&#xff0c;是JDK层面的尽管最初synchronized的性能效率比较差&#xff0c;但是随着版本的升级&#xff0c;synchronized已经变得原来越强大了,本文带大…

C51存储器类型与51单片机的物理区域

1、 data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、 data区内最好放局部变量。 因为局部变量的空间是可以覆盖的&#xff08;某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖&#xff09;,可以提…

嵌入式MODEM通迅技术

摘要&#xff1a; 现今&#xff0c;市面上生产的各种嵌入式Modem可通过公众电话交换网络&#xff08;PSTN&#xff09;实现数据的传输功能&#xff0c;包括标准的串行和并行的接口&#xff0c;具有同步和异步的通信数据传输格式&#xff0c;支持多种Modem标准协议——V.92、V.9…

python删除mysql数据库_python 删除mysql数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

php音视频同步,视频画面和声音不同步?视频声音画面同步工具|软件

造成视频声音和画面不同步的原因&#xff0c;原因有三种&#xff1a;1、机器配置太低&#xff0c;播放高码率的视频文件容易造成不同步&#xff1b;2、片子本身就不同步&#xff1b;3、软件使用不当造成转换后的文件不同步。常见于 avi 文件和 rm/rmvb 文件。虽然我们下载的电影…

Hibernate C3P0连接池配置

本文向大家介绍Hibernate C3P0连接池&#xff0c;可能好多人还不了解Hibernate C3P0连接池&#xff0c;没有关系&#xff0c;看完本文你肯定有不少收获&#xff0c;希望本文能教会你更多东西。 Hibernate自带的连接池算法相当不成熟。 它只是为了让你快些上手&#xff0c;并不适…

cc、gcc、g++、CC的区别概括

gcc是C编译器&#xff1b;g是C编译器&#xff1b;linux下cc一般是一个符号连接&#xff0c;指向gcc&#xff1b;gcc和g都是GUN&#xff08;组织&#xff09;的编译器。而CC则一般是makefile里面的一个名字&#xff0c;即宏定义&#xff0c;嘿&#xff0c;因为Linux/Unix都是大小…

怎样在vs中监视char*字符串_字符串指针数据类型

一、前言在实际开发中&#xff0c;特别是芯片开发中&#xff0c;例如智能传感器芯片&#xff0c;经常直接使用C语言指针数据类型来操作寄存器。那么字符串指针就是我们常见的操作。C语言没有单独的字符串对象&#xff0c;它是通过数组的形式来表示字符串的&#xff1a;#include…

php mysql 替换 pdo,php操作MySQL数据库之PDO方式

这篇文章主要介绍了关于php操作MySQL数据库之PDO方式 &#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下基本使用1)连接数据库$pdo new PDO(“mysql:hostlocalhost; dbnamedb_name”,username,password);2)执行SQL语句$pdo ->…

.NET操作Excel

一.读取Excel数据&#xff0c;并显示 1.配置文件 <configuration> <system.web> <compilation debug"true" targetFramework"4.0" /> </system.web> <appSettings> <!--连接03版本的--> &l…

AC_CHECK_LIB的工作原理

AC_CHECK_LIB就是告诉configure我们需要检查哪些lib&#xff0c;并根据检查结果做什么处理。正是在这里遇到了问题并有所收获&#xff0c;才促使我写这篇blog记录一下。问题是这样&#xff0c;我想检查一下libXv.so这个库是否存在&#xff0c;不存在的话就让configure直接退出。…

mac json格式化工具_一个在 MAC 上 iOS/Flutter 开发的辅助工具

大家好&#xff0c;我是章鱼猫。今天给大家推荐的这个开源项目&#xff0c;是来自于我们公众号读者的投稿&#xff0c;这个东西还挺好的。如果你作为读者&#xff0c;也有自己的开源项目或者你也有想推荐的开源项目&#xff0c;都可以向我们投稿&#xff0c;我们就是致力于帮助…

php 开启fsockopen函数,巧用php的fsockopen函数

这几天闲着没事&#xff0c;用PHP的fsockopen写了几个文件为我的酷我音乐盒的帐户加分。获得途径 积分音乐盒完整的听一首歌曲 1(每天最高200)音乐坊成功上传一张歌单 50(每天最高200)酷我音乐空间空间被访问1次 1(每天最高50)有人打招呼1次 2(每天最高50)有人留言(非主人) 5(每…

java中多维数组的clone容易引起误解

int[][] arr1 new int[][]{{1,2},{1,2}}; int[][] arr2 arr1.clone(); 因为arr1!arr2所以我的意图是 修改arr2 在确定修改结束后 将arr2赋给arr1依此保证在arr2修改过程中arr1不变&#xff0c;&#xff0c;&#xff0c;但神奇的是竟然变了后来才注意到虽然arr1!arr2但arr1[0]…

python编写界面遍历_python和pywin32实现窗口查找、遍历和点击的示例代码

Pywin32是一个Python库&#xff0c;为python提供访问Windows API的扩展&#xff0c;提供了齐全的windows常量、接口、线程以及COM机制等等。1.通过类名和标题查找窗口句柄&#xff0c;并获得窗口位置和大小import win32guiimport win32apiclassname "MozillaWindowClass&…

termcap-1.3.1的configure.in文件逐行分析

AC_INIT(termcap.h) 每个configure文件第一个需要调用的宏&#xff0c;他处理所有的命令行参数并且寻找源代码目录。termcap.h是包含在源代码目录下的文件&#xff0c;configure在目录中检查这些文件是否存在以确定该目录是否包含源代码。 AC_ARG_ENABLE(install-termcap, [ …

php转换图片属性a,PHP 提取图片img标记中的任意属性

/* PHP正则提取图片img标记中的任意属性 */$str PHP正则提取或更改图片img标记中的任意属性;//1、取整个图片代码preg_match(/]*?src\s*\s*(\|\")(.*?)\\1[^>]*?\/?\s*>/i,$str,$match);echo $match[0];//2、取width属性preg_match(//i,$str,$match);echo $mat…