4、混合网络网关设计:网关功能需求、路由策略(信号路由/报文路由)、网关硬件架构选型

好,咱们进入网关设计这个核心环节。说实话,混合网络能不能跑得顺,网关就是那个「交通枢纽」。我在好几个项目里都见过,网关选型没想清楚,最后整车网络各种丢包、延迟超标,甚至死锁。今天咱们就把网关的底裤扒干净。

4.1 网关功能需求:不只是「转发」那么简单

很多人以为网关就是个消息搬运工。其实不然。我习惯把网关的功能需求拆成三个层次:

  • 基础转发层:CAN FD 到 CAN FD、CAN FD 到以太网、以太网到以太网。这是基本功。
  • 协议转换层:CAN FD 的 DBC 信号要映射到以太网的 SOME/IP 或 DDS。这里坑最多。
  • 安全与管理层:防火墙、诊断路由、网络管理(比如 CAN 的 NM 和以太网的 SOME/IP-SD 协同)。

嗯,这里要注意,网关必须支持 多路同时转发。我遇到过某供应商的网关,CAN FD 转以太网时,CPU 占用率直接飙到 90%,导致诊断报文超时。后来一查,是 DMA 没开。

核心功能清单(我建议你写进需求文档里):

  • 支持至少 4 路 CAN FD(速率 5Mbps) + 2 路 100BASE-T1 以太网
  • 路由延迟:CAN FD 到 CAN FD < 500μs,CAN FD 到以太网 < 2ms
  • 支持信号级路由(Signal Routing)和报文级路由(PDU Routing)
  • 支持 DoIP(诊断 over IP)网关功能
  • 支持网络管理协同(CAN NM 唤醒以太网,反之亦然)

4.2 路由策略:信号路由 vs 报文路由

这是网关设计的灵魂。说白了,你要决定「转什么」和「怎么转」。

4.2.1 报文路由(PDU Routing)

最简单粗暴的方式。CAN FD 收到一帧报文,直接原封不动扔到以太网那边。好处是快,延迟低。坏处是浪费带宽——以太网那边可能只想要里面的一个信号,你却把整个 64 字节都传过去了。

我曾在某个项目中用过报文路由做快速转发,结果以太网负载直接超了 30%。后来改成信号路由才解决。

4.2.2 信号路由(Signal Routing)

这才是混合网络的精髓。网关把 CAN FD 报文拆开,提取出需要的信号,重新打包成以太网的 SOME/IP 事件或字段。

举个例子:

// CAN FD 报文 ID 0x123,包含信号:车速(0-15bit)、方向盘转角(16-31bit)
// 网关提取后,通过 SOME/IP 发布到以太网

// 路由配置表(伪代码)
RouteEntry {
  source: CANFD, ID=0x123
  signal: "车速", bitStart=0, bitLen=16
  target: ETHERNET, ServiceID=0x1001, InstanceID=1, EventID="VehicleSpeed"
}

为什么我推荐信号路由?因为以太网那边可以做 按需订阅。只有需要车速的 ECU 才去订阅,网关不用广播所有数据。这在域控架构里特别重要。

我的经验:信号路由的配置表一定要用工具自动生成。手动配?我见过一个项目配了 2000 条路由规则,最后有 3 条配反了,导致网关死循环。用 Vector 的 CANoe 或类似工具做一致性检查,能省很多 debug 时间。

4.2.3 混合路由策略

实际项目中,我通常这样用:

场景 路由方式 原因
诊断报文(UDS) 报文路由 需要完整 PDU,不能拆
周期性传感器数据 信号路由 减少以太网带宽占用
紧急事件(如碰撞) 报文路由 + 优先级标记 延迟要求 < 1ms
OTA 升级数据 报文路由 + 分段传输 数据量大,需可靠传输

4.3 网关硬件架构选型

硬件选型,说白了就是「用什么芯片」和「怎么搭」。我见过三种主流方案:

4.3.1 方案一:MCU 直连型

一颗高性能 MCU(比如 Infineon TC3xx、NXP S32K3)同时挂 CAN FD 控制器和以太网 MAC。优点是成本低、开发简单。缺点是 CPU 负担重,当 CAN FD 路数超过 4 路时,容易跑不满。

我记得有个项目用 TC397,4 路 CAN FD + 1 路以太网,CPU 占用率在 60% 左右。再加一路以太网,直接飙到 85%。

4.3.2 方案二:MCU + 独立以太网控制器

MCU 通过 SPI 或并行总线外挂一个以太网控制器(比如 Microchip LAN9252)。好处是 MCU 选型更灵活,坏处是 SPI 总线会成为瓶颈。我测过,SPI 时钟 40MHz 时,最大吞吐量也就 30Mbps,跑 100BASE-T1 有点勉强。

避坑指南:我曾经用 STM32H7 + LAN9252 做网关,发现 SPI 传输时 DMA 和 CAN FD 中断冲突,导致丢帧。后来加了 RTOS 的优先级管理才解决。如果你选这个方案,一定要做中断延迟测试。

4.3.3 方案三:MPU + 多核异构

这是目前高端网关的主流。比如 NXP S32G、Renesas R-Car S4。内部有 Cortex-A 核跑 Linux 或 QNX 做以太网协议栈,Cortex-R/M 核跑 RTOS 做 CAN FD 实时转发。核间通过共享内存或 RPMsg 通信。

我推荐这个方案,原因有三:

  • 隔离性好:CAN FD 的实时任务不会被以太网的协议栈阻塞
  • 扩展性强:加一路以太网,只是加个 PHY 的事
  • 安全可靠:A 核挂了,R 核还能继续转发 CAN FD 报文

当然,代价是开发复杂度高。你得搞定核间通信、内存管理、还有 Bootloader 的协同。嗯,这个我后面会专门讲。

4.4 硬件选型对比表

维度 MCU 直连 MCU + 独立控制器 MPU 多核异构
典型芯片 TC397, S32K3 STM32H7 + LAN9252 S32G, R-Car S4
CAN FD 路数 4-6 路 2-4 路 6-12 路
以太网吞吐 ~50Mbps ~30Mbps ~1Gbps
开发难度
BOM 成本
适用场景 入门级网关 过渡方案 域控/中央网关

4.5 我的选型建议

如果你现在要做一个新项目,我建议直接上多核异构方案。为什么?因为未来 3-5 年,车载网络一定是往域控和中央计算架构走。你现在用 MCU 直连,两年后要加功能,硬件就动不了了。

当然,如果只是做原型验证或者小批量,MCU 直连也能跑。我有个朋友用 TC399 做了个网关 demo,跑了 6 路 CAN FD + 2 路以太网,效果还行。但量产时发现,OTA 升级时 CPU 占用率 100%,诊断响应超时。最后还是换了 S32G。

嗯,网关设计这块,今天就先聊到这儿。下一节咱们会深入讲网关的软件架构,包括如何用 AUTOSAR 做路由配置,以及核间通信的坑。到时候见。

一句话总结:网关选型,先看路由策略,再看硬件能力。信号路由是混合网络的灵魂,多核异构是未来的方向。别为了省几块钱,把整车的网络性能搭进去。