一、通信简介
1.1 通信方式
CPU与外设之间的信息交换或计算机与计算机之间的信息交换称为通信。基本的通信方式有2种,即并行通信和串行通信。
- 串行通信:数据字节的各位一位一位地依次传送的通信方式。串行通信的速度慢,但占用的传输线条数少,适用于远距离的数据传输。
- 并行通信:数据字节的各位同时传送的通信方式。并行通信的优点是数据传送速度快,缺点是占用的传输线条数多,适用于近距离通信。在通信距离较远的情况下成本较高。
1.2 通信方向
从硬件上看,串行通信方式有单工通信、半双工通信、全双工通信。它们主要以信道的方向来区分。如下图所示:
- 单工通信:数据只允许向一个方向进行传送,即数据发送设备只能发送数据,而数据接收设备只能接收数据。此时在数据发送设备与数据接收设备之间只需要一条数据传输线。
- 半双工通信:数据允许向两个方向进行传送,但是传送数据的过程与接收数据的过程不能同时进行。即进行通信的两个设备都具备传送与接收数据的能力,但是在同一时刻只能一个设备进行数据传送而另一个设备进行数据接收。
- 全双工通信:数据允许向两个方向进行传送,并且传送数据的过程与接收数据的过程可以同时进行。即进行通信的两个设备都具备传送与接收数据的能力,而且在同一时刻两个设备均可以发送与接收数据。
1.3 数据同步方式
根据通讯的数据同步方式,又分为同步和异步两种,可以根据通讯过程中是否有使用到时钟信号进行简单的区分。
1.3.1 同步通讯
在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,见图下图。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。
1.3.2 异步通讯
在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,如下图,某些通讯中还需要双方约定数据的传输速率,以便更好地同步。
在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。
- 波特率
本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号(如RS232的 DB9接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,下图 中用虚线分开的每一格就是代表一个码元。常见的波特率为4800、9600、115200 等。
- 通讯的起始和停止信号
串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。
在起始位期间,TX引脚处于低电平。
在停止位期间,TX引脚处于高电平。
- 有效数据
在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或 8 位长。 - 数据校验
在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验(odd)、偶校验(even)、0 校验(space)、1 校验(mark)以及无校验(noparity)。
奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为:01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。
偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧:11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。
0 校验是不管有效数据中的内容是什么,校验位总为“0”,1 校验是校验位总为“1”。
1.4 通信速度
衡量通讯性能的一个非常重要的参数就是通讯速率,通常以比特率
(Bitrate)来表示。容易与比特率混淆的概念是波特率
(Baudrate)。
- 比特率
即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。 - 波特率
它表示每秒钟传输了多少个码元。而码元是通讯信号调制的概念,通讯中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。如常见的通讯传输中,用 0V 表示数字 0,5V 表示数字 1,那么一个码元可以表示两种状态 0 和 1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通讯传输中,有0V、2V、4V 以及 6V 分别表示二进制数 00、01、10、11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半。因为很多常见的通讯中一个码元都是表示两种状态,人们常常直接以波特率来表示比特率,虽然严格来说没什么错误,但希望您能了解它们的区别。
• 由 青梅煮久 写于 2021 年 01 月 07 日