0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于UART 控制器的RTS/CTS技术分析

电子设计 来源:csdn 作者:zeroboundary 2021-05-17 11:35 次阅读

RS232 中本来 CTS 与 RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫(SmartModem)后就有点混淆了,不过现在这种意义为主流意义的,各大芯片制造厂家对 UART 控制器的流控基本采用 HAYES MODEM 流控解释。

RS232 中 RTS 与 CTS 是用来半双工模式下的方向切换,本文不解释;

如果 UART 只有 RX、TX 两个信号,要流控的话只能是软流控;如果有 RX,TX,CTS,RTS 四个信号,则多半是支持硬流控的 UART;如果有 RX,TX,CTS ,RTS ,DTR,DSR 六个信号的话,RS232 标准的可能性比较大。

SIMCOM 公司对 RTS/CTS 的解释:

(要注意区别是不是讲串口支持硬流控的 RTS/CTS,别看为益,在和瑞芯微调试硬件流控时,被这个非主流的解释搞得晕头转向的)

RTS 是模块的输入端,用于 MCU 通知模块,MCU 是否准备好,模块是否可向 MCU 发送信息,RTS 的有效电平为低。

CTS 是模块的输出端,用于模块通知 MCU,模块是否准备好,MCU 是否可向模块发送信息,CTS 的有效电平为低

HAYES Modem 中的 RTS ,CTS 是用来进 行硬件流控的。现在通常 UART 的 RTC、CTS 的含义指后者,即用来做硬流控的。

硬流控的 RTS、CTS:

(现在做串口使用 RTS/CTS 必看内容,因为 MTK/)

RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。

CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。

此处有人将 CTS 翻译为发送允许,我感觉的确比翻译为清除发送好。因为 CTS 是对方的 RTS 控制己方的 CTS 是否允许发送的功能。

用 AP 与 MODEM 采用流控收发串口数据举例:

CTS 为输入

RTS 为输出

AP 的 CTS 对接 MODEM 的 RTS;MODEM 的 CTS 对接 AP 的 RTS。

默认启动时:

AP 的 CTS 为高

AP 的 RTS 为低

MODEM 的 CTS 高 但极容易被拉低

MODEM 的 RTS 低

默认休眠时

MODEM 的 CTS 高 但极容易被拉低

MODEM 的 RTS 高

其中 CTS 用电压表测量电压时发现:在测量最初的大概 200ms 时,为高电平,然后电压值不断下降,变成低电平,这说明 CTS 悬空时应该为高,这中高电平仅仅是一定量的正电荷而已。

不知道芯片设计时,规格说明书为什么要写 CTS 默认为高,CTS 仅仅是输入端,不需要什么默认值啊。并且在流控打开情况下,不接 CTS 与 RTS,也是可以正常 3 根线(RXD/TXD/GND)通信的,这说明不接 RTS/CTS 时,CTS 为低电平才对。为何实际使用与芯片规格说明书不一致,可能是被外壳金属盖干扰到低电平了,毕竟自己用的模块,CTS 是如此靠近低电平的金属保护盖,并且 CTS 为输入口,没有上拉下拉电平能力。

AP 与 MODEM 的流控这样通信的:

AP 串口可用时,将 AP-RTS 拉低,MODEM-CTS 检测到 AP-RTS 为低,知道 AP 串口已准备好,可以发送数据;

AP 串口不可用时,将 AP-RTS 拉高,MODEM-CTS 检测到 AP-RTS 为高,知道 AP 串口还未准备好,就不会放数据。

MODEM 串口可用与不可用时的交互是同样道理。

没有串口控制器,用中断和普通 IO 口即可实现 RTS 与 CTS 功能。

RTS 用 GPIO 实现,串口就绪(无数据发送,等待接收)拉低电平,串口忙(自己有数据发送)拉高电平

CTS 用中断实现,检测到低电平,将串口数据发送出去,检测到高电平则保留串口数据直到检测到低电平为止。

下面是摘录网上有用的参考资料

假定 A、B 两设备通信,A 设备的 RTS 连接 B 设备的 CTS ;A 设备的 CTS 连接 B 设备的 RTS 。

