4、以太网基础回顾:AVB/TSN协议簇、SOME/IP协议、DoIP协议

各位同学,今天我们聊聊以太网。别急着翻白眼,我知道很多人一听到“以太网”就想到办公室那根蓝色的网线。但在车载领域,以太网可不是用来上网冲浪的——它是未来网关的核心命脉。

我个人习惯把车载以太网理解成“高速公路”。传统的CAN、LIN就像乡间小道,走走停停还行。但到了自动驾驶时代,摄像头、激光雷达每秒产生海量数据,乡间小道肯定堵死。所以,我们需要一条高速路,还得有交通规则——这就是AVB/TSN、SOME/IP、DoIP这些协议要做的事。

4.1 AVB/TSN协议簇:时间敏感网络

先说说AVB(Audio Video Bridging),后来演变成了TSN(Time Sensitive Networking)。名字听起来高大上,说白了就是:让数据包准时到达

你想想看,传统以太网是“尽力而为”的——数据发出去,什么时候到?看运气。但在车里不行。比如刹车信号,晚到1毫秒可能就是一场事故。AVB/TSN就是来解决这个问题的。

核心机制:

  • 时钟同步(gPTP):所有节点共享同一个时间基准,精度达到纳秒级。我在项目中遇到过,如果时钟不同步,音视频流就会卡顿,画面和声音对不上。
  • 流量整形(Credit-Based Shaper):给不同数据流分配“信用额度”,保证高优先级数据优先发送。
  • 预留带宽(Stream Reservation):提前跟交换机说好:“我要传这段视频,给我留100M带宽。”交换机说:“好,我记住了。”

嗯,这里要注意:AVB/TSN不是单一协议,而是一整套协议簇。包括IEEE 802.1AS(时钟同步)、802.1Qav(流量整形)、802.1Qbv(时间感知整形)等等。做网关开发时,你至少得知道这些名字,不然跟芯片厂商开会都听不懂他们在说什么。

避坑指南:我曾经在一个项目中,TSN的时钟同步配置错了,结果摄像头数据总是晚到50微秒。排查了三天,最后发现是gPTP的域值设错了。所以,时钟同步的配置一定要反复核对

4.2 SOME/IP协议:面向服务的通信

接下来是SOME/IP(Scalable service-Oriented MiddlewarE over IP)。这个名字很长,但核心思想很简单:把汽车功能变成“服务”

传统CAN通信是“信号导向”的——你定义好ID,发信号,收信号。但SOME/IP是“服务导向”的——一个节点提供服务(比如“获取车速”),另一个节点调用这个服务。有点像你手机上的App,你点一下“叫外卖”,后台就调用一堆服务(定位、支付、订单)。

我个人觉得,SOME/IP最大的好处是灵活性。你想想看,传统CAN要加一个新功能,得重新定义信号矩阵,麻烦得很。但SOME/IP只需要发布一个新服务,其他节点发现它、调用它就行。

特性 传统CAN信号 SOME/IP服务
通信模式 周期性发送 事件触发/请求-响应
灵活性 低(需预定义矩阵) 高(动态发现服务)
带宽利用率 低(不管有没有变化都发) 高(有变化才发)
适用场景 控制信号(如车窗升降) 复杂功能(如ADAS感知)

SOME/IP的通信模式主要有两种:

  • 请求-响应(Request/Response):客户端问,服务端答。比如“当前车速是多少?”——“60km/h”。
  • 事件通知(Event/Notification):服务端主动推送。比如“车速超过120了,通知所有订阅者”。

在实际开发中,SOME/IP的序列化(Serialization)是个坑。数据怎么打包成字节流?怎么对齐?我曾经见过一个团队,因为结构体对齐方式不一致,导致两个ECU之间通信全是乱码。所以,一定要用AUTOSAR的序列化规范,别自己瞎搞

4.3 DoIP协议:诊断 over IP

最后说说DoIP(Diagnostic over Internet Protocol)。这个好理解——把传统的UDS诊断协议搬到以太网上。

传统诊断用CAN,速度慢,一次只能传几KB数据。但DoIP呢?带宽高,一次能传几MB。你想想看,刷写一个ECU的固件,用CAN可能要半小时,用DoIP可能只要几分钟。

DoIP的核心流程是这样的:

  1. 车辆发现:诊断仪发送广播消息,问“谁在线?”车辆回复“我在这里,我的IP是xxx”。
  2. 路由激活:诊断仪说“我要开始诊断了”,车辆回复“好的,激活成功”。
  3. 诊断通信:发送UDS请求(比如读取故障码),车辆回复UDS响应。

注意:DoIP的“路由激活”阶段有个安全机制——诊断仪必须发送正确的“激活类型”和“OEM特定标识”。我曾经在测试时,因为激活类型写错了,车辆一直不响应,折腾了半天才发现是文档看漏了一行。

DoIP还有一个重要概念叫逻辑地址。每个ECU都有一个逻辑地址(比如0x0001代表网关,0x0010代表BCM)。诊断仪通过逻辑地址来定位目标ECU,而不是通过IP地址。为什么?因为IP地址可能会变(比如DHCP分配),但逻辑地址是固定的。

4.4 知识体系总览

好了,讲了这么多,我画了一张图帮你梳理一下。这张图展示了以太网在车载网关中的核心协议栈:

车载以太网核心协议栈 应用层 SOME/IP(服务发现与调用) | DoIP(诊断通信) 传输层 TCP(可靠传输) | UDP(高效传输) 网络层 IPv6(推荐) | IPv4(兼容) 数据链路层 AVB/TSN(时间同步、流量整形、带宽预留) 物理层:100BASE-T1 / 1000BASE-T1

从这张图可以看得很清楚:AVB/TSN在数据链路层,负责“准时到达”;SOME/IP和DoIP在应用层,负责“怎么通信”和“怎么诊断”。它们各司其职,共同构成了车载以太网的通信骨架。

最后说一句:这些协议看起来复杂,但别怕。你只要抓住核心——AVB/TSN管时间,SOME/IP管服务,DoIP管诊断——剩下的细节,用到的时候再查文档就行。我做了这么多年网关,也没把每个协议的每个字段都背下来。关键是理解设计思想,知道什么时候该用哪个协议。

本章小结:

  • AVB/TSN:解决以太网“不确定延迟”的问题,核心是时钟同步、流量整形、带宽预留。
  • SOME/IP:面向服务的通信协议,让ECU之间像调用API一样通信。
  • DoIP:把UDS诊断搬到以太网上,速度快、效率高,适合刷写和远程诊断。

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