【整理】串口(RS232/RS485等)通讯中RTS/CTS,DTR/DSR的含义详解

2023-11-13

【整理】串口(RS232/RS485等)通讯中RTS/CTS,DTR/DSR的含义详解

RS232 crifan 7年前 (2013-10-17) 14942浏览 0评论
 

【背景】

之前就折腾过很多关于RTS/CTS,DTR/DSR的内容:

【整理】RTS/CTS,DTR/DSR的区别

【整理】RS232 RTS/CTS的流控制的具体过程/机制

【整理】HART协议中串口配置和Handshake(RTS/CTS等)

但是至今还是觉得,没有彻底明白,还有有一点点迷惑。

现在重新去整理相关知识。

 

【折腾过程】

1.参考:

What is the difference between DTR/DSR and RTS/CTS flow control?

先贴出缩写的含义:

  • DTR – Data Terminal Ready
  • DSR – Data Set Ready
  • RTS – Request To Send
  • CTS – Clear To Send

对应的相关的其他术语还有:

  • DCE:Data Communication Equipment,可以理解为:数据的发起发
  • DTE:Data Terminal Equipment,可以理解为:数据的接收方

然后了解到:

 

The difference between them is that they use different pins. Seriously, that’s it. The reason they both exist is that RTS/CTS wasn’t supposed to ever be a flow control mechanism, originally; it was for half-duplex modems to coordinate who was sending and who was receiving. RTS and CTS got misused for flow control so often that it became standard.

 

RTS/CTS和DTR/DSR,是用的物理引脚是不同的;

而关于DTR/DSR和RTS/CTS共存(没有统一只使用单个的一组硬件引脚(要么用RTS/CTS,要么用DTR/DSR)去实现流控制)的原因是:

背景是:

最开始先出现的RTS/CTS,但是设计出RTS/CTS的初衷,即原先的目的,就不是把RTS/CTS去用来当做流控制的

-> 而是用来:去协调两个半双工(工作模式下的)的猫modem之间的通讯

-> 不至于让两个半双工的modem,在通讯时,互相掐架,互相抢占数据通道,互相同时要么都要发送数据,要么都要接受数据,由此而容易导致混乱和(总线上的)数据异常

-> 但是结果,(被设计用于协调两个两个半双工的modem之间的通讯的)RTS/CTS,结果被大家误用,误当做(后来大量出现和使用的,全双工的串口等设备中的)流控制

-> 即,对于都是全双工的两个串口来说:

计算机(上面的串口) <-> (开发板或其他设备上面的)串口

分别对应着的概念是:

DCE <-> DTE

此处,分别叫做:

数据发送方 <-> 数据接收方

此处,暂且叫做:

串口A <-> 串口B

此时就是:

A打算发送数据到B中

A设置RTS(Request To Send),表示:请求发送(数据到对方)

此时:

  • 正常情况下,数据接收方,B不忙的时候,即不是busy的状态,则:
    • B去设置对应的CTS(Clear To Send):
    • 两种理解,不确定是哪种:
      • 清除(发送者A之前的设置的RTS),表示可以接受数据了
      • Clear表示OK,清楚,明白,意思是明白对方的意思了,表示对方可以发送数据了
    • -> 发送者A,就可以直接去发送数据给B了,B也就可以去接受数据,处理收到的数据了;
  • 偶尔特殊的时候,处于忙的状态,即busy,比如忙着处理上次发送的数据呢,所以没空理会你这次还要发的数据:
    • 那么此时就是:不去设置对应的CTS,表示自己忙,来不及处理你将要发送的数据
    • -> 数据发送者A,见状,就继续检测CTS,直到(数据接受者B,忙清了自己手上的活,有空接受数据了,然后)CTS被接受者B去设置对应的CTS,表示可以接受数据了,然后A才去发送数据给B

 

2.参考:

RTS/CTS

中,又进一步了解到:

DTR/DSR,主要是用来做:

建立链接

 

