本篇总结
介绍通讯的基本概念:串行/并行、全双工/半双工/单工、同步/异步,以及比特率与波特率的区别。
🔑 KEIL MDK
串行通讯与并行通讯
按数据传送的方式,通讯可分为串行通讯与并行通讯。串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。并行通讯一般是指使用 8、16、32 及 64 根或更多的数据线进行传输的通讯方式。
以公路来类比:并行通讯就像多个车道的公路,可以同时传输多个数据位;串行通讯就像单个车道的公路,同一时刻只能传输一个数据位。在数据传输速率相同的情况下,并行通讯传输的数据量更大,而串行通讯则可以节省数据线的硬件成本(特别是远距离时)以及 PCB 的布线面积。
| 特性 | 串行通讯 | 并行通讯 |
| 通讯距离 | 较远 | 较近 |
| 抗干扰能力 | 较强 | 较弱 |
| 传输速率 | 较慢 | 较高 |
| 成本 | 较低 | 较高 |
趋势
由于并行传输对同步要求较高,且随着通讯速率的提高,信号干扰问题会显著影响通讯性能,现在越来越多的应用场合采用高速率的串行差分传输(如 USB、以太网、PCIe 等)。
全双工、半双工及单工通讯
根据数据通讯的方向,通讯分为全双工、半双工及单工通讯,主要以信道的方向来区分。
| 通讯方式 | 说明 | 公路类比 |
| 全双工 | 同一时刻,两个设备之间可以同时收发数据 | 双向车道,两个方向车流互不相干 |
| 半双工 | 两个设备之间可以收发数据,但不能在同一时刻进行 | 乡间小道,同一时刻只能一辆车通过 |
| 单工 | 任何时刻都只能进行一个方向的通讯,一个固定发送,另一个固定接收 | 单行道,反方向完全禁止通行 |
W55MH32 的 USART、SPI 属于全双工通讯,I2C 属于半双工通讯。
同步通讯与异步通讯
根据通讯的数据同步方式,分为同步通讯和异步通讯两种,可以根据通讯过程中是否有使用到时钟信号进行区分。
同步通讯
在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调同步。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。
异步通讯
在异步通讯中不使用时钟信号进行数据同步,而是直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据。某些通讯中还需要双方约定数据的传输速率,以便更好地同步。
| 对比项 | 同步通讯 | 异步通讯 |
| 时钟信号 | 有专用时钟线 | 无时钟线 |
| 数据同步方式 | 时钟边沿采样 | 帧格式 + 约定波特率 |
| 传输效率 | 较高(绝大部分是有效数据) | 较低(含帧标识符) |
| 时钟误差容忍 | 较小 | 较大 |
| 典型示例 | SPI、I2C | UART |
通讯速率
衡量通讯性能的一个重要参数是通讯速率,通常以比特率(Bitrate)来表示,即每秒钟传输的二进制位数,单位为比特每秒(bit/s)。
容易与比特率混淆的概念是波特率(Baudrate),它表示每秒钟传输了多少个码元。码元是通讯信号调制的概念,常用时间间隔相同的符号来表示一个二进制数字。
比特率与波特率的关系
若一个码元表示 2 种状态(如 0V=0, 5V=1),则 1 码元 = 1 比特,波特率 = 比特率;若一个码元表示 4 种状态(如 0V=00, 2V=01, 4V=10, 6V=11),则 1 码元 = 2 比特,波特率 = 比特率 / 2。因为很多常见通讯中一个码元表示两种状态,人们常直接以波特率来表示比特率。
| 概念 | 定义 | 单位 |
| 比特率 (Bitrate) | 每秒传输的二进制位数 | bit/s (bps) |
| 波特率 (Baudrate) | 每秒传输的码元个数 | Baud (码元/秒) |
| 关系 | 比特率 = 波特率 × 每个码元携带的比特数 |
常见问题
Q: 为什么现在高速通讯都转向串行差分传输
并行传输虽然一次传多位数据,但随着速率提高,多根数据线之间的串扰和同步问题变得非常严重,且布线成本高。串行差分传输(如 USB、以太网、PCIe)用两根线差分信号抗干扰能力强,可以实现更高的单线速率,总带宽反而超过并行。
Q: UART 是同步还是异步通讯
UART 是异步通讯,没有专用时钟线。它通过数据帧格式(起始位 + 数据位 + 校验位 + 停止位)来同步,收发双方需要约定相同的波特率。而 SPI 和 I2C 是同步通讯,有专用时钟线(SCK / SCL)。
Q: 比特率和波特率什么时候相等
当一个码元只表示两种状态(0 和 1)时,一个码元携带 1 个比特,此时比特率 = 波特率。大多数嵌入式通讯(如 UART)都属于这种情况,所以人们常把波特率当作比特率使用。如果一个码元表示 4 种状态,则比特率 = 2 × 波特率。
Q: SPI 和 I2C 分别是全双工还是半双工
SPI 是全双工通讯,有 MOSI 和 MISO 两根独立的数据线,可以同时收发。I2C 是半双工通讯,只有一根 SDA 数据线,同一时刻只能发送或接收,不能同时进行。
Q: 同步通讯为什么比异步通讯效率高
同步通讯有专用时钟线,数据信号传输的内容绝大部分是有效数据。异步通讯没有时钟线,需要在数据中穿插起始位、停止位等帧标识符用于同步,这些标识符占用传输带宽,因此有效数据比例较低,效率不如同步通讯。
总结
- 串行 vs 并行:串行线少、远距离、抗干扰强;并行线多、近距离、速率高。趋势是高速串行差分传输
- 通讯方向:全双工(同时收发,如 SPI/UART)、半双工(交替收发,如 I2C)、单工(单向-only)
- 同步 vs 异步:同步有时钟线、效率高、时钟误差容忍小(如 SPI/I2C);异步无时钟线、用帧同步、误差容忍大(如 UART)
- 比特率:每秒传输的二进制位数,单位 bit/s
- 波特率:每秒传输的码元数,单位 Baud;当 1 码元 = 1 比特时,波特率 = 比特率
- 关系公式:比特率 = 波特率 × 每码元比特数