嵌入式 - UART Flow Control

news2024/11/25 20:18:22

简介 / Introduction

UART 流量控制是一种让慢速和快速设备通过 UART 相互通信而不会丢失数据的方法。

考虑两个设备通过 UART 通信的情况。发送器 T 正在向接收器 R 发送一长串字节。R 是一个比 T 慢的设备,在某些时候 R 无法跟上。它需要对数据进行一些处理或清空一些缓冲区,然后才能继续接收数据。

R 需要告诉 T 暂时停止传输。这就是流量控制的作用。 流量控制提供额外的信令,通知发送器应该停止(暂停)或开始(恢复)传输。

目前存在几种形式的流量控制。例如,硬件流量控制使用额外的导线,这些导线上的逻辑电平决定发送器是继续发送数据还是停止发送。在软件流量控制中,通过正常数据线发送特殊字符来启动或停止传输。

UART Flow Control is a method for slow and fast devices to communicate with each other over  UART without the risk of losing data.

Consider the case where two units are communicating over UART. A transmitter T is sending a  long stream of bytes to a receiver R. R is a slower device than T, and at some point R cannot keep up. It needs to either do some  processing on the data or empty some buffers before it can keep receiving data.

R needs to tell T to stop transmitting for a while. This is where flow control comes in.  Flow control provides extra signaling to inform the transmitter that it should stop (pause) or start (resume) the transmission.

Several forms of flow control exist. For example, hardware flow control uses extra wires,  where the logic level on these wires define whether the transmitter should keep sending data or stop. With software flow control,  special characters are sent over the normal data lines to start or stop the transmission.

流控协议 / Flow Control Protocols

下面来介绍实现流控的常用方法。

  • UART Hardware Flow Control / 硬件流控

使用硬件流量控制(也称为 RTS/CTS 流量控制)时,除了数据线外,还需要两条额外的导线。它们分别称为 RTS(请求发送)和 CTS(清除发送)。这两条线在两台设备之间交叉耦合,因此一台设备上的 RTS 连接到远程设备上的 CTS,反之亦然。每台设备都将使用其 RTS 输出是否准备好接受新数据,并读取 CTS 查看是否允许向另一台设备发送数据。

只要设备准备好接受更多数据,它就会保持 RTS 线路的有效状态。设备会在其接收缓冲区满之前的一段时间清除RTS有效状态。线路上和其他设备发送寄存器中可能仍有数据,即使在 RTS 终止后仍需接收。其他设备必须尊重流量控制信号并暂停传输,直到 RTS 信号再次有效。

With hardware flow control (also called RTS/CTS flow control), two extra wires are needed  in addition to the data lines. They are called RTS (Request to Send) and CTS (Clear to Send). These wires are cross-coupled between the  two devices, so RTS on one device is connected to CTS on the remote device and vice versa. Each device will use its RTS to output  if it is ready to accept new data and read CTS to see if it is allowed to send data to the other device.

As long as a device is ready to accept more data, it will keep the RTS line asserted. It  will deassert RTS some time before its receive buffer is full. There might still be data on the line and in the other device transmit  registers which has to be received even after RTS has been deasserted. The other device is required to respect the flow control signal and pause  the transmission until RTS is again asserted.

流量控制是双向的,这意味着两个设备都可以请求停止传输。 如果其中一个设备无需请求停止传输(即它的速度足够快,总是能接收到数据),则另一个设备上的 CTS 信号可以绑定到有效状态的逻辑电平。这样,快速设备上的RTS引脚就可以用于其他功能。

The flow control is bidirectional, meaning both devices can request a halt in transmission.  If one of the devices never has to request a stop in transmission (i.e. it is fast enough to always receive data), the CTS signal on the  other device can be tied to the asserted logic level. The RTS pin on the fast device can thus be freed up to other functions.

如下实际波形表示了硬件流控的时序:

1,本地设备将RTS信号拉低,是为有效,然后对端设备发送数据,本地设备的RX信号线上接收到数据。

