一、通信基础概念:节点通信、同步与异步、串行与并行、单工/半双工/全双工

各位同学,咱们今天聊点最基础的东西。别小看这些概念,我做了十几年嵌入式,见过太多人栽在这些“简单”的坑里。说白了,通信就是两个设备之间“说话”,但怎么说得清楚、说得快、不吵架,这里面门道可不少。

1.1 什么是节点通信?

节点通信,就是两个或多个设备之间交换数据。每个设备就是一个“节点”。你想想看,一个传感器采集温度,传给单片机,单片机再传给显示屏——这就是典型的节点通信。

我在项目中遇到过最头疼的事:两个节点明明连上了线,数据就是传不过去。后来发现,一个节点用3.3V逻辑,另一个用5V逻辑,电平不匹配。嗯,这种低级错误,新手最容易犯。

节点通信三要素:

  • 发送方:谁在说话?
  • 接收方:谁在听?
  • 传输介质:用什么传?铜线、光纤、还是无线电波?

节点通信可以是一对一(点对点),也可以是一对多(广播或多播)。我建议你先把点对点搞明白,再玩复杂的拓扑结构。

1.2 同步通信 vs 异步通信

这两个概念,我当年学的时候也迷糊过一阵子。说白了,区别就在于“有没有时钟信号跟着一起走”。

同步通信

发送方和接收方共用同一个时钟信号。数据在时钟的节拍下传输,就像士兵踩着鼓点齐步走。典型的例子:I²C、SPI。

特点:

  • 传输速度快,因为不需要额外的起始/停止位
  • 双方必须严格同步,时钟偏移会导致数据错乱
  • 硬件实现相对复杂

我的经验:做SPI通信时,时钟极性(CPOL)和时钟相位(CPHA)一定要配对。我曾经因为这两个参数没配好,调了整整一个下午,最后发现是数据手册看错了位。

异步通信

没有共享时钟,靠约定的波特率和起始/停止位来同步。典型的例子:UART(串口)。

特点:

  • 只需要两根线(TX、RX),硬件简单
  • 每个字节需要额外的起始位和停止位,效率略低
  • 双方波特率必须一致,误差不能超过2%

避坑指南:我曾经调试一个GPS模块,串口数据全是乱码。查了半天,发现是晶振精度不够,波特率误差到了3%。换了个高精度晶振,问题立刻解决。所以,异步通信的波特率精度,千万别马虎。

对比项 同步通信 异步通信
时钟信号 需要额外时钟线 不需要,靠约定波特率
传输效率 高(无额外开销) 较低(有起始/停止位)
硬件复杂度 较高 较低
典型协议 I²C、SPI UART、RS-232

1.3 串行通信 vs 并行通信

这个更好理解。串行就是一根线,一位一位地传;并行就是多根线,一次传多位。

串行通信

数据按顺序逐位传输。就像单车道公路,车一辆一辆过。

  • 优点:线少,成本低,抗干扰能力强
  • 缺点:速度相对较慢(但现代串行协议已经很快了)

并行通信

数据通过多条线路同时传输。就像八车道高速公路,一次能过八辆车。

  • 优点:速度快(理论上)
  • 缺点:线多,成本高,信号容易串扰

我的看法:现在串行通信越来越流行。USB、PCIe、SATA,这些高速接口全是串行的。为什么?因为并行通信到了高频,信号之间的时延差(skew)很难控制。我记得以前做并口LCD驱动,8根数据线稍微有点不等长,显示就花屏。串行就没这烦恼。

1.4 单工、半双工、全双工

这三个模式,描述的是通信的方向性。我习惯用一个比喻:对讲机和电话。

单工(Simplex)

数据只能单向传输。就像广播电台,只能发射,不能接收。

  • 例子:电视广播、传感器→单片机(单向)
  • 特点:简单,但应用场景有限

半双工(Half-Duplex)

双方都可以收发,但不能同时进行。就像对讲机,你说话时我听着,我说完了你再说。

  • 例子:RS-485总线、I²C(严格来说是半双工)
  • 特点:需要协议来协调“谁来说话”,避免冲突

避坑指南:做RS-485通信时,收发切换的时机很重要。我曾经在发送完数据后立刻切换为接收模式,结果最后一个字节没发完就被截断了。正确的做法是:发送完最后一个字节后,等一个字节的传输时间再切换。

全双工(Full-Duplex)

双方可以同时收发。就像打电话,你说我也能说,互不干扰。

  • 例子:UART(有独立的TX和RX线)、SPI(有独立的MISO和MOSI线)
  • 特点:效率最高,但需要更多的引脚
模式 方向性 典型应用 引脚需求
单工 单向 广播、传感器 最少
半双工 双向(交替) RS-485、I²C 较少
全双工 双向(同时) UART、SPI 较多

知识体系总览

下面这张图,我把本章的核心概念串起来了。你一看就明白它们之间的关系。

节点通信基础概念体系 节点通信 同步 vs 异步 串行 vs 并行 单工/半双工/全双工 传输介质 有/无独立时钟 I²C、SPI vs UART 逐位 vs 多位同时 线少 vs 线多 单向/交替/同时 RS-485/UART/SPI 铜线/光纤/无线 距离与速率权衡 选择通信方式时,先问自己三个问题: ① 距离多远?② 速度多快?③ 需要几根线?

这张图把本章的知识点串成了一个整体。你从“节点通信”出发,沿着四个分支往下走,就能理解每个概念的核心区别和典型应用。我个人建议你把这图打印出来贴在工位上,调试的时候扫一眼,思路会清晰很多。

最后提醒一句:这些基础概念,看起来简单,但实际项目中翻车的概率极高。我见过有人把半双工当全双工用,结果数据冲突导致系统崩溃。也见过有人串行通信的波特率算错,调了三天才发现是9600和19200的区别。嗯,基础不牢,地动山摇。

可可精品资料库