即:

数据发送和接受之前,先要建立A和B的连接

这时候,才用到DTR/DSR

 

3.参考:

RS232 serial null modem cable wiring

目前来说:

还是没有完全明白作者解释的几种连线方式。

我们目前所常见的,遇到的,都是DB9的两个端口,直接相接。

感觉应该是:

Null modem with partial handshaking

即:

A的RTS,CTS,分别接B的CTS,RTS

A的Tx,Rx,分别接B的Rx和Tx

 

但是,感觉,普通的DB9直接接DB9的话,应该是:

A的RTS,CTS,分别接B的RTS,CTS

A的Tx,Rx,分别接B的Rx和Tx

 

看了别的一些资料:

RS232串口通信基本接线方法

RS-232接线

也是各种接法都有。

目前还是不太确定如何接的。

4.其他一些参考资料:

RS232 Data Interface

Introduction to Serial Communications

The RS232 STANDARD

RS232 Specifications and standard

5.后来是看了:

RS232 Specifications and standard

后,又进一步的搞懂了一些内容:

之前的那套逻辑:

A设置RTS表示要发送数据给B,而B设置CTS表示可以接受数据,通知A发送数据给B,A就开始去真正的发送数据给B了

的背景是:

硬件连接是:

A的RTS<->B的RTS

A的CTS<->B的CTS

对应的

A一般是计算机PC

B一般是接在PC上的一个modem猫

 

对应的,A要发送数据给B的执行过程是:

  1. A设置A的RTS:表示要发数据给B;
  2. A检测A的CTS:
    • 如果A的CTS是被设置了,那说明B设置了B的CTS
      • 表示B可以接受数据了
        • A就去发送数据给B了
    • 如果A的CTS没被设置,那说明B没有去设置B的CTS
      • 说明B还出于busy忙的状态
        • 等B忙清了,再去设置B的CTS
          • 此时A才能检测到A的CTS,是被设置了,才能发送数据给B

 

而如果交叉连接:

A的RTS<->B的CTS

A的CTS<->B的RTS

则就变成了其所说的:

非猫连接(null modem connection)(模式)

此时:

A的RTS,就不是:A用来通知B,A要发送数据(给B)了

就变成了:

A用于指示(告诉)B,A是否可以接受数据

即:

A的RTS,由于连着B的CTS,所以如果A直接检测到A被设置了

那么说明B已经设置了B的CTS(就传到了对应的A的RTS),此时A就可以直接通过检测A的RTS,而判断出B是否可以接受数据

 

所以就是从:

物理上RTS/CTS直连:

A的RTS<->B的RTS

A的CTS<->B的CTS

的:

A想要发送数据给B之前:需要两个步骤:(1)去设置一次A的RTS,(2)并且通过检测A的CTS,去判断是否可以发送数据给B

变成了:

物理上RTS/CTS交叉连接:

A的RTS<->B的RTS

A的CTS<->B的CTS

的:

A想要发送数据给B之前:直接一个步骤就实现了:(1)直接检测A自己的RTS,即B的CTS,是否被设置,如果被设置了,直接发送数据

由此:

简化了数据发送前的执行步骤,提高了数据传输的效率

当然,当:

物理上RTS/CTS交叉连接

时,对应的软件的流控制协议,也要根据上述的逻辑,去做对应的改动;

 

 

【总结】

1.RTS/CTS之间协调工作,实现流控制的逻辑,目前的理解是:

对于都是全双工的两个串口来说:

计算机(上面的串口) <-> (开发板或其他设备上面的)串口

分别对应着的概念是:

DCE <-> DTE

此处,分别叫做:

数据发送方 <-> 数据接收方

此处,暂且叫做:

串口A <-> 串口B

此时就是:

A打算发送数据到B中

A设置RTS(Request To Send),表示:请求发送(数据到对方)