2,当本地设备不想接收数据了,就将RTS信号拉高,然后对端设备发送完缓冲区里的数据后,就不再发送数据了。

Hardware Flow Control Example: After a certain time the receiver deasserts RTS and the  transmitter responds by pausing transmission.

  • Legacy Hardware Flow Control / 早期硬件流控

在谈论硬件流量控制时,一个容易引起混淆的问题是,不同的协议使用相同的名称。硬件流量控制有时指另一种流量控制方法。在本文中,我们将把第二种方法称为传统硬件流控制,以区别于上面的硬件流控制中讨论的类型。之所以使用传统这个名称,是因为这种方法实际上是实现流量控制的早期方法。

A point of confusion when talking about hardware flow control is that the same names are  used for different protocols. Hardware Flow Control sometimes refer to another method for flow control. In this document we shall refer  to this second method as legacy Hardware Flow Control to differentiate it from the type discussed in above-mentioned Hardware Flow Control. The  name legacy is used because this method was actually the early method of implementing flow control.

传统硬件流量控制仍然使用名为 RTS 和 CTS 的两条额外导线,但功能略有不同。在这种方案中,流量控制是单向的,存在主/从关系。传统上,主站和从站被称为 DTE(数据终端设备)和 DCE(数据通信设备)。当主设备要向从设备传输数据时,它会使能RTS线路的信号。从属设备通过使能CTS信号作出响应。然后就可以进行传输,直到从属设备取消CTS有效信号,表示需要暂时停止传输。当主站完成整个信息的传输后,它将取消RTS有效信号。

Legacy Hardware Flow Control still uses two extra wires named RTS and CTS, but the  functionality is slightly different. In this scheme the flow control is unidirectional and there is a master/slave relationship (traditionally  the master and slave are referred to as DTE (Data Terminal Equipment) and DCE (Data Communications Equipment)). When the master wants to  transmit data to the slave it asserts the RTS line. The slave responds by asserting CTS. Transmission can then occur until the slave  deasserts CTS, indicating that it needs a temporary halt in transmission. When the master has finished transmitting the entire  message it will deassert RTS.

传统RTS / CTS 流量控制是 RS232 标准的另一种流量控制机制。它利用 RS232 连接器上的两个引脚 RTS(请求发送)和 CTS(清除发送)。这两条线允许接收器和发送器相互提醒对方自己的状态。

发送器使能 RTS信号,会导致接收器产生中断,即 "嘿,我能发送一些数据吗?“ 

如果接收器可以接收数据,则会使能其 CTS信号,即 "可以开始发送了"。

RTS / CTS Flow Control is another flow control mechanism that is part of the RS232 standard. It makes use of two further pins on the RS232 connector, RTS (Request to Send) and CTS (Clear to Send). These two lines allow the receiver and the transmitter to alert each other to their state.

A transmitter raises its RTS line, which causes an interrupt on the receiver, I.e. – “Hey can I send some data”? If the receiver is in a position to receive the data it will assert its CTS line, I.e. – “Yes you can start sending”.

  • UART Software Flow Control / UART软件流控

软件流量控制不使用额外的导线。只需要 3 根导线(RX、TX 和 GND)。 通过发送特殊的流量控制字符来启动和停止传输。流量控制字符通过正常的 TX 和 RX 线路发送。流量控制字符通常是 ASCII 码 XON 和 XOFF(0x11 和 0x13)。如果设备 A 向设备 B 发送 XOFF,则表示 B 应停止向 A 传输数据,直到 B 收到来自 A 的 XON 字符。

Software flow control does not use extra wires. Only 3 wires are required (RX, TX, and GND).  Transmission is started and stopped by sending special flow control characters. The flow control characters are sent over the  normal TX and RX lines. The flow control characters are typically the ASCII codes XON and XOFF (0x11 and 0x13). If device A sends XOFF to device  B it means that B should halt transmission to A until B receives an XON character from A.

其他说明

1,UART驱动的支持

使用USB-to-UART bridge设备,在PC上打开串口工具,和外设通过UART进行通讯。进行软件或硬件流控的话,需要串口驱动支持才行。

