搞懂通信协议的三大“灵魂拷问”:双工、串行与同步

48 阅读4分钟

每当学习UART、I2C、SPI 或 RS485时,往往会被一堆术语绕晕。其实,看懂它们,只需要搞懂三个核心维度:

  1. 路怎么走?(双工:单工/半/全)
  2. 一次过几辆车?(位宽:串行/并行)
  3. 我们要不要对表?(同步:同步/异步)

一、数据流向:单工、半双工、全双工

这个维度描述的时:谁能说话?能不能同时说话?

1. 单工(Simplex)---------”广播电台“

这是最霸道的一种方式。路是单向的,一旦修好,方向就定死了。

  • 定义:数据只能单向流动。一方永远是发送器,另一方永远是接收器。
  • 类比:收音机/广播。电台只管播,你只管听收音机,你对着收音机怎么操作,电台也无法听见。
  • 特点:只有一根数据线(或无线信道),没有”回嘴“机会。

2. 半双工(Half-Duplex)-------- “对讲机”

这就是一种“君子协定”。我们可以互相说话,但是不能抢话。

  • 定义:数据可以双向流动,但同一时刻只能有一个方向。要么我发你收,要么你发我收。
  • 类比:对讲机。只有一个人说完“Over”,松开按钮,另一个人才能按下按钮说话。如果两个人都按
  • 典型代表:I2C、RS485

3.全双工(Full-Duplex)---------- ”打电话“

这是最高效的沟通方式。

  • 定义:数据可以在同一时刻双向流动。发送和接收互不干扰。
  • 类比:打电话。你在说话的适合,也能听到对方的吵闹声,大家可以一起互喷。
  • 硬件代价:通常需要两根独立的数据线,一根负责发送(TX),一根负责接收(RX)。
  • 典型代表:UART(串口)、SPI。

二、传输宽度:串行 vs 并行

这个维度描述的是:一次能传多少个bit?

1.并行通信--------”多车道宽马路“

  • 定义:多条数据线同时传输。比如8根线,一次就能传1个字节。

  • 类比:高速收费站的8个闸口。8辆车可以并排同时通过。

  • 优点:

    • 快(理论上):单次吞吐量大,一个时钟周期过去的数据多。
  • 缺点:

    • 费引脚:随便传点数据就要占用单片机8个甚至16GPIO,太奢侈了。
    • 干扰大、难传远:线之间会互相干扰(串扰)。而且距离一长,这8辆车很难保证同时到达终点(时序偏移),导致高速传输受限。

2.串行通信----------”冰糖葫芦“

  • 定义:只有一条数据线,数据像冰糖葫芦一样,一个bit接一个bit地排队发送。

  • 类比:单行道。不管你有多少辆车,都必须排成一队,一辆一辆过。

  • 优点:

    • 省引脚:最少只需要一根线就能传数据。
    • 传得远:抗干扰能力强,成本低。
    • 并不慢:虽然一次传得少了,但是现在技术发达了,发送频率可以极高(GHz级别),比如USB3.0、SATA、PCIE都是串行的,速度吊打老式并行接口
  • 典型代表:UART、I2C、SPI、USB(几乎现代所有主流接口)。

三、节奏控制:同步、异步

这个维度最关键,它描述的是:接收方怎么知道哪一位是0,哪一位是1?

1. 同步通信(Synchronous)--------”广播体操“

核心特征:必须有一根时钟线(CLK/SCL/SCK)。

  • 原理:发送方除了发数据,还专门拉一根线(时钟线)来打拍子。

  • 类比:全校做广播体操

    • 喇叭里的口令”一、二、三、四“就是时钟线
    • 学生们的动作就是数据。
    • 不管口令喊得快还是慢,学生都听口令做动作,绝对不会乱。
  • 优点:效率高,大家都听指挥,只要时钟不停,数据就可以一直传。

  • 典型代表:I2C、SPI。

2. 异步通信(Asynchronous)---------”考场时对答案“

核心特征:没有时钟线,全靠私下约定。

  • 原理:双方没有连接时钟线,但私下约定好一个速度(波特率Raud Rate,比如9600)。

  • 类比:作弊对答案。

    • A 和 B约定:”每隔 1 秒 做一个手势传一个答案“。
    • A (发送方) 先挥手示意”我要开始了“(起始位)。
    • B(接收方)看着手表,每隔一秒记录一次。
    • 风险:如果B的手表慢了,或者A的手速快了,数到第10题目时就可能错位了。所以异步通信不能一次传太长的数据,需要频繁重新对准(起始位)。
  • 优点:省了一根时钟线,接线最简单。

  • 典型代表:UART(串口)。

总结一张表

协议名称双工模式传输方式同步模式硬件特征
UART全双工串行异步TX,RX(无时钟线)
I2C半双工串行同步SCL(有时钟线),SDA
SPI全双工串行同步MOSI,MISO,SCK(有时钟线)
RS485半双工串行异步差分线A,B