此时:

  • 正常情况下,数据接收方,B不忙的时候,即不是busy的状态,则:
    • B去设置对应的CTS(Clear To Send):
    • 两种理解,不确定是哪种:
      • 清除(发送者A之前的设置的RTS),表示可以接受数据了
      • Clear表示OK,清楚,明白,意思是明白对方的意思了,表示对方可以发送数据了
    • -> 发送者A,就可以直接去发送数据给B了,B也就可以去接受数据,处理收到的数据了;
  • 偶尔特殊的时候,处于忙的状态,即busy,比如忙着处理上次发送的数据呢,所以没空理会你这次还要发的数据:
    • 那么此时就是:不去设置对应的CTS,表示自己忙,来不及处理你将要发送的数据
    • -> 数据发送者A,见状,就继续检测CTS,直到(数据接受者B,忙清了自己手上的活,有空接受数据了,然后)CTS被接受者B去设置对应的CTS,表示可以接受数据了,然后A才去发送数据给B

2.但是对于目前常见的,直接两个DB9的串口直接相连,物理上对应的引脚的接法:

估计是:

A的RTS,CTS,分别接B的RTS,CTS

A的Tx,Rx,分别接B的Rx和Tx

3.目前对于DTR/DSR的理解:

主要是用来做:建立链接

即:

数据发送和接受之前,先要建立A和B的连接

这时候,才用到DTR/DSR

转载请注明:在路上 » 【整理】串口(RS232/RS485等)通讯中RTS/CTS,DTR/DSR的含义详解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【整理】串口(RS232/RS485等)通讯中RTS/CTS,DTR/DSR的含义详解 的相关文章