需要确认外设的UART 驱动程序是否支持UART 硬件流量控制(CTS/RTS),以及是否支持软件流量控制(XON/XOFF)。

如果UART 驱动程序支持硬件流控,将使能RTS信号以开始接收新数据,并在接收完成后取消RTS有效状态。此外,UART 驱动程序还将在发送数据前读取 CTS信号,以确定是否允许向其他设备发送数据。

The UART driver will assert RTS to start to receive new data, and deassert RTS after receiving is complete. Also the UART driver will  read CTS before sending data to see if it is allowed to send data to the other device.

2,关于硬件流控RTS/CTS信号有效时的电平

在使用了硬件流控的芯片手册上,标注的是低有效。

这样如果不使用硬件流控的时候,直接将CTS接地或者不接悬空即可,更加方便一些。

RTS的话,应该不用管,但也可以接地或不接。

参考:

1,SILICON LABS

AN0059.0: UART Flow Control

https://www.silabs.com/documents/public/application-notes/an0059.0-uart-flow-control.pdf

2,brainboxes

What is RTS / CTS Hardware Flow Control? - Brainboxes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1433635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目02《游戏-07-开发》Unity3D

基于 项目02《游戏-06-开发》Unity3D , 接下来做UI框架的逻辑系统,管理器和UI背包, 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs , 双击BasePanel.cs脚本修改代码: using UnityEngine; pu…

基于Java SSM框架实现网上租车系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现网上租车系统演示 摘要 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多商家的之中,随之就产生了“网上租车系统”,这样就让网上租车系统更加方便简单。 对于本网上…

架构篇33:传统的可扩展架构模式-分层架构和SOA

文章目录 分层架构SOA小结相比于高性能、高可用架构模式在最近几十年的迅猛发展来说,可扩展架构模式的发展可以说是步履蹒跚,最近几年火热的微服务模式算是可扩展模式发展历史中为数不多的亮点,但这也导致了现在谈可扩展的时候必谈微服务,甚至微服务架构都成了架构设计的银…

Undertow使用详解

简介 Undertow是一个开源的、灵活的、高性能的非阻塞性应用服务器,由JBoss提供。它可以用作嵌入式服务器,也可以用作大型项目的全功能应用服务器。Undertow的设计以提供最高的性能和最大的灵活性为主要目标,支持非阻塞性和阻塞性处理方式&…

乐意购项目前端开发 #6

