第2章:物理层与数据链路层

好,我们开始第二讲。上一章我们把DoIP协议栈的宏观架构聊了一遍,这一章要沉下去,看看最底层的物理层和数据链路层。说白了,就是信号怎么从线缆上跑起来,MAC和PHY这对搭档怎么分工。

2.1 以太网物理层基础

物理层,干的就是最脏最累的活。把MAC层丢过来的数字比特流,调制成能在网线上传输的电信号或光信号。反过来,把收到的模拟信号再解调回数字信号。

我刚开始接触以太网时,总觉得物理层就是个“信号转换器”,没啥技术含量。后来在项目里被噪声问题折磨得死去活来,才明白物理层的水有多深。

2.1.1 物理层的分层模型

IEEE 802.3标准把物理层又拆成了几个子层:

  • PCS(物理编码子层):负责编码/解码。比如8B/10B编码,把8位数据变成10位,目的是保证直流平衡和时钟恢复。
  • PMA(物理介质接入子层):负责串行化/解串行化。把并行数据转成串行比特流,或者反过来。
  • PMD(物理介质相关子层):直接和介质打交道。定义信号电平、传输速率、连接器类型。

你想想看,一个简单的“发数据”动作,底层竟然拆成了三层来处理。为什么?就是为了解耦。换一种传输介质,只需要换PMD子层,上层代码不用动。

核心要点:物理层不是一根线那么简单。它包含了编码、时钟恢复、信号整形、链路协商等一系列复杂功能。

2.2 车载以太网(100BASE-T1)特点

说到车载以太网,就绕不开100BASE-T1。这个标准是IEEE 802.3bw定义的,专门为汽车环境设计的。

我记得第一次看到100BASE-T1的波形时,心里咯噔一下——这信号怎么这么“丑”?后来才明白,人家是故意这么设计的。

2.2.1 单对非屏蔽双绞线

传统以太网(比如100BASE-TX)需要两对线:一对发,一对收。100BASE-T1只用一对线,同时承载收发信号。怎么做到的?

  • 回声消除技术:PHY芯片内部有个减法器,把自己发出去的信号减掉,剩下的就是对方发来的信号。类似电话线路里的混合线圈。
  • 全双工通信:收发同时进行,互不干扰。

为什么要省这一对线?车里的线束又重又贵,能省一根是一根。而且单对线更细更软,布线方便。

2.2.2 信号幅度与噪声

100BASE-T1的信号幅度只有1V左右(差模),比传统以太网的2.5V低不少。低幅度意味着低功耗,但也意味着更容易受干扰。

我在项目中遇到过一个问题:某款OBD诊断仪在发动机启动瞬间,通信会断一下。查了半天,发现是启动电机产生的共模噪声把PHY芯片的接收器打懵了。后来在PHY前端加了个共模扼流圈,问题解决。

避坑指南:我曾经因为忽略了共模噪声,导致一个项目延期两周。100BASE-T1对共模噪声非常敏感,PCB布局时一定要把PHY芯片和连接器之间的走线尽量短,差分对要等长、紧耦合。

2.2.3 链路建立过程

100BASE-T1的链路建立不是一插就通的。它有个协商过程:

  1. Slave模式:上电后PHY先进入Slave模式,等待Master发来的时钟信号。
  2. Master/Slave协商:通过发送特定的脉冲序列,确定谁是Master(提供时钟),谁是Slave(恢复时钟)。
  3. 链路状态检测:双方确认信号质量OK后,Link Up信号拉高,通知MAC层可以开始通信。

这个过程大概需要几十毫秒。如果你在代码里发现Link状态一直为Down,别急着怀疑硬件,先看看Master/Slave配置对不对。

2.3 MAC层与PHY芯片选型

MAC层和PHY芯片,就像一对夫妻。MAC负责“动脑子”(协议解析、流量控制),PHY负责“干体力活”(信号收发)。

2.3.1 MAC层职责

MAC层在OSI模型里属于数据链路层的下半部分。它主要干这几件事:

  • 帧封装/解封装:加上前导码、目标MAC、源MAC、类型/长度字段,以及FCS校验。
  • CSMA/CD(载波监听多点接入/碰撞检测):全双工模式下其实用不到,但半双工模式必须支持。
  • 流量控制:通过Pause帧告诉对方“慢点发,我快撑不住了”。
  • 地址过滤:只接收目标MAC是自己的帧,或者广播帧、多播帧。

在DoIP协议栈里,MAC层主要负责把DoIP报文封装成以太网帧,然后丢给PHY发出去。

2.3.2 PHY芯片选型要点

选PHY芯片,我一般看这几个参数:

参数 说明 我的建议
速率 100Mbps还是1000Mbps? DoIP诊断用100Mbps足够,除非你要刷写大文件
接口类型 MII、RMII、RGMII RMII引脚少,适合MCU;RGMII适合高性能SoC
温度范围 车规级(-40°C ~ 125°C) 别省钱,工业级芯片在车里夏天会死给你看
唤醒功能 支持WoL(网络唤醒) 诊断场景需要,不然ECU得一直上电
EMC性能 辐射发射、抗扰度 看芯片的EMC测试报告,别等EMC测试不过再换

市面上常见的车载PHY芯片有:TI的DP83TC811、Microchip的LAN8770、NXP的TJA1101。我个人比较喜欢DP83TC811,因为它内置了诊断功能,可以检测线缆开路、短路。

小技巧:选PHY芯片时,一定要看它的寄存器手册。有些PHY的寄存器地址是标准化的(比如IEEE定义的0/1/2/3/4/5/6/7),但有些厂商会加私有寄存器。如果你要做跨平台驱动,尽量选标准寄存器兼容性好的芯片。

2.3.3 MAC与PHY的连接

MAC和PHY之间通过MII(介质独立接口)连接。MII有几种变体:

  • MII:16根数据线,速率100Mbps时时钟25MHz。引脚多,但兼容性好。
  • RMII:4根数据线,时钟50MHz。引脚少,但需要外部50MHz时钟源。
  • RGMII:4根数据线,双沿采样。速率1000Mbps时时钟125MHz。适合高速场景。

嗯,这里要注意:RMII虽然省引脚,但时钟抖动要求高。我曾经在一个项目里,因为PCB走线太长导致时钟抖动超标,PHY死活Link不上。后来把时钟源挪到PHY旁边,问题解决。

2.3.4 实际选型案例

假设我们要做一个DoIP诊断仪,MCU用的是NXP的S32K144,它内部集成了MAC层。那么PHY芯片怎么选?

  1. 接口:S32K144支持RMII,所以选RMII接口的PHY。
  2. 速率:100Mbps足够。
  3. 电压:S32K144的I/O是3.3V,PHY也要3.3V。
  4. 封装:QFN封装,方便手工焊接。

最后我选了Microchip的LAN8770。为什么?因为它有RMII接口,支持WoL,而且价格便宜。实际测试下来,Link时间在30ms以内,丢包率几乎为零。

总结一下:物理层和数据链路层是DoIP协议栈的基石。100BASE-T1用单对线实现了全双工通信,但代价是对噪声更敏感。PHY芯片选型要综合考虑速率、接口、温度、EMC等因素。MAC层和PHY芯片的配合,直接决定了通信的稳定性和可靠性。

下一章,我们会聊到IP层和传输层。到时候会讲到UDP和TCP在DoIP里的具体用法,以及怎么处理分包和重组。嗯,那才是真正开始写代码的地方。