通信协议基础:车载网络协议概览
各位好,欢迎来到第二章。这一章我们聊聊车载网络里的那些“话”——CAN、LIN、以太网。说白了,就是座舱里各个设备之间怎么“聊天”。
你想想看,一个座舱域控制器要同时跟仪表、中控、HUD、后排娱乐屏、空调面板、方向盘按键打交道。如果每个设备都各说各的,那不乱套了?所以,我们需要一套统一的“语言规则”,这就是通信协议。
为什么需要多种协议?
有人可能会问:为什么不用一种协议搞定所有?原因很简单——成本和需求不同。
举个例子。车窗升降开关只需要传递“升”或“降”两个信号,数据量极小,用高速协议就是浪费。而仪表盘要显示导航地图、视频流,数据量大,低速协议又扛不住。
所以,车载网络里就形成了“分层搭配”的局面:
- 低速、低成本:LIN 总线,用于门窗、座椅、灯光
- 中速、高可靠:CAN 总线,用于动力、底盘、车身控制
- 高速、大带宽:车载以太网,用于 ADAS、信息娱乐、OTA
核心观点:没有最好的协议,只有最合适的协议。座舱域控制器往往是“多协议交汇点”,你得懂它们各自的脾气。
CAN 总线:车载网络的“老大哥”
CAN(Controller Area Network)是博世在 80 年代发明的,到现在依然是车载网络的中流砥柱。我最早接触 CAN 是在做车身控制模块的时候,那时候觉得这东西真结实——两根线,差动传输,抗干扰能力极强。
CAN 的特点
- 多主通信:任何节点都可以主动发消息,不需要主机轮询
- 基于优先级仲裁:ID 越小,优先级越高,总线冲突时自动仲裁
- 最高速率 1 Mbps(CAN 2.0),CAN FD 可达 8 Mbps
- 数据帧最多 8 字节(CAN FD 最多 64 字节)
避坑指南:我曾经在一个项目中,CAN 总线莫名其妙丢帧。查了两天才发现,是终端电阻没焊好。记住:CAN 总线两端必须各有一个 120Ω 终端电阻,否则信号反射会导致通信失败。
CAN 数据帧结构
一个标准 CAN 数据帧长这样:
SOF | 11位ID | RTR | IDE | r0 | DLC | 数据段(0-8字节) | CRC | ACK | EOF
嗯,看着有点复杂。但你只需要记住:ID 决定了优先级,DLC 告诉你有几个数据字节。实际开发中,我们更关心的是“ID 怎么分配”和“数据怎么解析”。
LIN 总线:低成本的小弟
LIN(Local Interconnect Network)是 CAN 的简化版。它只有一根线,速率最高 20 kbps。说白了,就是给那些“不着急”的设备用的。
我做过一个项目,用 LIN 控制座椅通风。每个座椅有一个 LIN 从节点,主节点是座舱域控制器。主节点每隔 10ms 发一次查询帧,从节点收到后回复状态。简单、可靠、便宜。
LIN 的特点
- 单主多从:只有一个主节点,其他都是从节点
- 基于 UART/SCI:硬件实现简单,成本极低
- 速率 1~20 kbps:适合开关、传感器、小电机
- 数据段最多 8 字节
注意:LIN 没有冲突检测机制,所以必须由主节点统一调度。如果从节点擅自发数据,总线会乱。我曾经见过一个团队把 LIN 从节点配成了“主动发送”模式,结果整个网络瘫痪——嗯,那场面挺尴尬的。
车载以太网:新时代的“高速公路”
到了座舱域控制器时代,CAN 和 LIN 就有点不够用了。你想,一个 12.3 英寸的仪表盘要显示 3D 导航,一个 15.6 英寸的中控要播放 4K 视频,后排还有两个娱乐屏在打游戏。这些数据量,CAN 根本扛不住。
所以,车载以太网来了。它基于 BroadR-Reach 技术,一对双绞线就能跑 100 Mbps 甚至 1 Gbps。而且,它用的是 TCP/IP 协议栈,跟互联网世界无缝对接。
车载以太网的特点
- 高带宽:100 Mbps / 1 Gbps / 2.5 Gbps / 10 Gbps
- 点对点连接:每个链路都是独立的,不共享总线
- 支持 TCP/IP:可以跑 HTTP、RTSP、SOME/IP、DDS 等上层协议
- 轻量化 PHY:BroadR-Reach 技术,线束重量和成本都低于传统以太网
个人经验:我参与过一个项目,座舱域控制器通过车载以太网连接三个显示屏。每个屏独立跑一条 100BASE-T1 链路,视频流用 RTSP 传输,触控反馈用 SOME/IP。调试的时候发现,如果视频流和触控数据共用同一个 VLAN,触控会有延迟。后来把视频流单独划了一个 VLAN,问题就解决了。所以,网络规划很重要。
协议分层模型:把复杂问题拆开
聊完三种协议,我们来说说“分层模型”。为什么需要分层?因为通信这件事太复杂了——从物理信号到应用数据,中间有太多环节。分层之后,每一层只关心自己的事,上层不用管下层怎么传,下层不用管上层传什么。
最经典的是 OSI 七层模型,但在车载领域,我们更常用的是简化的四层模型:
| 层级 | 名称 | 职责 | 车载示例 |
|---|---|---|---|
| 第4层 | 应用层 | 定义数据含义和交互逻辑 | SOME/IP、DDS、UDS |
| 第3层 | 传输层 | 端到端可靠传输、流量控制 | TCP、UDP |
| 第2层 | 网络/数据链路层 | 寻址、帧封装、错误检测 | CAN ID、MAC 地址、VLAN |
| 第1层 | 物理层 | 电信号、位定时、连接器 | CAN 差分对、LIN 单线、100BASE-T1 |
你看,CAN 和 LIN 其实只覆盖了物理层和数据链路层,应用层需要你自己定义。而以太网覆盖了全部四层,所以它更灵活,但也更复杂。
三种协议的对比
为了方便你快速决策,我整理了一个对比表:
| 特性 | CAN | LIN | 车载以太网 |
|---|---|---|---|
| 速率 | 最高 1 Mbps (CAN FD 8 Mbps) | 最高 20 kbps | 100 Mbps ~ 10 Gbps |
| 拓扑 | 总线型 | 总线型 | 星型/点对点 |
| 通信方式 | 多主、广播 | 单主多从、轮询 | 点对点、全双工 |
| 成本 | 中等 | 低 | 高 |
| 典型应用 | 动力、底盘、车身 | 门窗、座椅、灯光 | ADAS、信息娱乐、OTA |
| 座舱中的角色 | 仪表信号、方向盘按键 | 座椅控制、氛围灯 | 多屏视频、音视频流、诊断 |
本章知识体系
下面这张图,帮你把本章的核心逻辑串起来:
小结
这一章我们聊了三件事:
- CAN:可靠、实时、多主,适合控制类信号
- LIN:简单、便宜、单主,适合低速开关类设备
- 车载以太网:高速、灵活、分层,适合大数据量传输
在座舱域控制器里,这三种协议往往共存。你可能会遇到:CAN 接仪表和方向盘,LIN 接座椅和氛围灯,以太网接中控和后排娱乐屏。作为系统工程师,你得知道它们各自能干什么、不能干什么,以及怎么让它们协同工作。
一个小建议:刚开始做座舱项目时,别急着写代码。先把通信矩阵画清楚——哪个信号走哪条总线、速率多少、周期多少、ID 怎么分配。这个工作做好了,后面能省 80% 的调试时间。我吃过这个亏,所以特别强调。