ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

车载以太网协议架构详解:从CAN到SOME/IP的演进之路

车载以太网协议架构详解:从CAN到SOME/IP的演进之路 最近在帮朋友梳理一套智能座舱的网络方案聊来聊去还是绕不开车载以太网。以前搞汽车电子CAN总线基本就是默认选项可到了智能驾驶和座舱域控这块摄像头的原始数据流、激光雷达点云、屏幕上的高码率视频哪一个单拎出来都不是CAN能扛得住的。车载以太网这个词这两年几乎成了汽车圈必聊的话题但真正能把概念和协议架构讲明白的人其实不多。这篇文章是车载以太网系列的第一篇先把地基打牢把车载以太网为什么会出现、它的协议架构长什么样、和传统以太网到底有什么区别讲透适合正在从CAN转向以太网的嵌入式工程师、汽车电子测试工程师以及想了解整车EEA演进方向的产品经理和在校学生参考。后面的系列文章我会再展开SOME/IP、DoIP、TSN这些具体协议和测试实操。1. 为什么传统车载总线顶不住了1.1 智能汽车的数据量涨到离谱老一批做车载网络的人对CAN总线的感情是很深的。经典CAN总线最高速率也就1Mbps实际量产车常用的是500kbps哪怕是后来推出的CAN FD标称速率也就是8Mbps左右实际使用还要受线束、终端电阻、节点数量的制约。放在十年前这个带宽足够控制发动机、变速箱、ABS这些动力底盘节点因为这类控制信号每个周期也就几百字节偶尔还有几个字节的诊断报文带宽占用率根本不高。但现在的车完全不是这个玩法了。一个800万像素的高清摄像头原始数据带宽轻松超过2Gbps哪怕做一定压缩也需要数百Mbps的传输能力。再加上毫米波雷达、激光雷达、车规级高精地图、多块4K大屏、车载音频系统、OTA升级包这些数据全部汇总到域控制器或者中央计算平台CAN这种“乡间小道”根本没法走。车载以太网一上来就是100Mbps起步千兆、2.5G、5G甚至10G也在逐步上车相当于直接在汽车内部修了一条高速公路。1.2 汽车电子电气架构从分布式走向集中式传统汽车电子电气架构是分布式的车上几十个ECU各自管一摊事ECU之间通过CAN、LIN、FlexRay这些总线两两相连。这种架构下通信数据量不大逻辑也相对简单。可一旦上了智能驾驶和智能座舱你会发现分布式架构根本改不动线束又重又贵软件升级困难安全隔离也麻烦。于是整车厂开始向域集中式架构迁移典型的就是把车分成动力域、底盘域、座舱域、自动驾驶域和车身域每个域有一块高性能的域控制器域和域之间通过一组高速骨干网络互联。这个骨干网络选什么目前来看车载以太网是最合适的答案。它不仅能提供足够带宽还能支持高可靠性、低时延、时间同步并且天然具备IP网络的灵活性和生态基础。换句话说车载以太网不是简单替代CAN而是整个E/E架构升级的关键基础设施。1.3 线束重量和成本也是硬指标有人可能会问能不能直接用传统以太网那套比如把电脑里的千兆以太网搬到车上理论上可以但实际工程上问题很多。汽车内部空间有限不可能每个节点都拉四对双绞线更不可能用RJ45那种又大又脆弱的连接器。传统以太网的物理层设计主要面向数据中心的短距离高速传输对电磁兼容的要求没有汽车环境那么苛刻。车载以太网干脆把一对双绞线做成了传输介质配合小型化连接器重量更轻、成本更低、布线更灵活这才是它能在车上落地的重要原因。2. 车载以太网到底是什么2.1 不是简单换了个物理层很多人第一次接触车载以太网会觉得这不就是以太网换了个接头儿吗其实没那么简单。车载以太网在数据链路层往上确实和传统以太网高度一致用的还是802.3的帧格式、MAC地址、IP协议栈这意味着大量的软件生态可以直接复用。但物理层是全新的设计。以最常用的100BASE-T1为例它对应的标准是IEEE 802.3bw用的是一对非屏蔽双绞线UTP传输100Mbps。为了在一对线上实现全双工通信100BASE-T1采用了PAM3编码和回声抵消技术这跟传统100BASE-TX用的两对双绞线、PAM5编码完全不是一回事。物理层不同带来的直接影响就是链路建立方式、信号电平、线束长度限制、连接器形态、电磁兼容特性都变了这也是为什么不能用普通交换机直接连车上的以太网节点。对比项传统100BASE-TX车载100BASE-T1参考标准IEEE 802.3uIEEE 802.3bw传输介质两对双绞线一对非屏蔽双绞线编码方式4B/5B MLT-3PAM3双工方式双工基于回声抵消的全双工连接器RJ45小型化车规连接器典型长度100m15m左右电磁兼容设计普通环境满足汽车级EMC要求2.2 车载以太网的物理层家族车载以太网不是只有100Mbps一个档位现在已经有了一整套物理层家族。低速场景有10BASE-T1S用一对线支持10Mbps还支持多点线性拓扑成本非常低业界经常拿它来替代一部分CAN和LIN。主流场景是100BASE-T1已经大量用在全景影像、域控间通信、诊断刷写这些地方。高速场景有1000BASE-T1对应的标准是IEEE 802.3bp用一对线实现千兆速率适合接高清摄像头和高速骨干网络。再往上IEEE 802.3ch定义了2.5Gbps、5Gbps、10Gbps三条车载以太网物理层标准主要面向未来的中央计算平台和自动驾驶传感器数据汇聚。整体来看车载以太网的选型完全看场景需求不是所有地方都要千兆也不是CAN马上就会被淘汰更常见的是“CANFLEXRAY车载以太网”共存的过渡局面。2.3 车载以太网到底能干什么从应用场景来说车载以太网目前主要集中在几个方向。第一是骨干网络用于域控制器之间的数据交互这种场景要求带宽高、时延低、可靠性强通常还会叠加TSN来做确定性传输。第二是摄像头和显示器的音视频传输这里强调带宽和同步AVB/TSN的协议族派上用场。第三是诊断和软件刷写传统的UDS over CAN速度太慢写一个全量升级包可能要一个晚上换到DoIP之后一根网线插在OBD口上几分钟就能刷完一个域控制器的固件。第四是面向服务的通信传统CAN通信是面向信号的一个信号一个报文周期发送而车载以太网更适合跑SOME/IP这种面向服务的中间件协议让上层应用像调用函数一样去请求和订阅服务。3. 车载以太网协议架构逐层拆解3.1 从OSI模型映射到汽车工程场景聊协议架构绕不开OSI七层模型。车载以太网也同样遵循分层的思想只是在实际使用中汽车工程师更关心的是物理层、数据链路层、网络层、传输层和应用层这五层再往下微拆就是接口层。分层最大的好处是解耦物理层换了上层软件不用改应用层从UDS换成SOME/IP底层网络也不用动。这跟软件工程里的模块化是同一个道理。OSI层级车载以太网中的实现典型职责应用层SOME/IP、DoIP、UDS、AVB应用服务调用、诊断、音视频流传输传输层TCP/UDP可靠传输、端口寻址网络层IPv4/IPv6地址分配、路由、分片重组数据链路层以太网MAC、VLAN、QoS帧封装、优先级调度、VLAN隔离物理层100BASE-T1、1000BASE-T1等比特流编解码、信号传输、PMA测试3.2 物理层链路是怎么建立的物理层在车载以太网里承担的任务比传统以太网更多。以100BASE-T1为例两个节点之间一开始是没有任何时钟和信号参考的PHY芯片上电之后会经历多个状态的协商过程先是同步建立双方通过发送特定的训练序列来恢复时钟和调整均衡器然后进行链路协商确认主从模式最后进入数据模式这时候MAC层才能向上报告Link Up。这个过程和传统以太网的Auto-Negotiation有点类似但细节完全不同。实际工程中很多人遇到“网口起不来”的问题往往不是软件配置错误而是物理层没完成Training。比如有一个节点没上电、线序接反了、连接器针脚虚焊或者线缆质量不行PHY就一直卡在同步阶段MAC层永远看不到Link Up。遇到过一盏灯不停闪但就是不通的情况最后排查下来是转接线的屏蔽层没有接地导致的。物理层还有一个绕不开的话题就是PMA测试。PMA全称是Physical Medium Attachment通俗讲就是物理介质附加层它负责把比特流转换成适合在双绞线上传输的电信号。PMA测试就是对PHY芯片这一层的一致性测试包括发射端的信号幅度、上升下降时间、抖动、眼图以及接收端的回波损耗等。很多芯片在实验室里功能正常但过不了PMA测试原因往往是PCB走线阻抗控制不好或者参考地平面处理不当。这个后面测试章节我会单独展开。3.3 数据链路层VLAN和MAC是隔离调度的关键数据链路层的核心是MAC控制器它负责封装以太网帧、计算CRC、管理MAC地址。车载以太网里还有一个非常重要的机制就是VLAN也就是IEEE 802.1Q。为什么要VLAN因为一台域控制器上可能同时跑着动力相关的控制报文、摄像头视频流、诊断报文和娱乐数据如果不做隔离一个广播风暴就能把整个网络打瘫安全关键报文也可能被大流量视频饿死。VLAN的作用就是把物理网络在逻辑上切成多个子网络。比如座舱域控制器的管理报文打上VLAN 10的标签摄像头数据打上VLAN 20的标签到交换机后再按照VLAN标签转发到对应端口。配合VLAN标签里的PCP字段也就是Priority Code Point可以给报文设置0到7的优先级交换机在出口会优先转发高优先级的数据包这是实现QoS的基础。实际配置VLAN的时候容易踩坑。有些工程师只在交换机上配了VLAN却忘了在终端节点比如SOC的网卡驱动里打标签结果数据包到了交换机直接被丢弃现象就是单播能通、组播不通或者不同VLAN之间悄悄互相访问安全隔离形同虚设。我的建议是先画一张VLAN规划表把设备、端口、VLAN ID、IP网段、优先级全部列清楚再动手配置别急着写命令。3.4 网络层与传输层IP不是万能的但没IP是万万不能的网络层和传输层的角色车载以太网和传统IP网络没有本质区别。汽车内部可以使用IPv4也可以使用IPv6目前量产车还是以IPv4为主但面向未来的车载通信需求比如V2X、OTA、大规模设备管理IPv6的优势很明显地址空间大配置也灵活。在传输层TCP和UDP的选型逻辑也跟普通网络一致要求可靠传输就选TCP比如DoIP、SOME/IP里服务发现的方法对时延敏感、丢一两个包无所谓的就选UDP比如音视频流、摄像头数据。车载场景下因为带宽相对有限报文格式设计得非常紧凑一个SOME/IP报文里能不带头部扩展就不带能走UDP就不走TCP哪怕是可靠通信很多时候也在应用层自己做确认和重传机制而不是完全依赖TCP。3.5 应用层UDS换成了DoIP信号换成了服务应用层是汽车工程师见面最多的地方。传统诊断走的是UDS over CAN物理层是CAN传输层是ISO-TP数据被切成一段一段塞进CAN报文里。到了车载以太网诊断升级为DoIP也就是Diagnostics over IP直接基于TCP/IP传输速度提升非常明显而且可以直接沿用UDS的语义只是传输通道从CAN换成了IP。除了诊断还有一个更重要的应用层协议是SOME/IP。传统CAN面向信号的一个特点是每个信号周期性地发送不管对方有没有需求带宽浪费严重。SOME/IP则是面向服务的通信一个ECU把自己能提供的功能Service发布出来另一个ECU在需要的时候通过服务发现机制去查找并订阅用的时候才通信不用就不占用网络资源。这种设计思路和互联网里的微服务非常像所以很多人说SOME/IP就是汽车界的RESTful API。4. 几个绕不开的骨干协议栈4.1 SOME/IP面向服务的通信大脑SOME/IP的全称是Scalable service-Oriented MiddlewarE over IP核心目标是在车载网络中实现服务发现和服务调用。它的逻辑可以这样理解服务端启动后周期性地广播自己的服务实例信息客户端想要调用某个服务先发出服务发现请求服务端收到后回复一个包含服务地址、端口、协议类型的响应之后双方就可以直接点对点通信不再经过中央节点。SOME/IP的报文格式比较紧凑头部的Message ID用来唯一标识一个服务方法或事件Request ID用来区分同一服务下的不同调用者。实际项目中我最常遇到的SOME/IP问题有两个。一个是服务发现不生效原因通常是防火墙过滤了UDP广播或者VLAN隔离导致广播报文没法到达目标ECU另一个是服务启动顺序问题如果服务端没有在客户端发起发现请求之前完成注册客户端就会一直处于找服务状态直到超时。解决这类问题建议先在仿真环境里单独抓包验证服务发现流程再去整车上排查VLAN和路由。4.2 DoIP让刷写诊断效率翻倍DoIP主要解决的是诊断和OTA刷写场景下的带宽痛点。传统UDS over CAN刷一个ECU的固件慢得让人崩溃DoIP把整个链路切换到以太网物理层从CAN换到100BASE-T1或千兆以太网TCP连接直接把UDS报文封装进IP包刷写速度提升几十倍不成问题。DoIP本身有一套完整的会话管理机制包括车辆发现、路由激活、诊断消息传输等阶段。诊断仪接入车载以太网之后先发送车辆识别请求车载网关会回复一辆车上所有支持DoIP的ECU的信息然后诊断仪选择目标ECU激活路由建立TCP连接之后就是标准的UDS诊断流程。实际操作中有一个细节经常被忽略DoIP的TCP连接建立了不代表可以一直用ECU通常会设置一个很短的保活时间长时间不发诊断请求连接就被踢掉了所以刷写工具里的超时和保活机制一定要做好。4.3 TSN与AVB让以太网在车上“准时准点”传统以太网是尽力而为的网络数据包什么时候到没人能给你保证。可汽车上的摄像头画面、音频流、转向控制指令都有严格的时延要求这时候就要引入TSNTime-Sensitive Networking和AVB。TSN是一组IEEE标准的总称核心目标是给以太网增加确定性让某些流量在指定的时间窗口内到达。其中最基础的是时间同步标准是IEEE 802.1AS也就是gPTP。只有全网节点时间对齐到纳秒级才能让后面的流量调度精确执行。再上一层是Qbv时间感知整形交换机按照预设的时间门控表为高优先级流量留出专用的发送窗口低优先级流量只能让路。实际调TSN的时候时钟同步的最大问题往往不是算法而是电缆长度和PHY延迟不一致带来的偏差。比如两条并列的线缆一根0.3米、一根5米gPTP如果没做路径延迟校正同步精度可能差出几百纳秒在时间敏感场景里就会丢帧。5. 用STM32搭一个车载以太网调试环境5.1 硬件平台怎么选如果你想把车载以太网跑起来不一定要买整车或者域控制器用STM32搭一个最小环境是完全可行的。这里推荐STM32H7系列的芯片比如STM32H743、STM32H750它们内部集成了10/100M以太网MAC控制器支持MII和RMII接口可以直接外接一个车规级车载以太网PHY芯片。PHY芯片的选择上常见的100BASE-T1 PHY有NXP的TJA1100/TJA1101、Marvell的88EA1512等这些芯片虽然标注是车规级但在开发板上用起来也不复杂MII接口按时钟和数据线一一对接外部只需要提供25MHz或者50MHz的参考时钟。还需要留意的是有些PHY芯片要求通过SPI或MDIO接口配置寄存器才能进入正常工作模式初始化代码一定要把PHY ID读出来确认一下防止买到试产物料。5.2 软件栈与最小工程搭建软件层面最难的是“把底层跑通”而不是上层协议。我建议用STM32CubeMX生成基础工程把ETH、DMA、中断配置好然后集成一个轻量级TCP/IP协议栈。LwIP是首选开源、资料多、对资源要求也不高。但有一点要特别注意LwIP默认的底层接口是基于普通以太网PHY的如果你用的是100BASE-T1 PHYMAC和PHY之间依然是标准MII接口所以LwIP那层基本不用改但PHY的驱动和链路检测逻辑必须自己适配。模块推荐选型说明MCUSTM32H743/H750内置MACMII接口丰富PHYTJA1100/TJA1101车载100BASE-T1 PHY需MDIO配置网络协议栈LwIP 2.x轻量适配裸机或RTOS调试工具Wireshark 转接板抓取以太网报文分析协议交互工程跑通之后第一件事不是急着调SOME/IP而是先用PING验证网络连通性再分别用UDP和TCP收发自定义测试数据。如果PING不通优先抓PHY的中断标志和LwIP的Link状态回调确保以太网物理层链路已经Up而不是一头扎进IP层排查。5.3 从裸跑以太网到采集真实报文拿到开发板之后先把最原始的以太网帧收发调通。用STM32的MAC发一个特殊MAC地址的帧用PC端Wireshark抓包确认字段正确然后用PC发一个广播帧STM32这边在串口打印出接收到的原始字节。这一步看起来基础但能把DMA配置、中断优先级、缓存对齐这类问题提前暴露出来。等到链路完全稳定了再开始集成SOME/IP或者DoIP的协议栈我建议从DoIP入手因为它的流程更直观协议本身也不复杂。用诊断仪软件或者Python脚本封装一个UDS请求通过TCP发给STM32STM32解析DoIP头把UDS服务ID拿出来执行逻辑再回一个响应帧。这个流程走通你对整车刷写的基本原理就心里有数了。6. 车载以太网测试与常见坑实录6.1 测试层级怎么划分车载以太网测试一般分成三个层次。第一层是物理层一致性测试也就是前面提到的PMA测试主要验证PHY芯片和外围电路的信号质量是否满足标准比如发射幅度、眼图、抖动、回波损耗。PMA测试需要用专用的测试治具搭成link partner然后用高速示波器测量波形再利用一致性测试软件自动生成报告。很多人以为这是芯片原厂的事其实整车的线束、连接器、PCB走线都会影响测试结果所以OEM和Tier 1在项目开发阶段都会做。第二层是协议一致性测试验证设备对各种协议的实现是否符合AUTOSAR、IEEE标准。比如SOME/IP服务发现报文格式是否正确、DoIP路由激活状态机是否正常、TSN的门控调度是否精准。这一层通常用到CANoe这种专业总线工具也支持脚本自动化一条一条跑测试用例比人工点鼠标高效得多。第三层是互操作性和实车测试把多个供应商的设备真正连到一起跑起来看看通信是否顺畅还要加上故障注入、电磁兼容、温湿度等可靠性测试。很多时候芯片单独测试全过实车一接上就出问题大概率是互操作性和系统抗干扰能力不到位。6.2 PMA一致性测试的关键点PMA测试在很多人眼里就是“拿示波器点几个按钮等报告”。实际跑过几轮就会知道光是测试环境的搭建就能坑你半天。一是测试治具必须符合标准。100BASE-T1的PMA测试不是简单把探头夹在线上就行一般要用OPEN Alliance规定的测试夹具把PHY芯片的信号引出来再连到高速示波器上。夹具本身如果手工焊接或者使用劣质连接器频率升高后回波损耗就上来了测出来的眼图全是毛刺你甚至分不清是芯片问题还是治具问题。二是逻辑分析仪和示波器的Trigger要设置对。测发射端的时候示波器要在启动阶段捕捉训练序列测试软件也要正确配置信号源。很多人测眼图用错了码型测出来的结果自然不对。三是板级设计对PMA结果影响极大。PHY芯片和连接器之间的差分走线阻抗控制在100欧姆左右走线要尽量短、对称参考地完整过孔不要随意打在差分线上。我见过一块板子PHY配置完全正确、软件都跑通了就是PMA测试不过最后发现是连接器附近有一根直角走线回波损耗超了一点点锉掉重改之后一次通过。6.3 常见问题速查表现象可能原因排查思路网口一直Link DownELA连接器没插紧、PHY未完成训练、线序接反检查PHY寄存器状态、确认电源和时钟、换线测试Link Up但PING不通IP配置错误、VLAN标签不匹配、MAC没有学到用Wireshark抓包看ARP是否正常检查VLAN ID广播风暴导致网络瘫痪VLAN隔离未配置、组播数据没有约束为不同业务划分VLAN关闭不需要的组播源SOME/IP服务发现超时VLAN把UDP广播过滤了、服务端未启动单独抓包确认SD报文是否到目标节点再查链路刷写工具连接不稳定DoIP保活机制超时、TCP连接被踢适当缩短诊断请求间隔客户端做自动重连PMA测试眼图不过PCB阻抗不连续、治具质量差、时钟抖动大换高质量夹具检查差分走线阻抗和参考地6.4 一点老油条的个人心得车载以太网这个东西上手门槛没有想象的那么高但真正搞懂需要时间。我印象最深的一件事是早期帮一个项目调100BASE-T1的链路稳定性软件配置检查了无数遍都正常最后发现是线束没有用规范要求的屏蔽层接地方式导致车载环境下一上电干扰就大链路时断时续。从那以后我在每个项目开始前都要先搭一套标准的物理层测试环境哪怕后面时间紧也会先确认PHY的寄存器状态、Link状态和信号质量再往上走协议和应用层。这也是我想对刚入行的朋友说的车载以太网的坑大多数不在协议栈而在物理层和细节。下一篇文章我准备展开讲SOME/IP的完整服务发现流程和调试方法顺便把TSN时间同步在整车上的典型配置做一次演示。到时候咱们接着聊。
返回列表