zoukankan      html  css  js  c++  java
  • RS232 Flow Control

    流控制在串行通讯中的作用

    这里讲到的“流”, 指的是数据流。数据在两个串口之间传输时, 常常会出现丢失数据的现象, 或者两台计算机的处理速度不同, 如台式机与单片机之间的通讯, 接收端数据缓冲区已满, 则此时继续发送来的数据就会丢失。现在我们在网络上通过 MODEM 进行数据传输, 这个问题就尤为突出。流控制能解决这个问题, 当接收端数据处理不过来时, 就发出“不再接收”的信号, 发送端就停止发送, 直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程, 防止数据的丢失。PC机中常用的两种流控制是硬件流控制(包括 RTS/CTS、DTR/CTS 等)和软件流控制 XON/XOFF(传输继续/传输停止),下面分别说明。

    硬件流控制

    硬件流控制常用的有 RTS/CTS(请求发送/清除发送)流控制和 DTR/DSR(数据终端就绪/数据设置就绪)流控制。硬件流控制必须将相应的电缆线连上, 用 RTS/CTS 流控制时, 应将通讯两端的RTS、CTS线对应相连,数据终端设备(如计算机)使用 RTS 来起始调制解调器或其它数据通讯设备的数据流, 而数据通讯设备(如调制解调器)则用 CTS 来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的 75%)和一个低位标志(可为缓冲区大小的 25%),当缓冲区内数据量达到高位时,我们在接收端将 CTS 线置低电平(送逻辑 0),当发送端的程序检测到 CTS 为低后,就停止发送数据, 直到接收端缓冲区的数据量低于低位而将 CTS 置高电平。RTS 则用来标明接收设备有没有准备好接收数据。常用的流控制还有还有 DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。由于流控制的多样性, 个人认为, 当软件里用了流控制时, 应做详细的说明, 如何接线, 如何应用。

    软件流控制

    由于电缆线的限制, 我们在普通的控制通讯中一般不用硬件流控制, 而用软件流控制。一般通过 XON/XOFF 来实现软件流控制。常用方法是:当接收端的输入缓冲区内数据量超过设定的高位时, 就向数据发送端发出 XOFF 字符(十进制的 19 或 Control-S,设备编程说明书应该有详细阐述), 发送端收到 XOFF 字符后就立即停止发送数据; 当接收端的输入缓冲区内数据量低于设定的低位时, 就向数据发送端发出 XON 字符(十进制的 17 或 Control-Q),发送端收到 XON 字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符。应该注意, 若传输的是二进制数据, 标志字符也有可能在数据流中出现而引起误操作, 这是软件流控制的缺陷, 而硬件流控制不会有这个问题。

    以上内容摘抄于网友博客

    (完)

  • 相关阅读:
    python随机生成
    socket、tcp、http
    TCP三次握手和http过程
    iOS多线程的初步研究(十)-- dispatch同步
    dispatch队列
    IOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
    UIWebView 自定义网页中的alert和confirm提示框风格
    dispatch_semaphore
    app内购提示,您已购买此商品,但未下载
    单例的写法
  • 原文地址:https://www.cnblogs.com/gaowengang/p/14216186.html
Copyright © 2011-2022 走看看