我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。
老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:
钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。
生活中有两种人,一种人格外在意别人的眼光;另一种人无论别人如何,他们始终有自己的节奏。
过度关注别人的看法,会搅乱自己的步调,让自己更加慌乱。与其把情绪的开关交到别人手中,不如把有限的精力用在提升自己上,久而久之,你自然会更加优秀。
时间不知不觉中,来到新的一年。2025开始新的忙碌。成年人的我也不知道去哪里渡自己的灵魂,独自敲击一些文字算是对这段时间做一个记录。
一、整车车载网关设计概念
对于网关,应该单独分配请求和相应的通道,另外基于功能应用场景,通信通道有优先级。例如,像TesterPresent这类用于维持ECU处于非默认会话状态的功能请求,在通过车载网关传输时,其优先级应始终高于物理请求。
关于车载网关通道分配和优先级的问题,网关应该为请求和响应分配单独的通道,并且根据功能应用场景,通信通道要有优先级。特别是像TesterPresent这样的功能寻址请求,用于维持ECU保持在非默认会话状态,它们的优先级应该高于物理寻址请求。
因为功能寻址发送的对象多数是多个ECU同时受到,特别是整车刷写模式情况下,用于Service 3E 80保持当前会话模式下。
需要明确几个概念。什么是车载网关?车载网关在汽车电子系统中负责不同网络之间的通信,比如CAN、LIN、FlexRay、以太网等。它处理不同协议之间的消息转发,确保各电子控制单元(ECU)之间的有效通信。
请求和响应通道分开。这可能类似于车载网络中的全双工通信,允许同时发送和接收数据,但在这里可能指的是逻辑上的分离,比如不同的消息队列或优先级通道,确保请求和响应不会互相阻塞。
单独分配请求和响应通道可能意味着在网关中为不同方向或类型的消息设立不同的处理队列或缓冲区。例如,请求通道专门处理从诊断工具到ECU的请求,而响应通道处理ECU返回的响应。这样可以避免请求和响应之间的竞争,提高处理效率,并确保关键响应及时传送。
二、网关设计遵循基本原则
在车载网关的设计中,为请求和响应分配独立通道并基于功能优先级管理通信流量,是确保系统可靠性和实时性的关键。
1、通道分离策略
请求通道专门处理从诊断工具或上层控制器发送至ECU的指令(如诊断请求TesterPresent、编程指令等)。
响应通道负责传输ECU对请求的反馈(如诊断响应、状态报告等)。
物理通道处理来自传感器、执行器等实时设备的请求(如车速、刹车信号)。
优势:避免请求与响应的资源竞争,降低延迟,提升关键消息的确定性。
2、优先级动态分配
最高级,比如诊断保持类消息(如TesterPresent),确保ECU会话不中断。
常规:安全相关物理请求(如紧急制动、电池管理),常规物理请求(如空调控制、信息娱乐),非实时数据传输(如日志上传、软件更新包)。
实现方式:
CAN总线:使用更小的消息ID(如0x700)赋予TesterPresent最高优先级。
以太网:通过VLAN标签或DiffServ字段标记优先级。
网关调度器:基于消息类型和源地址动态调整队列顺序。
3、TesterPresent的高优先级必要性
会话维持:若TesterPresent未被及时处理,ECU可能退回默认会话,导致诊断中断(如刷写失败)。
容错机制:网关需周期性检测诊断会话状态,在丢包时自动重传TesterPresent。
带宽预留:为诊断通道保留最小带宽(如CAN总线中限制物理请求的带宽占用)。
4、网关架构设计
多队列调度器:
±--------------------+
| 网关接收层 |
| - 分类器按协议/功能 |
±---------±---------+
|
±---------v----------+
| 优先级队列管理 |
| - 高优先级队列(诊断)|
| - 中优先级队列(安全)|
| - 低优先级队列(常规)|
±---------±---------+
|
±---------v----------+
| 调度器 |
| - 加权轮询(WRR) |
| - 抢占式调度 |
±---------±---------+
|
±---------v----------+
| 协议转换与转发 |
±--------------------+