硬件:串口握手基础知识笔记

 RS-232通行方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。在这一部分,我们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和Xmodem。

  1、软件握手

  我们讨论的第一种握手是软件握手。通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。必须的线仍然是三根:Tx、Rx和地线,因为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使能或者禁止用户使用两个控制字符XON和OXFF。这些字符在通信中由接收方发送,使发送方暂停。

640?wx_fmt=jpeg

  例如:假设发送方以高波特率发送数据。在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。输入buffer半满时,LabWindows发送XOFF。此外,如果XOFF传输被打断,LabWindows会在buffer达到75%和90%时发送XOFF。显然,发送方必须遵循此守则以保证传输继续。

  2、硬件握手

  第二种是使用硬件线握手。和Tx和Rx线一样,RTS/CTS和DTR/DSR一起工作,一个作为输出,另一个作为输入。第一组线是RTS(RequesttoSend)和CTS(CleartoSend)。当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表示它即将发送数据。另一组线是DTR(DataTerminalReady)和DSR(DataSetReady)。这些现主要用于Modem通信。使得串口和Modem通信他们的状态。例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发送数据。一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。

640?wx_fmt=jpeg

  在LabWindows,函数SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下规则:当PC发送数据:RS-232库必须检测CTS线高后才能发送数据。

  当PC接收数据:

  如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。

  如果输入队列90%满,库函数置低RTS,但使DTR维持高电平。

  如果端口队列近乎空了,库函数置高RTS,但使DRT维持高电平。

  如果端口关闭,库函数置低RTS和DTR。

  3、XModem握手

  最后讨论的握手叫做XModem文件传输协议。这个协议在Modem通信中非常通用。尽管它通常使用在Modem通信中,XModem协议能够直接在其他遵循这个协议的设备通信中使用。在LabWindows中,实际的XModem应用对用户隐藏了。只要PC和其他设备使用XModem协议,在文件传输中就使用LabWindows的XModem函数。函数是XModemConfig,XModemSend和XModemReceive。

640?wx_fmt=jpeg

  XModem使用介于如下参数的协议:start_of_data、end_of_data、neg_ack、wait_delay、start_delay、max_tries、packet_size。这些参数需要通信双方认定,标准的XModem有一个标准的定义:然而,可以通过XModemConfig函数修改,以满足具体需要。这些参数的使用方法由接收方发送的字符neg_ack确定。这通知发送方其准备接收数据。它开始尝试发送,有一个超时参数start_delay;当超时的尝试超过max_ties次数,或者收到接收方发送的start_of_data,发送方停止尝试。如果从发送方收到start_of_data,接收方将读取后继信息数据包。包中含有包的数目、包数目的补码作为错误校验、packet_size字节大小的实际数据包,和进一步错误检查的求和校验值。在读取数据后,接收方会调用wait_delay,然后想发送方发送响应。如果发送方没有收到响应,它会重新发送数据包,直到收到响应或者超过重发次数的最大值max_tries。如果一直没有收到响应,发送方通知用户传输数据失败。

  由于数据必须以pack_size个字节按包发送,当最后一个数据包发送时,如果数据不够放满一个数据包,后面会填充ASCII码NULL(0)字节。这导致接收的数据比原数据多。在XModem情况下一定不要使用XON/XOFF,因为XModem发送方发出包的数目很可能增加到XON/OFF控制字符的值,从而导致通信故障。

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

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

相关文章

PyV8

待完善 pyv8是个js解析引擎, PyV8 是 V8 引擎的 Python 语言封装,这是 Python 和 JavaScript 对象之间的桥,支持在 Python 脚本中调用 V8 引擎。 # -*- coding: cp936 -*-import PyV8class Test():def js(self):ctxt PyV8.JSContext()ctxt.e…

抽象类能使用 final 修饰吗?

抽象类就是要被继承的,不能用final声明,final声明的类不可继承

python高斯求和_二、算法分析

一、什么是算法分析程序和算法的区别:算法是对问题解决的分步描述程序是采用某种编程语言实现的算法,同一个算法通过不同的程序员采用不同的编程语言,能产生很多程序算法分析的概念:算法分析主要就是从计算资源消耗的角度来评判和…

硬件:交换机基础知识

1、交换机的概念交换机(Switch)意为“开关”,是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交…

PhantomJS 与python的结合

待完善 一.简介 PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器 做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选…

mysql对数据库的操作_MySQL数据库对数据库的操作

