硬件接口协议之“RS232数据传输”

本文主要介绍RS232的连接方式、线缆长度及误码率、数据传输格式等。



1、连接方式

1.1、有Modem连接方式

有Modem的连接方式分两种,一种是全连接,一种是三线连接,分别如下图所示:





1.2、无Modem连接方式

无Modem的连接方式分为以下几种:全连接、无振铃指示和载波检测的连接、三线连接无握手方式、三线连接带回环、三线连接带部分握手等。分别如下图所示:




三线无握手是最简单的连接方式,但是也是万能的连接方式。但是这里存在一个问题。如果通讯双方其中有一方检测DSR和DCD输入信号。这些信号定义了是否能与对方通讯。如过这两条线没有连接,它们始终为低电平,这就有问题。

同样的问题也发生在了RTS和CTS上,如果DTE将RTS置为了高电平,然后等待CTS为高电平,而CTS没有连接,所以DTE会永远挂在那里。所以这种连接方式仅仅是RXD和TXD上的数据传输。

这种最简单的连接方式不能进行任何形式的硬件流控制。只能通过在软件中通过XOFF和XON字符来对数据流进行控制。

在单片机等应用中,就是采用的无任何握手信号的连接方式,所以才必须有起始位和停止位。在进行通讯时,如果发送方一直发送,而接受方没有足够的能力或时间进行应答,就会产生数据丢失。


对于没有握手信号的三线连接,如果软件按正常的方式检测Modem的握手信号,会因为检测不到合适的握手信号而挂在那里。为了避免这种情况,同时又能使用最简单的三线的连接方式,便产生了带回环(Loop Back)的连接方式。主要是为了用最简单的三线通信方式时,普通的软件也能适用。

首先考虑DSR信号,此信号表示对方已经Ready。在图中,这根线连接到了DTR。这就是说,本地的软件检测到的不是对方的Ready信号,而是本地的DTR信号。而有99%的设备的软件在检测DSR和DCD信号的时候都要先将本地的DTR信号置为高电平。这样,这种连接方式对于99%的软件就都适用了。同样的技巧也应用在了CTS和RTS上。

通讯双方都不能对数据流进行控制,也只能采用XON和XOFF字符的握手方式。因此,如果软件不知道没有硬件流控制信号,在数据传输速率超过接受方所能承受的能力时就会产生数据丢失。


这种连接方式下,本地的RTS与CTS连接在一起,然后与对方的DCD连在一起。这样,只有在对方检测DCD信号时,RTS信号才会传递给对方。而在现在的软件中几乎都是采用这用检测DCD的方式。

DSR和DTR交叉互联。因此双方就可以互相告知对方本地是否Ready,如果对方Ready的话就发送数据,对方不Ready的话就停止发送。

只采用RTS和CTS握手的软件不能采用这种带有部分握手信号的连接方式。而大部分软件在使用RTS和CTS的同时也会检查DSR信号,在这种情况下,这种连接方式就可以适用。



2、线缆长度和误码率

在通信速率低于20kb/s时,RS232直连的最大物理距离为15m(50英尺)。传输电缆长度由RS232标准规定在码元畸变小于4%的情况下,传输电缆长度应为50英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50英尺,在9600的时候可以达到250英尺,即75米。


3、三线连接的数据传输格式

无任何握手信号的三线连接方式,由于没有流控信号,所以必须有起始位和停止位。

串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时RS232为低电平。数据总是从低位向高位一位一位的传输(小端序)。

通信开始前,大于一位以上时间的高电平表示空闲,通信开始的时候,规定第一个数据位是低电平表示通信的开始,之后才是真正的数据,在规定的数据位传送完成后(通常是8位或9位,9位通信中的第9位可以表示奇偶校验或其它用途,前8位是真正需要传送的数据),要保持1个数据位的高电平表示一次数据传送结束(停止位);然后才能继续第二次传送,或者是结束传送又保持高电平状态表示数据线空闲。


eg

对于16进制数据55AAH,当采用8位数据位、1位停止位传输时,它在信号线上的波形(TTL电平)和(RS-232电平)分别为:



TTL电平:

55H=01010101B,更改端序后10101010b,加入一个起始位0,一个停止位1,55H的数据格式为1010101010b;

AAH=10101010b,更改端序后01010101B,加入一个起始位0,一个停止位1,55H的数据格式为1101010100B;

其中,连续传输时,每一个字节都有起始位和停止位,下一个字节的起始位接着上一个字节的停止位。

  • 对于RS232接口,实际使用中应考虑带电插拔,应在R_IN和T_OUT管脚串最少100欧姆电阻。作用是抗小能量电压脉冲,当接上串口时,因为瞬间的插拔产生了一个很窄的电压脉冲,如果这个脉冲直接打到232芯片上,很可能打坏芯片,但是串了这个小电阻,很容易就把能量给消耗掉。

  • 串口波特率一般是300的倍数。