一、商品详情页面 代码模版 创建Detail文件夹, 然后创建index.vue文件 <script setup> import { getDetail } from "/api/goods/index"; import { ref, onMounted } from "vue"; import { useRoute } from "vue-router"; import { useCar…

手写分布式存储系统v0.3版本

引言 承接 手写分布式存储系统v0.2版本 &#xff0c;今天开始新的迭代开发。主要实现 服务发现功能 一、什么是服务发现 由于咱们的服务是分布式的&#xff0c;那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是&#xff0c;张三家…

《大魔界村》中的人物性格——亚瑟

《大魔界村》作为一款经典的街机动作游戏,其主角——勇敢的骑士亚瑟,以其独特的性格特点和坚定的信念,在玩家心中留下了深刻印象。本文将深入探讨亚瑟这一角色的性格特质,通过分析他在游戏中的行为表现及决策过程,展现他身上的勇气、坚韧与智慧三大要点。 一、无畏挑战的…

全套电气自动化样例图纸分享,使用SuperWorks自动化版免费设计软件!

今天给大家分享一套完备的电气自动化样例图纸&#xff0c;结构准确、内容清晰&#xff0c;适合初学者入门操作练习。 整套图纸包含图纸目录、原理图、端子列表、连接列表、元件列表、接线图&#xff0c;具有较高的参考价值&#xff0c;请大家点击自行下载文件&#xff01; 1e8…

【51单片机】直流电机实验和步进电机实验

目录 直流电机实验直流电机介绍ULN2003 芯片介绍硬件设计软件设计实验现象 步进电机实验步进电机简介步进电机的工作原理步进电机极性区分双极性步进电机驱动原理单极性步进电机驱动原理细分驱动原理 28BYJ-48 步进电机简介软件设计 橙色 直流电机实验 在未学习 PWM 之前&…

出海企业应用CRM系统可行吗?有哪些好处?

近年来许多企业都涌现出了出海需求&#xff0c;在不同国家设置了办事处。企业在管理业务和客户时&#xff0c;不可避免用到CRM管理系统。对于这样的跨国企业&#xff0c;是否有一个CRM系统可以满足其需求&#xff1f;——答案是有的&#xff0c;这篇文章将为您介绍跨国协作CRM的…

Palworld幻兽帕鲁自建服务器32人联机开黑!

玩转幻兽帕鲁服务器&#xff0c;阿里云推出新手0基础一键部署幻兽帕鲁服务器教程&#xff0c;傻瓜式一键部署&#xff0c;3分钟即可成功创建一台Palworld专属服务器&#xff0c;成本仅需26元&#xff0c;阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

Java实现康复中心管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

vue项目中的 package.json 的文件是什么

在 Vue.js 项目中&#xff0c;package.json 文件是一个 JSON 文件&#xff0c;用于存储项目的元数据和依赖关系。这个文件应该位于项目的根目录下。 以下是一个简单的 package.json 文件示例&#xff1a; {"name": "my-vue-project","version"…

MySQL进阶45讲【10】MySQL为什么有时候会选错索引?

1 前言 前面我们介绍过索引&#xff0c;在MySQL中一张表其实是可以支持多个索引的。但是&#xff0c;写SQL语句的时候&#xff0c;并没有主动指定使用哪个索引。也就是说&#xff0c;使用哪个索引是由MySQL来确定的。 大家有没有碰到过这种情况&#xff0c;一条本来可以执行得…

【爬虫实战】全过程详细讲解如何使用python获取抖音评论,包括二级评论

简介&#xff1a; 前两天&#xff0c;TaoTao发布了一篇关于“获取抖音评论”的文章。但是之前的那一篇包涵的代码呢仅仅只能获取一级评论。虽然说抖音的一级评论挺精彩的了&#xff0c;但是其实二级评论更加有意思&#xff0c;同时二级评论的数量是很多。所以二级评论是非常值…

springboot整合rabbitmq,及各类型交换机详解

RabbitMQ交换机&#xff1a; 一.交换机的作用 如果直接发送信息给一条队列&#xff0c;而这一消息需要多个队列的的多个消费者共同执行&#xff0c;可此时只会有一个队列的一个消费者接收该消息并处理&#xff0c;其他队列的消费者无法获取消息并执行。所以此时就需要交换机接…

c++ 语法多态

多态分为两类 静态多态&#xff1a;函数重载和运算符重载属于静态多态复用函数名 动态多态&#xff1a; 派生类和虚函数实现运行时多态。 静态多态和动态多态区别 静态多态的函数地址早绑定&#xff1a;编译阶段确定函数地址 动态多态函数地址晚绑定&#xff1a;运行阶段确…

esp8266 步骤

安装驱动 http://arduino.esp8266.com/stable/package_esp8266com_index.json oled库 esp8266-oled-ssd1306

01-Datahub是什么?

Datahub是LinkedIn开源的基于现代数据栈的元数据管理平台&#xff0c;原来叫做WhereHows 。经过一段时间的发展datahub于2020年2月在Github开源。 官网地址为&#xff1a;A Metadata Platform for the Modern Data Stack | DataHub 源码地址为&#xff1a;GitHub - datahub-p…

飞天使-k8s知识点12-kubernetes散装知识点1-架构有状态

文章目录 k8s架构图有状态和无状态服务 资源和对象对象规约和状态 资源的对象-资源的分类 k8s架构图 有状态和无状态服务 区分有状态和无状态服务有利于维护yaml文件 因为配置不同资源和对象 命令行yaml来定义对象对象规约和状态 规约 spec 描述对象的期望状态状态 status 对…