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
    +关注

    关注

    146

    文章

    17167

    浏览量

    351392
  • modem
    +关注

    关注

    0

    文章

    102

    浏览量

    37605
  • RS232
    +关注

    关注

    13

    文章

    748

    浏览量

    94382
收藏 人收藏

    评论

    相关推荐

    多频点焊控制器的创新应用与优势分析

    随着工业自动化威廉希尔官方网站 的不断进步,焊接威廉希尔官方网站 作为制造业中的重要环节,也在不断地寻求创新与发展。多频点焊控制器作为一种新兴的威廉希尔官方网站 ,以其独特的性能和广泛的应用前景,在焊接领域引起了广泛关注。本文
    的头像 发表于 12-17 11:02 136次阅读
    多频点焊<b class='flag-5'>控制器</b>的创新应用与优势<b class='flag-5'>分析</b>

    UART、SPI、I2C、CAN、RS485、RS232、RS422通信协议总结

    一、UART协议 1.UART简介 通用异步收发,是一种通用的串行、异步通信总线,该总线有两条数据线,可以实现全双工的发送和接收在嵌入式系统中常用于主机与辅助设备之间的通信。 2.UART
    的头像 发表于 11-16 10:09 2724次阅读

    瞬态响应与纹波——迟滞控制器中使用的纹波注入威廉希尔官方网站 分析

    电子发烧友网站提供《瞬态响应与纹波——迟滞控制器中使用的纹波注入威廉希尔官方网站 分析.pdf》资料免费下载
    发表于 10-09 14:34 0次下载
    瞬态响应与纹波——迟滞<b class='flag-5'>控制器</b>中使用的纹波注入<b class='flag-5'>威廉希尔官方网站
</b><b class='flag-5'>分析</b>

    在ESP8266中使用RTS线路时遇到的疑问求解

    我在ESP8266中使用 RTS 线路时遇到了一些问题(AT 版本:1.4.0.0,SDK 版本:2.1.0),基本上它永远不会激活。 Handhsake 已正确启用 CTSRTS,并且
    发表于 07-16 07:53

    使用system_uart_swap函数屏蔽ESP8266上电UART0打印不成功的原因?

    ) { /********************************************************************************** * system_uart_swap()* * UART0 转换。将 MTCK 作为
    发表于 07-11 08:18

    ESP8266是否支持RTS/CTS机制?

    不会发送 RTS 报文来请求 chennel。 8266是否支持RTS/CTS机制?如果是这样,哪个API可以打开它?
    发表于 07-10 08:27

    如何在UART0上使用RTS/CTS和ESP8266?

    使用此连接设置时,AT 命令无法到达调制解调(我们已经验证了在调制解调中启用了硬件流控制,也在 ESP 中启用了 - uart.h) 如何在
    发表于 07-10 08:13

    ESP8266如何将uart0的txd和rxd交换到其他引脚?

    对此敏感的应用,可以使用 UART 的内部引脚交换功能,在初始化的时候,将 U0TXD、U0RXD 分 别与 U0RTS(MTDO),U0CTS(MTCK) 交换,间接屏蔽上电时期的打印输出。 根据
    发表于 07-08 07:56

    启用了硬件的流控RTSCTS, 出现esp-modem: HW FIFO Overflow是什么原因导致的?

    , .flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS , .rx_flow_ctrl_thresh = 122 //UART_FIFO_LEN -8 }; MODEM_CHECK
    发表于 06-25 06:08

    如何设置rts frame的duration?

    我有一个系统一个ap和数个sta. STA每隔8毫秒发个udp包。可以通过wireshark抓包发现,每个sta都会先发一个rts包,其中duration为156毫秒。这样其他sta和ap在156毫秒内就不发包了。请问如何设置这个duration值,或者直接停止发送rts
    发表于 06-24 06:48

    PID控制器与PWM控制器的区别

    在工业自动化和控制系统设计中,PID控制器(比例-积分-微分控制器)和PWM控制器(脉冲宽度调制控制器)是两种常用的
    的头像 发表于 06-05 18:25 3222次阅读

    USART上对应RTS的GPIO引脚不需要定义吗?

    = USART_HardwareFlowControl_None; 改成下面三种即可实现硬件流控制。 USART_HardwareFlowControl_RTS USART_HardwareFlowControl_CTS
    发表于 04-25 08:05

    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