OSEK网络管理

📅 2026/6/20 4:40:54
OSEK网络管理
设计目的ECU的待机电流消耗ECU睡眠模式是汽车环境中一个非常重要的课题ECU在切换至ECU睡眠模式时有不同的要求。前人尝试以前的人帮我们尝试了很多的方。有这种链接KL15的但是无法满足各个ECU的要求。其中Seat Control小阳台立即关机Security Control需要持续工作以检测盗窃意图Climate Control需要延迟一点时间再关机。还有这种直接连接KL30的功耗就会一直很高。这种直接连接KL30网络管理的方式就很接近正确答案了能解决很多问题但最核心的功耗问题还是没能解决。经过了前人这么多的路我们得到了一个很重要的结论总线睡眠是ECU进入低功耗模式或关闭ECU的必要条件于是引入了OSEK网络管理控制切换至总线睡眠模式确定网络配置运行期间的配置监控准备状态信息总线关闭处理报文结构令牌环机制OSEK网络管理采用令牌环机制。令牌通过目标操作码传递给下一个更高编号的ECU。如果没有下一个更高编号则令牌传递给编号最低的ECU。 环路根据各ECU的编号逐步构建而成。每条消息都来自所有参与的ECU。只有目标ECU会解释NM消息并接收令牌。唤醒和正常运行流程每个 ECU 分配唯一的网络管理地址NM 报文 ID 遵循基础ID(0x400) 节点地址的命名规则表格节点地址模块名称NM 报文 ID0Climate Control空调控制单元0x4007Security Control安全控制单元0x4079Seat Control座椅控制单元0x409Byte 0目标后继节点地址标识令牌要传递给的下一个节点Byte 1控制位向量CBV标识当前节点状态0x01ALIVE 状态节点上线宣告0x02RING 状态令牌环稳定运行中阶段 1硬件唤醒初始待机KL15 由 OFF 切换为 ON总线上 3 个 ECU 被硬件同时唤醒进入WakeUp初始状态。此时仅完成底层硬件启动尚未启动网络管理协议总线无报文输出令牌归属、逻辑拓扑均未确定。阶段 2首节点发送上线宣告地址最小的 0 号空调单元率先启动 NM 状态机持有初始令牌发送第一帧ALIVE 报文ID0x400数据 00 01。作用向全网宣告自身已上线触发其他节点的 NM 状态机启动此时其余两个节点处于监听状态识别到总线上已有节点在线。阶段 37 号节点响应确立第一跳路径7 号安全单元监听到 ALIVE 报文后经过自身配置的固定延迟T_Delay_7 12ms发送自身 ALIVE 报文ID0x407数据 07 01。0 号节点识别到 7 号节点上线将自身Successor更新为 7令牌第一跳逻辑路径0 → 7确立延迟时间与节点地址绑定地址越高发送延迟越长从机制上避免多节点同时发包造成总线冲突。阶段 49 号节点响应确立第二跳路径9 号座椅单元经过累计延迟T_Delay_9 12ms 19ms 19ms后发送自身 ALIVE 报文ID0x409数据 09 01。7 号节点识别到 9 号节点上线将自身后继更新为 9令牌第二跳逻辑路径7 → 9确立至此所有节点均完成上线宣告逻辑环的正向链路全部打通。阶段 5环闭合进入稳定 RING 状态9 号节点确认无更晚上线的节点将自身后继设回起点 0 号令牌传递路径闭合为完整逻辑环0 → 7 → 9 → 0。0 号节点在典型周期T_TYP 100ms时刻发送RING 报文ID0x400数据 07 02标志网络从 ALIVE 发现阶段进入稳定令牌环运行阶段本次报文将令牌传递给 7 号节点7 号获得下一轮令牌持有权。阶段 6稳定环运行 —— 令牌传递至 9 号令牌按固定顺序在环内流转7 号节点持有令牌后发送 RING 状态报文ID0x407数据 09 02将令牌传递给 9 号节点。所有节点通过持续的令牌传递确认彼此在线状态维持总线唤醒100ms 为 OSEK NM 的典型令牌周期Ttype是网络稳定运行的基准节拍。阶段 7稳定环运行 —— 令牌回归起点9 号节点持有令牌后发送 RING 状态报文ID0x409数据 00 02将令牌传回起点 0 号节点。至此完成一个完整的令牌环周期后续将以 100ms 为周期循环传递只要令牌持续正常流转所有 ECU 保持唤醒若节点超时Tmax未收到令牌将触发环重建或进入跛行模式LimpHome。后续正常运行就是循环5-7阶段。分布式无主架构无需专门主控节点所有节点地位平等通过令牌自动完成拓扑发现、在线监控、休眠协同单节点故障不会导致整个网络管理瘫痪。休眠的反向流程Prep Sleep、Sleep Ind对应休眠阶段车辆下电后令牌会携带休眠指示位在环内传递逐个节点确认可进入休眠所有节点一致应答后才统一进入低功耗模式避免部分节点提前休眠导致总线通信异常。休眠流程一、第一次休眠尝试部分节点未就绪协商失败阶段 1KL15 下电0 号节点发起休眠请求触发条件KL15 点火电源由 ON 切换为 OFF0 号、7 号节点率先完成业务收尾满足自身休眠条件进入Prep Sleep预休眠状态置位Sleep Indication休眠指示位。动作0 号节点持有令牌发送RING SLEEPIND报文ID0x400数据 07 12将休眠请求随令牌传递给后继 7 号节点。状态9 号座椅节点仍有未完成业务不满足休眠条件未置位 SleepInd。阶段 27 号节点接力传递休眠请求7 号节点收到指向自身的休眠令牌自身已就绪保持 SleepInd 置位。动作发送RING SLEEPIND报文ID0x407数据 09 12将令牌和休眠请求继续传递给后继 9 号节点。阶段 39 号节点未就绪中断休眠指示9 号节点收到休眠请求但自身应用层仍需总线通信不满足休眠条件因此清除 SleepInd 位。动作仅发送普通RING报文ID0x409数据 00 02令牌传回起点 0 号节点。结果休眠指示未能完整绕环一周第一轮休眠协商失败。阶段 4令牌回到起点第一轮协商终止0 号节点收到 9 号传回的普通 RING 报文无 SleepInd判定全网未全部就绪本轮休眠流程终止。由于 0 号和 7 号节点仍保持休眠就绪状态在下一个令牌周期会再次发起休眠请求开始第二轮协商。二、第二次休眠尝试所有节点就绪协商成功阶段 59 号节点就绪接力传递休眠请求此时 9 号节点完成所有业务满足休眠条件置位 SleepInd进入 Prep Sleep 状态。7 号节点再次传递来带 SleepInd 的令牌9 号节点确认自身就绪保持 SleepInd 置位。阶段 6令牌完整绕环全网休眠就绪确认9 号节点发送RING SLEEPIND报文ID0x409数据 00 12令牌传回 0 号节点。关键判定令牌携带 SleepInd 完整绕环一周说明所有节点均同意休眠休眠协商条件达成。阶段 7发送休眠应答确认最终休眠0 号节点作为首个检测到全网就绪的节点发送RING SLEEPACK报文ID0x400数据 07 32即 RING 位 SleepInd 位 SleepAck 位置位。作用这是全网休眠的最终确认指令所有节点收到该报文后停止发送 NM 报文进入总线休眠等待阶段。阶段 8超时等待进入 Bus Sleep最后一帧 NM 报文发出后所有节点启动T_WaitBusSleep计时器典型值 500ms图中 1.000s 发最后一帧1.500s 总线完全静默。计时期间总线无任何报文超时后所有节点关闭 CAN 收发器正式进入Bus Sleep 总线休眠低功耗状态。设计提示若单个 ECU 内存在多个独立使用总线的应用需做好内部休眠仲裁避免部分应用仍需通信时总线已休眠导致异常唤醒。跛行状态阶段 1初始唤醒发送首帧 ALIVE 上线宣告节点上电唤醒后进入初始状态向总线发送第一帧上线报文报文 ID 0x403基础 ID 0x400 节点地址 3数据场03 01第一字节03为后继节点地址未发现其他节点暂指向自身第二字节0x01为 ALIVE 状态位宣告节点上线、请求建立逻辑环节点持有令牌启动超时计时等待其他节点响应本场景无其他 NM 节点因此无任何应答阶段 2反复重试建环ALIVE 与 RING 交替循环节点按标准时序反复尝试建立令牌环始终失败按T_Typ 100ms周期尝试发送 RING 报文数据03 020x02为 RING 状态位模拟令牌传递但无后继节点承接令牌无法流转达到T_Max 260ms令牌超时阈值后判定令牌丢失退回重新发送 ALIVE 报文重试Trace 呈现固定规律100ms 发 RING → 260ms 超时发 ALIVE → 循环往复图中标注的4x Alive Ring即指多次重复「ALIVE 上线→尝试 RING 传牌→超时重试」的建环流程阶段 3错误超时达标正式进入 LimpHome 状态连续建环失败持续达到T_Error 1000ms故障阈值后节点判定网络异常正式切换到NMLimpHome 跛行状态发送 LimpHome 专属报文数据03 040x04为 LimpHome 状态位核心行为发生本质变化彻底放弃逻辑令牌环机制不再等待其他节点的令牌改为自主按固定周期发送报文仅用于宣告自身在线后继节点固定指向自身不再动态更新网络拓扑阶段 4LimpHome 状态下发起休眠申请当应用层休眠条件满足如 KL15 下电、无活跃业务节点在跛行状态下自主启动休眠流程报文更新为03 140x14 0x10 SleepInd休眠指示 0x04 LimpHome同时携带跛行状态与休眠请求对应操作GotoMode(BusSleep)节点进入预休眠准备因无其他节点无需协同休眠应答自主完成休眠协商阶段 5进入总线休眠 Bus Sleep发送完带休眠指示的报文后等待总线静默超时到期节点停止所有报文发送Trace 中 1.000s 为最后一帧 NM 报文1.500s 后总线完全静默节点关闭 CAN 收发器进入Bus Sleep 低功耗休眠状态整个状态机流程终止LimpHome 的触发场景与设计意义LimpHome 是 OSEK NM 的容错机制触发场景包括总线上仅有单个 NM 节点如台架单 ECU 调试其他 NM 节点全部离线、故障或未启动 NM总线物理层故障导致令牌报文持续丢失节点地址、NM 基础 ID 配置错误节点间无法互相识别其核心价值是即使网络管理的协同功能失效ECU 依然能独立完成在线宣告、自主休眠不会因 NM 异常导致 ECU 无法下电、静态电流超标。加入新节点阶段 1初始稳态 —— 三节点正常令牌环运行现有三节点逻辑环稳定运行令牌按0 → 7 → 9 → 0循环传递。当前 7 号节点持有令牌发送 RING 报文ID0x407数据 09 02将令牌传递给后继 9 号节点。新节点 3 号刚上电唤醒处于初始状态暂将后继指向自身独立持有令牌尚未接入现有逻辑环。阶段 2新节点上线宣告环首节点更新后继新节点 3 号超时未收到令牌主动发送ALIVE 上线报文ID0x403数据 03 01时间 0.010s向全网宣告自身存在。0 号节点监听到该 ALIVE 报文根据地址升序选举规则发现地址 3 比原后继 7 更小因此将自身后继从 7 更新为 3。阶段 3令牌传回起点新节点暂设后继9 号节点按原环路径发送 RING 报文ID0x409数据 00 02时间 0.090s令牌传回 0 号节点。3 号节点监听到 9 号的 RING 报文识别到 9 号的后继是 09 为当前最大地址节点结合自身地址 3暂时将 9 号设为自身后继此时尚未发现 7 号节点属于过渡状态。阶段 4令牌正式传递给新节点0 号节点持有令牌按照更新后的后继地址发送 RING 报文ID0x400数据 03 02时间 0.100s将令牌正式传递给 3 号节点。3 号节点成功收到令牌正式接入令牌环此时其后继仍暂指向 9 号。阶段 5新节点首次传牌7 号被临时跳过3 号节点持有令牌按当前后继 9 号发送 RING 报文ID0x403数据 09 02令牌直接传给 9 号。由于地址排序3 7 97 号节点在本轮令牌传递中被跳过未收到前驱令牌属于建环过程中的临时过渡现象并非故障。阶段 6被跳过节点补发 ALIVE新节点修正后继7 号节点超时未收到令牌判定自身被跳过主动发送ALIVE 报文ID0x407数据 09 01重新宣告自身在线。3 号节点监听到 7 号的 ALIVE发现地址 7 介于自身地址 3 和原后继 9 之间因此将自身后继从 9 更新为 7修正令牌传递路径。阶段 7四节点稳定环建立完成令牌沿修正后的路径完整流转一圈0 → 3 → 7 → 9 → 0所有节点的后继地址均正确匹配。最终形成 4 个 ECU 的稳定逻辑环每个节点都拥有正确的后继节点令牌按地址升序规则正常循环传递新节点接入流程全部完成。运行过程当中丢失一个节点阶段 1令牌发向离线节点令牌开始丢失正常背景四节点逻辑环稳定运行令牌传递到 0 号节点。执行动作0 号节点按原有拓扑配置向其后继 3 号节点发送 RING 令牌报文ID0x400数据03 02对应 Trace 中 0.100s 的帧。故障发生3 号 ECU 已经物理离线图中灰色淡化、总线处波浪符号表示物理链路断开无法接收该令牌报文也不能继续向下传递令牌令牌在此处中断。中间状态7 号、9 号节点此时尚未感知故障仍维持原有后继配置等待令牌按序传递。阶段 2令牌传递中断全网进入超时判定总线现象令牌在 3 号节点处彻底断流总线上不再有新的 RING 报文Trace 中 0.100s 之后没有出现预期的 0x403 报文。节点行为所有在线节点各自启动Tmax超时计时器本示例典型值 260ms正常情况下节点每收到一帧非指向自己的 RING 报文都会重置 Tmax 计时器当超过 Tmax 时长仍未收到任何 RING 报文时节点判定「令牌丢失、逻辑环断裂」。阶段 3Tmax 超时触发全网复位重建逻辑环触发条件260ms 的 Tmax 超时到期所有在线节点同步判定令牌丢失。全网统一动作所有 ECU 复位自身 NM 状态机回到 NMReset 初始状态清空原有拓扑配置所有节点暂时将后继地址指向自身所有节点重新发送 ALIVE 上线报文如 Trace 中 0.260s 的400 00 01重新启动拓扑发现流程。最终结果全网重新走完建环流程自动排除已离线的 3 号节点最终收敛形成新的三节点稳定环0 → 7 → 9 → 0。状态转换图