2、物理层基础:信号与介质、编码方式、物理层标准

各位同学,咱们今天聊聊物理层。说白了,就是设备之间到底怎么“说话”的——是用电、用光,还是用空气?信号长什么样?怎么保证对方能听懂?

我刚开始做嵌入式那会儿,总觉得物理层是硬件工程师的事,软件写好协议栈就行了。结果第一次调RS485总线,设备死活不通,拿示波器一看,波形乱成一团。嗯,从那以后我再也不敢跳过物理层了。

2.1 信号与传输介质

信号分两种:模拟信号和数字信号。模拟信号连续变化,像老式电话线里的语音;数字信号只有高低电平,也就是0和1。咱们设备入网协议里,绝大多数场景用的是数字信号。

传输介质呢,我习惯分成三类:

  • 双绞线:便宜、抗干扰还行。RS485、以太网都用它。我见过不少现场布线把双绞线跟强电走同一个线槽,结果通信丢包率飙升——记住,双绞线也要远离干扰源。
  • 同轴电缆:抗干扰强,带宽高。早年以太网用粗缆细缆,现在主要用在视频监控和射频领域。
  • 光纤:速度极快,距离极远,还不怕电磁干扰。缺点是施工门槛高,接头得用专用工具熔接。
我的习惯: 短距离(<10米)室内场景,优先用双绞线;长距离或强干扰环境,直接上光纤。别在RS485上硬跑1000米,除非你做好了隔离和终端匹配。

2.2 编码方式:从NRZ到曼彻斯特

信号在介质上传输,不能直接丢一串高低电平就完事。你得考虑时钟同步、直流平衡、抗干扰。这就引出了编码方式。

2.2.1 NRZ(不归零编码)

NRZ最简单:高电平表示1,低电平表示0。每个比特占用一个固定时间窗口。

数据: 1 0 1 1 0 0 1
NRZ:  ─── ─── ─── ─── ─── ─── ───
      高  低  高  高  低  低  高

有什么问题?你想想看,如果连续发一串1,电平一直保持高,接收端怎么知道发了几个1?它得靠时钟来数。但收发双方的时钟不可能完全一致,时间长了就会累积误差,导致采样错位。

我曾经踩过的坑: 用NRZ传长串连续相同比特,结果接收端多采或少采了一个位,整个数据帧错位。后来加了曼彻斯特编码,问题才解决。

2.2.2 曼彻斯特编码

曼彻斯特编码在每个比特中间都有一次电平跳变。这个跳变既表示数据,又携带时钟信息。

  • 从高到低跳变:表示1
  • 从低到高跳变:表示0
数据:    1     0     1     1     0     0     1
曼彻斯特: ─┐ ┌─┐ ┌─┐ ─┐ ┌─┐ ─┐ ─┐ ┌─┐ ─┐
         高 低 高 低 高 低 高 低 高 低 高 低 高

你看,每个比特中间都有跳变,接收端可以用这个跳变来同步时钟。而且电平在每两个比特之间都会回到中间值,直流分量也平衡了。

以太网10BASE-T用的就是曼彻斯特编码。我调试过一块老式网卡,用示波器看TX+和TX-之间的差分信号,曼彻斯特的跳变非常清晰,一眼就能看出数据流。

核心对比:
特性NRZ曼彻斯特
时钟同步依赖外部时钟自带时钟
直流平衡差(长串1或0)好
带宽效率高(1比特/周期)低(0.5比特/周期)
抗干扰一般较好
典型应用UART、RS232以太网10BASE-T

2.3 物理层标准:RS232、RS485、以太网PHY

标准就是大家约定好的“方言”。同一个编码方式,配上不同的电气特性和接口,就成了不同的物理层标准。

2.3.1 RS232

RS232是老牌标准,PC串口就是它。单端信号,用-3V~-15V表示1,+3V~+15V表示0。传输距离一般15米以内,速率最高也就115200bps。

我最早接触设备入网,就是用RS232连PLC。一根三芯线(TX、RX、GND)就能通信,简单粗暴。但缺点也很明显:抗干扰差,不能多点组网。

避坑指南: RS232的DB9接口,不同设备对引脚定义可能不一样。我曾经拿一根直连串口线去连两个DTE设备,结果死活不通——后来才知道需要交叉线(2-3对调)。

2.3.2 RS485

RS485用差分信号传输,两根线(A和B)的电压差来决定逻辑状态。抗干扰能力强,传输距离可达1200米,还能挂32个节点(标准负载)。

工业现场总线、楼宇自控、智能仪表,到处都有RS485的身影。我做过一个项目,用RS485挂了20多个温湿度传感器,9600bps跑了一年多,没出过问题。

RS485总线拓扑(典型):
主机 ──┬── 节点1 ──┬── 节点2 ──┬── 节点3
       │            │            │
      120Ω终端     120Ω终端     120Ω终端
注意: RS485总线两端必须各接一个120Ω终端电阻,否则信号反射会导致通信错误。我见过有人偷懒不接,结果总线长了之后数据全乱套。

2.3.3 以太网PHY

以太网PHY是物理层收发器,负责把MAC层的数字信号编码成适合网线传输的模拟信号。常见的PHY芯片有RTL8211、KSZ8081等。

以太网PHY支持多种速率:10Mbps、100Mbps、1000Mbps。编码方式也升级了:100BASE-TX用4B/5B编码,1000BASE-T用PAM-5。

我调试过一块板子,PHY芯片的MDIO接口死活读不到寄存器。查了半天,原来是复位引脚没拉够时间——PHY芯片需要至少100ms的复位低电平。嗯,这种细节,数据手册里写得清清楚楚,但就是容易忽略。

三种标准对比:
标准信号类型最大距离最大速率节点数典型场景
RS232单端15米115.2kbps2调试口、短距串口
RS485差分1200米10Mbps32(标准)工业总线、楼宇自控
以太网PHY差分100米1000Mbps不限(交换机组网)局域网、互联网接入

2.4 本章知识体系

下面这张图,把物理层的基础脉络串起来了。你对照着看,心里就有谱了。

物理层基础知识体系 物理层基础知识体系 信号与介质 编码方式 物理层标准 模拟信号 vs 数字信号 双绞线 / 同轴电缆 / 光纤 NRZ(不归零编码) 曼彻斯特编码 RS232(单端、短距) RS485(差分、长距) 以太网PHY(高速、组网) 物理层:信号 → 编码 → 标准 选择物理层标准时,先看距离和速率需求 再考虑抗干扰和成本,最后定编码方式

物理层是整个设备入网协议的基石。信号怎么传、用什么介质、怎么编码、走什么标准,每一步都影响最终通信的可靠性和效率。我建议你动手搭一个简单的RS485网络,用示波器看看波形,比看十遍书都管用。