前一路信号控制 B 设备的发送,后一路信号控制 A 设备的发送。对 B 设备的发送(A 设备接收)来说,如果 A 设备接收缓冲快满的时发出 RTS 信号(RTS 拉高,RTS 无效,告知对方停止发送),通知 B 设备停止发送,B 设备通过 CTS 检测到该信号,停止发送;一段时间后 A 设备接收缓冲有了空余,发出 RTS 信号(RTS 拉低,RTS 有效,请求发送),指示 B 设备开始发送数据。A 设备发(B 设备接收)类似。

上述功能也能在数据流中插入 Xoff(特殊字符)和 Xon(另一个特殊字符)信号来实现。A 设备一旦接收到 B 设备发送过来的 Xoff,立刻停止发送;反之,如接收到 B 设备发送过来的 Xon,则恢复发送数据给 B 设备。同理,B 设备也类似,从而实现收发双方的速度匹配。

半双工的方向切换:RS232 中使用 DTR(Date Terminal Ready,数据终端准备)与 DSR(Data Set Ready ,数据设备准备好)进行主流控,类似上述的 RTS 与 CTS 。对半双工的通信的 DTE(Date Terminal Equipment,数据终端设备)与 DCE(Data circuitEquipment )来说,默认的方向是 DTE 接收,DCE 发送。如果 DTE 要发送数据,必须发出 RTS 信号,请求发送数据。DCE 收到后如果空闲则发出 CTS 回应 RTS 信号,表示响应请求,这样通信方向就变为 DTE-》TCE,同时 RTS 与 CTS 信号必须一直保持。从这里可以看出,CTS ,TRS 虽然也有点流控的意思(如 CTS 没有发出,DTE 也不能发送数据),但主要是用来进行方向切换的。

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

这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。现在我们在网络上通过 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 字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符。

应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。

问题

1.UART 和 RS232 是什么关系?

UART(Universal Asynchronization Receviver/Transmite) 可以作为一种软件接口协议来看,包括 RS232、RS485RS422 等接口标准规范和总线标准规范,这些标准规定了接口的电气特性(如电平)、传输速率、连接特性等,实际上属于通信网络中的物理层的概念,与通信协议没有直接关系,通信协议一般属于链路层即 link 层的概念。

那么 RS232 和 TTL 的 uart 什么关系呢?都是 uart 协议,就像上述提到的,只是电气特性如电平不同。

2.UART 是全双工通信,为何需要 RTS 和 CTS 来控制方向呢?

在 uart 全双工通信中是不需要 RTS 和 CTS 的,二者只是用在半双工通信中,如 RS485.

3. 在很多芯片手册中,uart 支持 IrDA(红外)和 RS485 模式,支持 RS485 模式是什么概念呢?

在 SAM4S 芯片手册中,RS485 模式是如下这么描述的:

While operating in RS485 mode, the USART behaves as though in Async or Sync mode and configuration of all the parameters is possible 。

The difference is that the RTS pin is driven high when the transmitter is operating.

The RTS pin is controlled by TXEMPTY bit.

也就是说在 RS485 模式下,区别于正常模式在于当处于发送情况下,RTS 脚是拉高的,一旦发送结束(TXEMPTY 置位),RTS 拉低,通知对方可以发送数据,从而完成硬件自动流控。

下面图 1 为 SAM4S 的 RS485 模式连接图,图 2 为 i.MX6 的的 RS485 模式连接图。

4. 通常情况,串口起始位和停止位分别什么电平来表示?

起始位通常为低电平,用来同步;停止位为高电平,用来表示帧结束。

编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    145

    文章

    15986

    浏览量

    343319
  • modem
    +关注

    关注

    0

    文章

    97

    浏览量

    37413
  • RS232
    +关注

    关注

    13

    文章

    702

    浏览量

    93419
