当前位置: 首页 > news >正文

串口流控(CTS/RTS)使用详解

1.流控概念

        在两个设备正常通信时,由于处理速度不同,就存在这样一个问题,有的快,有的慢,在某些情况下,就可能导致丢失数据的情况。
如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。
       流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,实现收发双方的速度匹配,防止数据的丢失。
PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止)。

2. 使用方式

    a. 硬件流控
           硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
             RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
             CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
    
             其他介绍:
           硬流控的RTS 、CTS :RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收;CTS (Clear ToSend,发送清除)为输入信号,有效时停止发送。假定A、B两设备通信,A设备的RTS 连接B设备的CTS ;A设备的CTS连接B设备的RTS。前一路信号控制B设备的发送,后一路信号控制A设备的发送。对B设备的发送(A设备接收)来说,如果A设备接收缓冲快满的时发出RTS信号(高电平)(意思通知B设备停止发送),B设备通过CTS 检测到该信号,停止发送;一段时间后A设备接收缓冲有了空余,发出RTS信号(低电平),指示B设备开始发送数据。A设备发(B设备接收)类似。
    
    b. 软件流控
           软件流控和硬件流控都方式一样,只是实现方式不同而已。在通信过程中,软件流控通过在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。A设备一旦接收到B设备发送过来的Xoff,立刻停止发送;反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。同理,B设备也类似,从而实现收发双方的速度匹配。
    
3. 流控使用

        如果串口只接了RX、TX两个信号,那么要流控的话只能使用软流控;如果接了RX,TX,CTS ,RTS四个信号,那么可以使用硬流控或者软件流控。
RS232 引脚说明

4. 数据发送

    a. 物理连接(交叉连接)
        § 主机的RTS(输出)信号,连接到从机的CTS(输入)信号。
        § 主机的CTS(输入)信号,连接到从机的RTS(输出)信号。
        ▪ RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
        ▪ CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
        
    b. 主机发送过程:
        § 主机查询主机的CTS脚信号,此信号连接到从机的RTS信号,受从机控制。
        § 如果主机CTS信号为有效(低),表示从机的接收FIFO未满,从机可以接收,此时主机可以向从机发送数据。
        § 主机在发送过程中要一直查询CTS信号是否为有效状态。一旦无效,则终止发送。
    
    c. 主机接收过程:
        § 主机如果接收FIFO未满,则使主机RTS信号有效,也即从机的CTS信号有效。此时从机如果要发送,发送前会查询从机的CTS信号,如果为有效,则开始发送。
        § 在发送过程中一直查询从机CTS信号的有效状态,如果无效则中止发送。是否无效由主机的RTS信号决定。
        § 主机如果FIFO满了,则使主机RTS信号无效,也即从机CTS信号无效。主机接收中止。
    
    d. 那主机的CTS信号什么时候会无效呢?
           从机在接收到主机发送的数据时,从机的接收模块的FIFO如果满了,则会使从机RTS无效,也即主机的CTS信号无效。主机则查询到CTS无效时,主机发送中止。
    此过程可以由硬流控完成。我们只要设置开启硬流控,设置FIFO大小。RTS信号和CTS信号由控制器代码查询和设置。

5. 理论验证:

    a.  主机发送验证:
        § 向主机串口丢数据,看TX线上是否有数据。
        § 理论上,遥控主机CTS信号为无效时,TX线上无数据;遥控主机CTS信号为有效时,TX线上有数据;
    b. 主机接收验证:
        § 从机向串口丢数据,主机看RX线上是否有数据。
        § 理论上,如果主机使RTS信号为有效时,RX线上有数据;如果主机使RTS信号为无效时,RX线上无数据;

以上内容为网络收集整理,未注出处,侵删。
————————————————
版权声明:本文为CSDN博主「Crush_u」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Liangren_/article/details/121288003

http://www.lryc.cn/news/91345.html

相关文章:

  • kube-proxy模式详解
  • 汽车EDI:如何与Stellantis建立EDI连接?
  • 【SCI征稿】1区计算机科学类SCI, 自引率低,对国人友好~
  • Vue.js优化策略与性能调优指南
  • HEVC环路后处理核心介绍
  • 从组件化角度聊聊设计工程化
  • apache的配置和应用
  • Buf 教程 - 使用 Protobuf 生成 Golang 代码和 Typescript 类型定义
  • Java 锁 面试题(ReentrantLock、synchronized)
  • Python中的缩进是什么意思?
  • 2023年9月数学建模:最小二乘优化、曲线拟合与函数逼近
  • java8内部调用无法引用值的问题
  • 《嵌入式系统》知识总结10:使用位带操作操纵GPIO
  • leetcode 2.两数相加(链表操作)
  • Jenkins是什么?以及Jenkins有哪些具体的应用呢?
  • 2023年数学建模:参数估计与假设检验:自助法(Bootstrap)详解
  • 华为OD机试真题 Java 实现【字符串通配符】【2022Q4 200分】
  • Android 11.0 user模式下解除系统进入recovery功能的限制
  • TDEngine3.0 环境安装、配置及使用经验总结
  • Redis7实战加面试题-高阶篇(Redlock算法和底层源码分析)
  • 保持Git历史提交整洁,解决冲突
  • CompletableFuture使用详解,多线程相关
  • (3)NUC980 kenerl编译
  • 华为OD机试真题 Java 实现【分奖金】【2022Q4 100分】
  • 迅为国产化RK3588开发板在安防前后端应用解决方案
  • Windows 安装 GCC
  • 下载安装LabVIEW
  • 从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
  • Java NIO-非阻塞I/O(二)
  • PaaS平台iuap——数智底座支撑企业的全球化业务拓展