串口通信指串口按位(bit)传送和接收位元组。儘管比特位元组(byte)的串列通信慢,但是串口可以在使用一根线传送数据的同时用另一根线接收数据。
在串口通信中,常用的协定包括RS-232、RS-422和RS-485。
基本介绍
- 中文名:串口通信协定
- 外文名:Serial communication protocol
- 作用:传送和接收位元组
- 学科:计算机学
- 作用:用于获取远程採集设备的数据
RS-232
RS-232(ANSI/EIA-232标準)是IBM-PC及其兼容机上的串列连线标準。可用于许多用途,比如连线滑鼠、印表机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际套用中RS-232的传输长度或者速度常常超过标準的值。RS-232只限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。
DB-9针连线头

从计算机串口截面图。
RS-232针脚的功能:
数据:
TXD(pin 3):串口数据输出(Transmit Data)
RXD(pin 2):串口数据输入(Receive Data)
握手:
RTS(pin 7):传送数据请求(Request to Send)
CTS(pin 8):清除传送(Clear to Send)
DSR(pin 6):数据传送就绪(Data Send Ready)
DCD(pin 1):数据载波检测(Data Carrier Detect)
DTR(pin 4):数据终端就绪(Data Terminal Ready)
地线:
GND(pin 5):地线
其它
RI(pin 9):铃声指示
RS-422
RS-422(EIA RS-422-AStandard)是Apple的Macintosh计算机的串口连线标準。RS-422使用差分信号,RS-232使用非平衡参考地的信号。差分传输使用两根线传送和接收信号,对比RS-232,它能更好的抗噪声和有更远的传输距离。在工业环境中更好的抗噪性和更远的传输距离是一个很大的优点。
RS-485
RS-485(EIA-485标準)是RS-422的改进,因为它增加了设备的个数,从10个增加到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。有了多个设备的能力,你可以使用一个单个RS-485口建立设备网路。出色抗噪和多设备能力,在工业套用中建立连向PC机的分散式设备网路、其他数据收集控制器、HMI或者其他操作时,串列连线会选择RS-485。RS-485是RS-422的超集,因此所有的RS-422设备可以被RS-485控制。RS-485可以用超过4000英尺的线进行串列通行。
DB-9 引脚连线
--------------
\ 1 2 3 4 5 /
\ 6 7 8 9 /
---------
从计算机连出的线的截面。
RS-485的引脚的功能
数据:1(DATA-) 2(DATA+)
地线:5
握手
RS-232通信方式允许简单连线三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时採用使用相同的波特率。儘管这种方法对于大多数套用已经足够,但是对于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。在这一部分,我们讨论三种最常用的RS-232握手形式:软体握手、硬体握手和Xmodem。
a,软体握手:我们讨论的第一种握手是软体握手。通常用在实际数据是控制字元的情况,类似于GPIB使用命令字元串的方式。必须的线仍然是三根:Tx,Rx和地线,因为控制字元在传输线上和普通字元没有区别,函式SetXModem允许用户使用或者禁止用户使用两个控制字元XON和XOFF。这些字元在通信中由接收方传送,使传送方暂停。
例如:假设传送方以高波特率传送数据。在传输中,接收方发现由于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 toSend)。当接收方準备好接收数据,它置高RTS线表示它準备好了,如果传送方也就绪,它置高CTS,表示它即将传送数据。另一组线是DTR(DataTerminal Ready)和DSR(Data SetReady)。这些线主要用于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,但使DTR维持高电平。
如果连线埠关闭,库函式置低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控制字元的值,从而导致通信故障。