2、OSI模型与车载以太网:OSI七层模型回顾、车载以太网物理层、车载以太网数据链路层
2.1 先聊聊OSI七层模型
说实话,很多做车载的工程师一听到OSI七层模型就头疼。我刚开始接触的时候也一样,觉得这东西太抽象了。但后来在实际项目中,我发现不理解它,你根本搞不懂网络问题出在哪。
OSI模型,说白了就是把网络通信这件事拆成了七层。每一层只管自己的事,上下层之间通过标准接口沟通。这样做的好处是什么?你想想看,物理层换了介质,上层代码不用改。数据链路层换了协议,应用层照样跑。
我习惯把这七层分成两组:
- 下四层(物理层、数据链路层、网络层、传输层):负责数据怎么传过去
- 上三层(会话层、表示层、应用层):负责数据传过去以后怎么用
在车载以太网里,我们最关心的是下面两层——物理层和数据链路层。为什么?因为车载环境对这两层的要求和传统IT网络完全不一样。
核心观点:车载以太网不是简单地把办公室里的以太网搬到车上。它在物理层和数据链路层做了大量定制,才能满足车规级的EMC、延迟和可靠性要求。
2.2 车载以太网物理层——这里水很深
物理层,就是负责把比特流变成电信号或者光信号,在介质上传输。传统以太网用RJ45连接器加四对双绞线,但车载环境不行。
为什么不行?
- 车内空间有限,线束越少越好
- 电磁兼容性要求极高,传统以太网辐射太大
- 温度范围宽,振动大,连接器要牢靠
所以车载以太网物理层走了另一条路——单对以太网(Single Pair Ethernet,SPE)。只用一对双绞线,同时传输数据和供电。
我记得第一次在项目里用100BASE-T1的时候,供应商跟我说这个物理层芯片能抗住-40°C到125°C。我当时还不太信,后来在环境箱里实测,确实稳如老狗。
2.2.1 100BASE-T1 vs 1000BASE-T1
| 参数 | 100BASE-T1 | 1000BASE-T1 |
|---|---|---|
| 线对数量 | 1对 | 1对 |
| 速率 | 100 Mbps | 1 Gbps |
| 最大传输距离 | 15米 | 15米 |
| 调制方式 | PAM3 | PAM4 |
| 典型应用 | 诊断、OTA、摄像头 | ADAS、域控制器互联 |
这里有个坑,我提醒一下大家。100BASE-T1和1000BASE-T1的物理层芯片不能混用。我曾经在一个项目里,想着反正都是单对线,能不能兼容一下?结果发现电平标准和编码方式完全不同,根本不通。
避坑指南:100BASE-T1使用PAM3调制,而1000BASE-T1使用PAM4。两者物理层不兼容,设计时一定要明确选型。
2.2.2 物理层的关键指标
做车载以太网设计,你至少得关注这几个参数:
- 回波损耗(Return Loss):信号反射越小越好,我见过因为连接器阻抗不匹配导致通信失败的案例
- 串扰(Crosstalk):单对线没有近端串扰问题,但要注意线束间的远端串扰
- 电磁辐射(EMI):车载以太网必须满足CISPR 25 Class 5标准,否则过不了EMC测试
嗯,说到EMC,我印象特别深。有一次我们在做整车EMC测试,发现100BASE-T1的线束在某个频点辐射超标。排查了半天,最后发现是线束的屏蔽层接地方式不对。改成360°环接后,问题就解决了。
2.3 车载以太网数据链路层——MAC与LLC
数据链路层,负责把物理层传来的比特流组装成帧,还要做错误检测和流量控制。在车载以太网里,这一层有两个子层:
- MAC子层(Media Access Control):负责帧的封装/解封装、寻址、冲突检测
- LLC子层(Logical Link Control):负责复用上层协议,提供服务接口
车载以太网的数据链路层和标准以太网基本一致,但有几个地方做了调整。
2.3.1 帧格式
车载以太网用的帧格式和IEEE 802.3标准一样。我直接贴一个典型的帧结构:
+--------+--------+--------+--------+--------+--------+--------+
| 前导码 | 帧定界符 | 目的MAC | 源MAC | 类型/长度 | 数据 | FCS |
| 7字节 | 1字节 | 6字节 | 6字节 | 2字节 | 46-1500| 4字节 |
+--------+--------+--------+--------+--------+--------+--------+
这里要注意的是,车载以太网通常使用VLAN标签。为什么?因为车内网络需要做优先级划分。比如ADAS的数据优先级最高,空调控制的数据优先级最低。VLAN标签里的PCP字段就是干这个的。
个人经验:我建议在车载以太网设计中,至少划分3个VLAN优先级:安全相关(最高优先级)、车身控制(中优先级)、信息娱乐(低优先级)。这样能保证关键数据的实时性。
2.3.2 MAC地址管理
车载以太网的MAC地址管理和传统网络不太一样。传统网络里,MAC地址是烧录在网卡上的。但在车上,很多ECU的MAC地址是软件配置的。
为什么会这样?因为车载网络的生产流程决定了。ECU在产线上先刷软件,再装车。如果MAC地址写死在硬件里,产线管理会很麻烦。
我经历过一个项目,因为MAC地址冲突导致两台摄像头无法同时工作。排查了两天才发现,是供应商把两个设备的MAC地址写成了同一个。从那以后,我要求所有供应商必须提供MAC地址分配表,并且在产线上做唯一性校验。
2.3.3 流量控制与暂停帧
车载以太网支持IEEE 802.3x流量控制。当接收端缓冲区快满时,会发送一个暂停帧(Pause Frame),让发送端停一停。
但这里有个问题——暂停帧会影响实时性。你想想看,如果ADAS摄像头正在传输关键数据,突然收到暂停帧,那画面就卡住了。所以我在做ADAS网络设计时,一般会禁用流量控制,改用更精细的调度策略。
// 暂停帧结构示例
struct pause_frame {
uint8_t destination_mac[6]; // 01-80-C2-00-00-01
uint8_t source_mac[6];
uint16_t ethertype; // 0x8808
uint16_t opcode; // 0x0001 (暂停)
uint16_t pause_time; // 暂停时间,单位512比特时间
uint8_t padding[42];
uint32_t fcs;
};
2.4 物理层与数据链路层的交互
这两层之间通过MII(Media Independent Interface)接口通信。MII有几种变体:
- MII:原始版本,25MHz时钟,4位数据总线
- RMII:简化版,减少引脚数
- RGMII:千兆版,时钟频率125MHz
- SGMII:串行版,用差分对传输
在车载以太网里,我比较推荐用RGMII或者SGMII。为什么?因为MII的引脚太多,占PCB面积。RGMII只需要12根线,SGMII更少,只要4根差分对。
不过要注意,RGMII对时钟抖动比较敏感。我曾经在一个项目里,因为PCB走线长度不匹配,导致RGMII的时钟和数据不同步。后来加了等长布线规则才解决。
2.5 小结
这一章我们聊了OSI模型在车载以太网中的映射关系。物理层从传统以太网的四对线变成了单对线,数据链路层保留了标准帧格式但增加了VLAN和流量控制等定制功能。
说白了,车载以太网就是在标准以太网的基础上,针对车规环境做了减法(减少线对)和加法(增加优先级和可靠性机制)。理解了这个思路,后面学网络层和传输层就会轻松很多。
下一章,我们聊聊车载以太网最核心的协议——AVB和TSN。这两个东西,才是车载网络实时性的真正保障。