1.创建数据库mysqlgt; create database if not exists tongcheng; Query OK, 1 row affected (0.01 sec) mysqlgt; 2.查看创建数1.创建数据库mysql> create database if not exists tongcheng;Query OK, 1 row affected (0.01 sec)mysql>2.查看创建数据库时的选项mysql&g…

static用途

static关键字的用途 一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)。 显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。 static可以用来修饰类的…

硬件:宽带猫(光猫)的基础知识

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

筛法求素数

一般&#xff1a; #include<stdio.h> int main() { int a[100], i, j; for(i 2; i < 100; i) a[i] 1;//令2-99都为1 for(i 2; i < 100/2; i)//2 - 到 范围的一半的所有倍数 { if(a[i] 1)//还未被筛 素数不会被筛 合数会被筛 …

mysql实用管理器添加外键_MySQL 添加外键

MySQL 添加外键MySQL 添加外键DROP TABLE IF EXISTS nation;CREATE TABLE nation(pii_Nation smallint(2) unsigned NOT NULL default 0,pii_NatinoName varchar(40) NOT NULL default ,PRIMARY KEY (pii_Nation))ENGINEInnoDB DEFAULT CHARSETutf8;DROP TABLE IF EXISTS user…

Sentinel介绍和Windows下安装Sentinel-dashboard

Sentinel 是什么&#xff1f; 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景&#xff1a;Sentinel 承接…

盘点物联网常用的八种通信协议

目录 1、蓝牙 2、Zigbee 3、6LoWPAN 4、Wi-Fi 6、ModBus 7、PROFINET 8、EtherCAT 1、蓝牙 兼容的蓝牙IoT传感器非常适合需要短距离连接和低功率通信的应用。蓝牙协议的有效范围为50到100米&#xff0c;支持高达1 Mbps的数据传输速率。 最近&#xff0c;物联网开发人员已经表现…

java 发邮件_java实现邮件的发送

文章所用jar文件链接&#xff1a;https://pan.baidu.com/s/1YaxhdkaCTC4TUDL-y9-ASQ提取码&#xff1a;30ow程序入口&#xff0c;发送工具类package test;import org.apache.commons.mail.EmailException;/*** 邮箱发送工具类* author Administrator**/public class EmailUtil …

软件工程与程序算法

软件工程包括需求分析、概要设计、详细设计、代码实现和维护五个部分。而具体的程序编码只占其中的一小部分。算法是在代码设计中的基础&#xff0c;提供了解决问题的方法。软件工程是应用计算机科学、数学及管理科学等原理&#xff0c;开发软件的工程。软件工程借鉴传统工程的…

docker安装Sentinel

1:拉取镜像&#xff1a;docker pull bladex/sentinel-dashboard 2:启动 docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard 3&#xff1a;访问 http://公网ip:8858 4&#xff1a;登录,用户名和密码都是sentinel

蓝牙技术的工作原理及用途

所谓蓝牙技术就是一种全球无线通讯标准&#xff0c;在一定距离内连接设备。目前&#xff0c;蓝牙技术也已应用到各个领域中&#xff0c;并已成为接入物联网&#xff08;IOT&#xff09;的主要技术。那关于蓝牙技术的工作原理本文将进行介绍&#xff0c;并概括其特点。蓝牙技术的…

什么是BusyBox?

BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具&#xff0c;例如 cat 和 echo&#xff0c;还包含了一些更大、更复杂的工具&#xff0c;例如 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀.简单的说BusyBox就好…

iOS十进制切割格式转换

//"123456789" 转换后 "123,456,789" interface NSString (num)- (NSString *)money;endimplementation NSString (num)- (NSString *)money{NSNumberFormatter *numFormat [[NSNumberFormatter alloc] init];[numFormat setNumberStyle:NSNumberFormatte…

同一接口有多个实现类,怎么来注入一个指定的实现?@Resource、@Autowired、@Qualifier

如果一个接口有2个以上不同的实现类, 那么如何Autowire一个指定的实现 1:首先,UserService接口有两个实现类 UserService1和 UserService2 UserService接口 2:以下是UserService接口的两个实现类UserService1和UserService2&#xff0c;请注意service注解的使用方式&#xff…

java类型比较_java 基本数据类型 ==和equals()比较

1.基本类型的存储Java 8种基本类型都是存储在堆栈中&#xff0c;例&#xff1a;int i 1;String str "hello world";也是存储在堆栈中。new基本类型的包装器类型和new String()都是存储在堆内存中。例Integer i new Integer(1);String str new String("hello…