RS -232通行方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。在这一部分,我们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和 Xmodem。
a,软件握手:我们讨论的第一种握手是软件握手。通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。必须的线仍然是三根:Tx, Rx和地线,因为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使能或者禁止用户使用两个控制字符XON和OXFF。这些字符在通信中由接收方发送,使发送方暂停。
例如:假设发送方以高波特率发送数据。在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。输入buffer半满时,LabWindows发送XOFF。此外,如果XOFF传输被打断,LabWindows会在buffer达到75%和 90%时发送XOFF。显然,发送方必须遵循此守则以保证传输继续。
b,硬件握手:第二种是使用硬件线握手。和Tx和Rx线一样,RTS/CTS和DTR/DSR一起工作,一个作为输出,另一个作为输入。第一组线是RTS (Request to Send)和CTS(Clear to Send)。当接收方准备好接收数据,它置高RTS线表示它准备好了,如果发送方也就绪,它置高CTS,表示它即将发送数据。另一组线是DTR(Data Terminal Ready)和DSR(Data Set Ready)。这些现主要用于Modem通信。使得串口和Modem通信他们的状态。例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发送数据。一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个数据包的传输。
在LabWindows,函数SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下规则:
当PC发送数据:
RS-232库必须检测CTS线高后才能发送数据。
当PC接收数据:
如果端口打开,且输入队列有空接收数据,库函数置高RTS和DTR。
如果输入队列90%满,库函数置低RTS,但使DTR维持高电平。
如果端口队列近乎空了,哭喊数置高RTS,但使DRT维持高电平。
如果端口关闭,库函数置低RTS和DTR。
c,XModem握手:最后讨论的握手叫做XModem文件传输协议。这个协议在Modem通信中非常通用。尽管它通常使用在Modem通信中, XModem协议能够直接在其他遵循这个协议的设备通信中使用。在LabWindows中,实际的XModem应用对用户隐藏了。只要PC和其他设备使用 XModem协议,在文件传输中就使用LabWindows的XModem函数。函数是XModemConfig,XModemSend和 XModemReceive。
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控制字符的值,从而导致通信故障。
分享到:
相关推荐
在逻辑设计领域,只涉及单个时钟域的设计并...尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信。异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同频不同相。
低速和全速设备可以通过在数据线D+或D-上连接特定的电阻来区分,而高速设备的识别则需要通过一系列的握手信号完成。高速USB握手是主机与高速设备之间的一系列交互,旨在确认双方都支持高速模式,并允许设备从全速...
超前进位加法器、时序约束、握手信号处理与AXI4协议 超前进位加法器是一种高效的加法器电路,能够快速计算每一位的进位结果,从而提高电路频率。该加法器利用组合逻辑算出每一位进位,因为计算公式中的变量都是已知...
握手信号,另一方面,是通信协议中的一种机制,用于在发送和接收端之间确认数据传输的开始和结束。在数据采集系统中,握手信号可以确保数据有效、无错地传输。常见的握手信号包括START(开始)、STOP(停止)、ACK...
在深入讨论“一种基于RS485总线的可靠握手协议设计”之前,我们首先需要了解RS485总线技术的基本概念及其在工业通信中的应用。RS485是一种电气特性定义,是一种差分信号的串行总线标准,用于多点通信。它可以允许多...
TCP连接的关闭则涉及四次挥手,确保双方都能接收到对方不再发送数据的信号。 1. **第一次挥手**: - 客户端发送一个FIN(结束)标志的数据包,表示自己不再有数据发送,Sequence number 设置为某个值,如1392,...
6. 驱动开发:编写程序来控制硬件设备,如本例中的模拟QC2.0握手信号。 7. 时钟使能:在对STM32的GPIO或其他外设进行操作前,通常需要先使能该外设的时钟。 8. 引脚配置:设置GPIO引脚的工作模式,如输入模式需要上...
串口通信使用握手信号来控制数据的传输,包括发送数据请求、清除发送、数据发送就绪、数据载波检测和数据终端就绪等。 六、串口通信的重要参数 串口通信的重要参数包括波特率、数据位、停止位和奇偶校验位。波特率...
握手协议是确保数据传输准确无误的重要机制,尤其是在高吞吐量、低延迟的系统中。这种设计通常应用于流水线控制逻辑模块,确保数据在不同阶段能够正确流动。 首先,我们来看一对一端口握手设计。这是所有端口握手...
常见的硬件握手协议有RTS/CTS(Request To Send/Clear To Send)和DTR/DSR(Data Terminal Ready/Data Set Ready)。本实例中涉及的是RTS/CTS握手,这是一种半双工通信中常用的手动流控制方式。 RTS (Request To ...
本项目涉及的是ESP32与STM32之间的SPI(Serial Peripheral Interface)半双工通信,其中还包含了握手协议的实现。SPI是一种同步串行通信协议,适用于设备间的高速数据传输。 1. **ESP32与STM32简介** ESP32是一款...
"四相"指的是协议分为四个步骤,而"单轨"指的是数据和握手信号在同一物理连接上进行传输。 5. **Muller C单元**:这是异步电路设计中的一个重要概念,它是一种基本的存储单元,可以在多个输入信号到达时维持状态,...
接口设计通常包括发送器、接收器和控制逻辑三部分,其中控制逻辑负责握手协议、错误处理和通道管理等。 在应用上,Aurora协议可以用于构建复杂的系统,例如FPGA(现场可编程门阵列)和ASIC(专用集成电路)之间的...
虽然握手协议有效地解决了跨时钟域通信的问题,但它确实会引入额外的延迟,因为通信双方必须等待握手信号的交换。因此,在设计中需要权衡可靠性和延迟,根据具体应用的需求来选择合适的数据同步策略。 总的来说,...
握手协议可以是简单的应答机制,如ASCII字符'ACK'表示接收成功,或者是更复杂的协议,如XON/XOFF流量控制,或是硬件级别的 RTS/CTS或DTR/DSR控制线路。在握手过程中,主机发送命令,从机响应,确保命令被正确接收,...
HDCP是一种专为数字视频和音频信号传输设计的安全协议,主要用于防止未经授权的数字内容复制。HDMI和DVI作为HDCP接口,会在数据从发送端传输到接收端的过程中保护高价值内容。为了确保内容的安全性,HDCP协议规定了...
该文件详细介绍了E84握手流程的背景、目的、限制、机器构成、用语说明、控制信号类型、interlock timeout、通信程序、异常检测、注意事项、connector 及各信号分配、电路图和Sensor Unit尺寸等知识点。 1. 背景和...
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP协议族中,TCP负责在两个网络实体之间提供可靠的数据传输。为了实现可靠的连接,TCP采用了三次握手(建立连接)和四次挥手...