第二章 通信协议基础:OSI七层模型、TCP/IP协议栈、串行通信与并行通信、同步与异步通信

各位同学,欢迎来到通信协议基础这一章。说实话,我做了十几年嵌入式系统,见过太多因为通信协议没选对、没理解透而导致项目翻车的案例。今天这一章,咱们就把通信协议的老底儿给掀开,看看它到底是怎么工作的。

2.1 OSI七层模型:通信界的「通用语言」

先聊聊OSI七层模型。这东西听起来高大上,其实说白了,就是国际标准化组织(ISO)给通信系统定的一套「分层干活」的规矩。为什么要分层?你想想看,如果所有通信功能都揉在一起,改一个地方就得动全身,那谁受得了?

OSI模型把通信过程拆成了七层,从下往上分别是:

  • 物理层:管的是比特流在物理介质上的传输。比如电压高低、光信号强弱、引脚怎么接。我当年调试一个RS-485总线,死活通不了,最后发现是A/B线接反了——这就是物理层的问题。
  • 数据链路层:把物理层的比特流组装成帧,加上MAC地址,做差错控制。以太网、Wi-Fi都在这一层。
  • 网络层:负责路由和寻址。IP协议就在这层,它决定了数据包怎么从A点跑到B点。
  • 传输层:提供端到端的可靠传输。TCP和UDP是这层的代表。一个靠谱,一个快,看你选哪个。
  • 会话层:管理会话的建立、维持和终止。嗯,这一层在实际应用中经常被合并到上层。
  • 表示层:处理数据格式、加密、压缩。比如你发个中文,对方收到乱码,那就是表示层没处理好编码。
  • 应用层:直接面向用户。HTTP、FTP、MQTT都在这一层。

核心要点:每一层只关心自己的事,下层为上层提供服务。这种「各司其职」的思想,在嵌入式系统设计中同样适用。

我在项目中遇到过一件事:有个同事非要在应用层自己实现重传机制,结果和底层的TCP重传打架,导致数据乱套。这就是没理解分层模型——每一层做好自己的事就够了,别越俎代庖。

2.2 TCP/IP协议栈:互联网的「事实标准」

OSI七层模型是理论上的完美方案,但实际互联网用的是TCP/IP协议栈。它只有四层:

TCP/IP层 对应OSI层 常见协议
应用层 应用层、表示层、会话层 HTTP, MQTT, CoAP
传输层 传输层 TCP, UDP
网络层 网络层 IP, ICMP
网络接口层 数据链路层、物理层 以太网, Wi-Fi

说白了,TCP/IP就是把OSI的上三层合并成了应用层,下两层合并成了网络接口层。简洁实用,这也是它能成为事实标准的原因。

我建议你在做嵌入式网络通信时,重点关注传输层。TCP适合对可靠性要求高的场景,比如固件升级;UDP适合实时性要求高的场景,比如视频流。选错了,项目就得返工。

避坑指南:我曾经在一个物联网项目中用了TCP,结果设备在弱网环境下频繁重连,功耗飙升。后来换成UDP+应用层轻量确认,问题就解决了。记住:不是所有场景都需要TCP的「可靠」。

2.3 串行通信与并行通信:一根线 vs 一堆线

接下来聊聊物理层面的通信方式。串行通信和并行通信,本质区别在于数据传输的「车道数」。

  • 串行通信:一次只传1位数据,用一根数据线。比如UART、I2C、SPI。优点是线少、抗干扰强、传输距离远。缺点是速度相对慢(但现代串行技术已经很快了)。
  • 并行通信:一次传多位数据,用多根数据线。比如并口、DDR内存总线。优点是速度快,缺点是线多、成本高、抗干扰差。

你可能会问:「既然并行快,为什么现在串行反而更流行?」嗯,这个问题问得好。原因有三:

  1. 时钟同步问题:并行通信的多根线很难做到完全同步,频率一高就出问题。
  2. 串扰问题:线多了,互相干扰就严重。
  3. 成本问题:线多意味着引脚多、PCB面积大、连接器贵。

所以你看,现在高速接口如USB 3.0、PCIe、SATA,全是串行的。这就是技术发展的趋势——用更少的线,跑更快的速度。

实战建议:在视觉仿生系统中,传感器和处理器之间的通信,我推荐用串行方式。比如用MIPI CSI接口传输摄像头数据,用SPI或I2C传输控制指令。线少,布线方便,抗干扰也好。

2.4 同步与异步通信:时钟的「默契」

最后聊聊同步和异步通信。这俩概念经常有人搞混,我尽量用大白话讲清楚。

  • 同步通信:发送方和接收方共用同一个时钟信号。数据在时钟的节拍下传输。比如I2C、SPI都是同步通信。优点是传输效率高,缺点是双方必须严格同步,距离远了容易出问题。
  • 异步通信:双方没有共同时钟,靠约定的波特率来「猜」数据。比如UART就是异步通信。优点是线少(只需要TX、RX两根线),缺点是效率低一些,因为要加起始位和停止位。

我举个例子你就明白了。同步通信就像两个人一起喊口号:「一二一、一二一」,步调一致。异步通信就像两个人各自按自己的节奏走,但约定好「每秒钟走两步」,然后靠对方的脚步声来对齐。

注意:异步通信的波特率必须一致,否则数据会错乱。我曾经调试一个UART设备,数据全是乱码,查了半天发现是波特率设成了9600和115200——差了整整12倍。这种低级错误,犯一次就长记性了。

在视觉仿生系统中,我一般这样选:

  • 传感器和主控芯片之间距离近、要求速度快,用同步通信(如SPI)。
  • 和外部设备(如调试电脑、无线模块)通信,距离远、线数有限,用异步通信(如UART)。

本章知识体系图

下面这张图,是我用SVG画的本章知识结构。你可以把它当作一张「通信协议地图」,随时回来看看。

通信协议基础 - 知识体系 OSI七层模型 7. 应用层 6. 表示层 5. 会话层 4. 传输层 3. 网络层 2. 数据链路层 1. 物理层 TCP/IP协议栈 应用层 传输层 (TCP/UDP) 网络层 (IP) 网络接口层 串行 vs 并行 串行:1根线,逐位传输 - UART, I2C, SPI 并行:多根线,同时传输 - 并口, DDR总线 同步 vs 异步 同步:共同时钟 - I2C, SPI 异步:无共同时钟 - UART 核心关系与选择原则 1. OSI是理论模型,TCP/IP是实际标准 2. 串行通信:线少、距离远、抗干扰强 → 适合传感器、控制信号 3. 并行通信:速度快、线多、成本高 → 适合片内高速总线 4. 同步通信:效率高、距离受限 → 适合板级通信 5. 异步通信:灵活、线少 → 适合设备间通信

好了,这一章的内容就到这里。通信协议这东西,光看理论是不够的,你得在实际项目中多踩坑、多总结。下一章我们会深入视觉仿生系统的具体通信需求,看看这些协议怎么落地。


公众号:蓝海资料掘金营,微信deep3321