随机推荐

  • 程序员绩效总结_程序员吐槽,绩效工资与bug数量挂钩,网友:那就别敲代码

    近日 一个程序员提了一个问题 引起热议 该程序员表示 绩效跟bug数量挂钩合理吗 bug多就扣工资 连续几个月的话还辞退 对此 很多网友都认为完全不合理 如果是这样的话 那不敲代码岂不是就没有bug了 这完全有种为辞退找理由嘛 有句俗话说得
  • Linux系统中部署软件

    目录 1 Mysql 2 Redis 3 ZooKeeper 声明 致谢 1 Mysql 参考 CentOS7安装MySQL 补充 执行 rpm import https repo mysql com RPM GPG KEY mysql 2
  • node学习—validate数据库验证

    数据库验证 一 数据库验证 一 数据库验证 service studentService const Student require models Student const Op require sequelize const Class
  • STM32对接涂鸦wifi模块项目记录(智能插座完善版本)

    应项目需求 客户需要对接涂鸦平台 从了解平台到样品实际落地 还是挺方便的 做过的一个项目 人体感应智能插座项目 对接涂鸦云 硬件平台 STM32F103 WIFI模块 涂鸦WiFi 型号见文章说明 云平台 涂鸦云 更新项目原理图部分说明 更
  • Linux nmcli控制NetworkManager的命令行工具

    RHEL7 与 CentOS 7 以上的版本中默认的网络服务由 NetworkManager 提供 简称NM 这是动态控制及配置网络的守护进程 它用于保持当前网络设备及连接处于工作状态 同时也支持传统的 ifcfg 类型的配置文件 Netw
  • 盘点俄罗斯程序猿写的几款软件,你用过几个?最后1个是我的童年

    1 7zip 7 Zip 作者 abhishek prakash 是一款 开源 的 免费 软件 大多数源代码都基于 GNU LGPL 许可协议下发布 部分代码基于 BSD 3 句条款 BSD 3 clause 许可协议发布 可以在任何一台计
  • java private 构造函数_java-构造函数是否必须总是公开的?

    java 构造函数是否必须总是公开的 这个问题已经在这里有了答案 java中private构造函数的用法是什么 10个答案 我的第一个问题是 class Explain public Explain 构造函数应始终声明为公共吗 如果我创建2
  • Nginx 解决做反向代理时 静态资源图片、 js、css 访问不到

    在反向代理时添加另一个规则 反向代理 location proxy pass http localhost 9001 解决js css 访问不到的问题 location proxy pass http localhost 9001 prox
  • Lua 学习笔记:沙盒

    背景知识 Lua 给我的感觉是 各种内置函数和标准库的存在感都是比较强的 如果执行这句 for name in pairs G do print G end 就会把各种环境中已存在名称的打印出来 全局变量 比如字符串 VERSION 内置函
  • Linux系统简介和各发行版介绍

    一 Linux 简介 二 Linux和UNIX的关系及区别 UNIX 的发展历史 Linux 和 UNIX 的关系 区别 三 Linux 的发行版介绍 Linux各发行版简介 Debian 以社区的方式运作 Redhat 商业公司维护的发行
  • 使用 OpenSSL API 建立安全连接 - 双向认证

    使用 OpenSSL API 进行安全编程 一 概念 1 什么是 SSL SSL 是一个缩写 全称是 Secure Sockets Layer 它是支持在 Internet 上进行安全通信的标准 并且将数据密码术集成到了协议之中 数据在离开
  • mybatis log插件

    目前idea当中已经实施收费了 最近找了一个不收费的插件安装上重启一下就行了 点我下载提取码 sjc8
  • 如何提取视频的m3u8地址

    1 用360浏览器或者其他Chrome内核浏览器打开优酷网页 2 在播放页面按F12打开审核模式 3 点击如图图标模拟移动设备 4 设置模拟的设备 5 按F5刷新即可进入手机版网页 6 点击Network 7 点击Media 8 点击播放按
  • 2017年蓝桥杯B组C/C++省赛-分巧克力

    题目 题目链接 题解 二分 想到二分比实现二分要难点 可行解部分可以与不可行解部分完美地分隔开来 绿色部分是分成的巧克力比较小时都可以满足 而大于一定程度的时候就不可行了 所以可以将其抽象成小于可行 大于不可行的二分问题 在判断时 遍历全部
  • JAVA的分支结构

    分支结构 基本概述 当需要进行条件判断的时候 并且根据条件是否成立来执行某一段代码的时候 需要分支结构 1 if结构 if 布尔表达式 语句块 如果布尔表达式为true将执行的语句 如果布尔表达式的值为 true 则执行 if 语句中的代码
  • 四大私募量化策略解析——阿尔法、套利、期货CTA、高频交易

    近年来 随着证券市场规模的不断扩大 金融衍生产品不断推出 投资策略和盈利模式发生根本性改变 投资复杂程度日益提高 导致证券市场投资者的构成比例出现了相应的变化 专业投资管理人的占比越来越大 且有加速之势 另一方面 量化对冲投资策略以其中低风
  • Unity制作FPS Demo

    等到把这个Unity FPS Demo 僵尸杀手 完成后再详细补充一下 使用Unity制作FPS游戏的经历 今天做个标识
  • 算法入门Bu1:排序

    算法入门 BuBuBu 相关数据结构 栈 队列 链表 树 并差集 堆 图等 相关算法 排序 枚举 深度和广度优先搜索 图的遍历 图中最短路径算法 最小生成树算法 割点和割遍算法 二分图的最大匹配算法等 排序算法 简单的桶排序 特点 如果需要
  • Java HashMap底层实现

    HashMap 是 Java 使用频率最高的用于映射 键值对 处理的数据类型 JDK1 8 对 HashMap 底层的实现进行了优化 例如引入红黑树的数据结构和扩容的优化等 在JDK1 8以前HashMap是由数组 链表的数据结构组成的 J
  • 【整理】串口(RS232/RS485等)通讯中RTS/CTS,DTR/DSR的含义详解

    整理 串口 RS232 RS485等 通讯中RTS CTS DTR DSR的含义详解 RS232 crifan 7年前 2013 10 17 14942浏览 0评论 背景 之前就折腾过很多关于RTS CTS DTR DSR的内容 整理 RT