收藏 人收藏

    评论

    相关推荐

    CY7C65223-24LTXI不使用流量控制功能时,RTSCTS引脚是否应处于打开状态?

    请告诉我有关 CY7C65223-24LTXI 的引脚处理的信息。 不使用流量控制功能时,RTSCTS 引脚是否应处于打开状态?
    发表于 03-07 07:54

    CYW20719B2接收uart时意外重置是为什么?

    RTSCTS wiced_hal_puart_select_uart_pads ( #if 1 WICED_P04,//目标 #else WICED_PUART_RXD,//evboart
    发表于 03-01 13:51

    只要CTS引脚保持高电平,CYW20706上的BTSDK PUART驱动就会阻止整个系统,这准确吗?

    你好 我正在使用 CYBT-343026 (CYW20706) 上的 PUART 向具有 CTS/RTS 流量控制的主机 MCU 发送/接收数据。 主机 MCU 有时会通过长时间拉高 CYBT
    发表于 03-01 11:31

    uart与usart区别 usart可以当uart用吗

    USART实际上包含了UART的功能,并增加了支持同步通信的能力。在大多数微控制器中,UART通常是USART功能的一部分,USART可以配置为UART模式进行异步通信。
    发表于 01-17 15:46 3984次阅读
    <b class='flag-5'>uart</b>与usart区别 usart可以当<b class='flag-5'>uart</b>用吗

    RTS5411S USB3.1 4端口HUB控制器规格书

    RTS5411S是一款先进的USB3.1 4端口HUB控制器,将USB3.1和USB2.0收发器,MCU,SIE,稳压器和充电器电路集成到单个芯片中。这可以大大降低系统BOM成本。RTS5411S具有高兼容性,完全向后兼容USB
    发表于 09-14 15:29 38次下载

    TrafficLight:ARM FUSA RTS进程隔离示例FUSA RTS教程

    、意法半导体Nucleo-F429ZI和Nucleo-F746ZG。 然而,这些分析和原理大多是通用的,可以类似地应用于其他具有存储保护单元(MPU)的Cortex-M设备。 该示例项目是作为商业FUSA RTS交付成果的一部
    发表于 09-05 06:10

    M480系列微控制器通过PDMA接收UART数据的代码

    应用程序:M480系列微控制器(MCU)通过PDMA接收UART数据时使用这个示例代码。 BSP 版本: M480 BSP CMSIS V3.05.001 硬件: NuMaker-PFM-M487
    发表于 08-31 10:02

    M480系列微控制器通过PDMA接收UART数据时使用的示例代码

    应用程序:M480系列微控制器(MCU)通过PDMA接收UART数据时使用这个示例代码。 BSP 版本: M480 BSP CMSIS V3.05.001 硬件: NuMaker-PFM-M487
    发表于 08-31 09:18

    GP232RNL——USB到UART桥接控制器

    GP232RNL是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可以使用最少的元器件和PCB空间,将RS232接口转换为USB接口。GP232RNL包括一个USB 2.0全速
    的头像 发表于 07-06 01:35 336次阅读
    GP232RNL——USB到<b class='flag-5'>UART</b>桥接<b class='flag-5'>控制器</b>

    请问如何使用串口的/CTS来唤醒芯片?

    在初始化串口及/CTS功能之后,设定UA_IER寄存的WKCTSIEN (UART_INTEN[9])及MODEMIEN (UART_INTEN[3])。当/
    发表于 06-21 06:29

    imx6ull上的uart3和uart6是否支持rs485?

    uartctsrts pin。 所以你可以从附件中看到原理图。 我想确认我们的驱动程序是否可以支持此 rs485 逻辑。 我修改了 dts 但没有工作。流量控制引脚不受
    发表于 05-24 07:14

    kernel5.10的imx8mm uart dma无法接收数据怎么解决?

    IMX8MM_SYS_PLL1_80M>; fsl,uart-has-rtscts; 状态=“好的”; }; 我想知道我们以后应该检查哪里,以及RTS/CTS。连接硬件就可以了,还是需要软件来
    发表于 05-19 08:01

    CP2101-GM高度集成的USB到UART桥接控制器

    CP2101-GM是一款高度集成的USB到UART桥接控制器,提供了一种简单的解决方案,可使用最少的组件和PCB空间将RS-232设计更新为USB。
    发表于 05-18 15:19 193次阅读

    是否可以将“GPIO_AD_B0_08”用于UART1的RTS

    我很好奇 SetPinMux Configuration Essentials 的一个问题。 是否可以将“GPIO_AD_B0_08”用于 UART1 的 RTS?我知道参考手册说
    发表于 05-05 09:52

    CH32V103基础教程62-USART-硬件流控制

    本章教程主要通过UART1演示硬件流控制数据收发。将程序分别下载到两个开发板,同时上电进行数据传输。 1、USART简介及相关函数介绍在硬件流控制模式中,还需用到以下两个引脚:● CTS
    发表于 04-28 16:20