1.3 什么是串行通信
1.3.1 串行通信的概念和特点
串行通信是指使用一条数据线(另外需要地线,可能还需要控制线),将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。串行通信只需要少数几条线就可以在系统间交换信息,特别适合计算机与计算机、计算机与外设之间的远距离通信。使用串口通信时,发送和接收的每一个字符实际上都是一次一位传输的,每一位为1或者为0。串行通信的数据流如图1-1所示。
图1-1 串行通信的数据流
串行通信的特点是:数据传输按位顺序进行,最少只需要一根传输线即可完成通信(另外一条借助于地线),以节省传输线。与并行通信相比,还有较为显著的优点,即传输距离长,可以从几米到几千米。正是由于串行通信的接线少、成本低,因此在数据采集和控制系统中得到了广泛的应用,产品也多种多样。串行数据传输由于信号线少,所以信号间的互相干扰也少,因而串行通信的抗干扰能力强,但是串行通信传输速率比并行通信慢很多。假设并行通信有n条数据线,传输信号的时间为T,则串行通信传输同样多数据的时间为nT。
1.3.2 串行通信的分类
在串行传输中,数据是一位一位地按照顺序依次传输的,每位数据的发送和接收都需要时钟来控制时间,发送端通过发送时钟确定数据位的开始和结束,接收端需要在适当的时间间隔对数据流进行采样并正确识别数据。接收端和发送端必须保持步调一致,否则数据传输就会出现差错。为了解决以上问题,串行通信可采用以下两种方法:同步串行通信和异步串行通信。
1.同步串行通信
同步串行通信包含专门用于识别通信开始的同步信号(SYNC),一般加在需要传输的数据前面。同步信号相当于我们开始一起步行时发出的口令“起步—走!”。这样串行通信在每传输一个数据后就不需要停顿,这是一种连续串行传输数据的通信方式,一次通信只传输一帧信息。这里的信息帧与异步通信中的字符帧不同,通常包含若干个数据字符。
信息帧由同步信号字符、数据字符和校验字符(CRC)组成。其中同步信号字符位于帧开头,用于确认数据字符的开始;数据字符在同步信号字符之后,个数没有限制,由所需传输的数据块长度来决定;校验字符有1~2个,用于接收端对接收到字符序列的正确性进行校验。同步通信的缺点是要求发送时钟和接收时钟保持严格的同步,另外同步串行通信的同步字符(SYNC)往往不统一,这样就不便于不同厂家串口之间的通信,所以现在的串行通信已经几乎不再用同步串行通信。我们所说的串行通信一般默认指异步串行通信。
2.异步串行通信
异步串行通信一般等同于RS-232通信方式。RS-485和RS-422也是采用RS-232通信方式的,所以也是异步串行通信。异步串行通信中有两个比较重要的指标:字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传输。字符帧由发送端逐帧发送,通过传输线被接收设备逐帧接收。发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,互不同步。
当还没有开始数据传输时或者数据已经传输完毕后,异步串行通信的传输线上必须一直保持为电平逻辑“1”的状态。一旦接收端检测到传输线上发送过来的电平逻辑“0”(即字符帧起始位)时,就表示发送端已开始发送数据,每当接收端收到字符帧中的停止位时,就知道一帧字符已经发送完毕。
异步串行通信的帧格式是:1位起始位,8位(或7位)数据位,1位奇偶校验位,1位(或2位)停止位。
1.3.3 串行通信的工作模式
通过单线(相对地线)传输数据是串行通信的基础。数据通常是在两个站(点对点)之间进行传输的,按照数据传输的方向可分成三种传输模式:单工、半双工和全双工。
1.单工模式:早期的电流环TTY
电流环也称为TTY,单工模式的数据传输是单向的。通信双方中,一方固定为发送端,另一方则固定为接收端,使用一根传输线,如图1-2所示。用两路 TTY 也可以实现双向通信。由于没有统一的国际标准,且使用光电耦合器的接口极易损坏,现在 TTY 应用已经极少。
图1-2 单工模式
电流环TTY曾经是DB-25针RS-232接口(串口)的一部分,后来随着IBM将RS-232接口简化为DB-9针而被抛弃,但是现在也可以将DB-9针的RS-232接口的TXD和RXD转换出TTY信号,这可能是我们现在还可以见到的仅有的串行通信TTY信号了,而且不再是单工模式,而是双工模式。
双工模式按照是否可以同时接收和发送,可分为半双工和全双工。
2.半双工模式:RS-485
半双工通信使用同一条传输线,既可发送数据又可接收数据,但不能同时发送和接收。在任何时刻只能够由其中的一方发送数据,另一方接收数据。半双工模式既可以使用一条数据线,也可以使用两条数据线(参见图1-3)。这两条数据线的其中一条专门用于发送,而另外一条专门用于接收,只是这两条线不同时发送和接收,属于半双工模式。
半双工通信中每个端口都需要有一个收发切换电子开关,通过切换来决定数据向哪个方向传输。因为有切换,所以往往会产生时间延迟。波仕电子的RS-232/RS-485转换器使用了独特的零延时自动收发转换技术,直接从 RS-485 信号中用硬件提取收发转换控制信号,并具备零延时的性能。其中零延时指收发切换过程转变时间为 0。这样的 RS-485 在使用时与RS-232通信一样。
3.全双工模式:RS-232或RS-422
全双工模式分别由两根可以在两个不同的端点同时发送和接收的传输线来进行数据传输,通信双方都能在同一时刻进行发送和接收操作,如图1-4所示。
图1-3 半双工模式
图1-4 全双工模式
在全双工模式中,每一端都有发送器和接收器,有两条传输线,可在交互式应用和远程监控系统中使用,数据传输效率较高。由于全双工的收发可以同时进行,所以通信效率比半双工至少提高了一倍。
1.3.4 串行通信参数
串行通信方式是将字节(byte)拆分成一个接一个的位(bit)后再传输出去,接到此信号的一方再将此一个一个的位组合成原来的字节,如此形成一个字节的完整传输。在传输的过程中,双方一定要明确传输的具体方式并保持一致,否则双方就没有一套共同的编码/译码方式,从而无法了解对方所传过来的信息含意。因此双方为了进行通信,必须遵守一定的通信规则,这个共同的规则就是通信端口的初始化。
通信端口的初始化必须对以下参数进行设置。
(1)波特率:这是一个衡量通信速率的参数,它表示每秒传输的位(比特,bit)的个数。RS-232 标准规定的数据传输速率为1200 b/s、2400 b/s、4800 b/s、9600 b/s、19200 b/s、38400 b/s、115200 b/s等,也称为波特率。例如,9600波特率表示每秒传输9600 bit,记为9600 bps或者9600 b/s。波特率表示有效数据的传输速率,就是每秒传输0或1的个数。比如波特率是9600 b/s,那么它传输一位0或1的时间就是1/9600 s,大约为0.1 ms。假设一帧串行数据有10 bit(8个数据位、1个校验位和1个停止位),那么传输时间就是10×0.1 ms=1 ms。
(2)数据位:这是通信中实际数据的位数。当计算机发送一个串行信息帧时,实际的数据一般是8位,但是也有7位和5位,尽管后两者极少用到。如何选择数据位,取决于想传输数据的位数,比如标准的ASCII码是0~127(7位),而扩展的ASCII码是0~255(8位)。
(3)停止位:用于表示单个数据包或者一帧的最后一位。典型的值为1位,也有1.5和2 位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间会出现小小的不同步。因此停止位不仅仅是表示传输的结束,并且也提供计算机校正时钟同步的机会。停止位的位数越多,不同时钟同步的容忍程度就越大,但是实际的数据传输率也越低。随着串行通信硬件技术抗干扰能力越来越强,现在几乎都选1位停止位。
(4)奇偶校验位:奇偶校验是串行通信中一种简单的检错方式,有三种设置方式:偶校验(O)、奇校验(E)、无校验(N)。无校验(N)也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,假设数据是011,如果是偶校验,校验位为0,保证逻辑“1”的位数是偶数;如果是奇校验,校验位为1,这样就有3个逻辑“1”。同样随着串行通信硬件技术抗干扰能力越来越强,现在几乎都选N(无校验)。
串行通信常用的格式为(9600,N,8,1),就是波特率为 9600 b/s,无奇偶校验位,8位数据位,1位停止位。