最近被安排去为某ECU做系统设计,由于我之前一直做嵌入式Linux开发,且开发方向主要面向上层业务开发和以太网协议栈的开发。然而,该ECU的开发属于MCU开发,其上运行CP框架和OSEK OS。由于没有太多MCU开发经验,因此我不知道该如何进行ECU的系统设计。庆幸的是,在参加了一周的技术评审会议后,我学到了很多MCU开发的基础知识。
今天,这篇文章总结下这两天对于CAN网络管理的学习成果。之所以学习CAN网络管理是在和OEM开会沟通的过程中,经常听到我们的系统架构师要求OEM提供CAN网络管理需求。
CAN NM具有三种mode,分别是:
1. Prepare Bus-Sleep
2. Bus-sleep mode
3. network mode
其中,network mode又分为三种状态:
1. repeat message state
2. normal message state
3. ready sleep state
将上述三种mode和三种status画图表示如下,最下方的方框就代表network mode。因此,在不涉及具体产品的情况下,我们可以把CAN网络管理的状态机简化为下图,便于理解。
(图片来源于:https://zhuanlan.zhihu.com/p/381521671/)
接下来,我按照该图梳理下CAN网络状态机的运行机制。
如果CAN总线处于Bus sleep mode,目标ECU一旦收到can报文,则can总线立即进入network mode。
如果CAN总线处于network mode,目标ECU首先进入repeat message state。此时,状态机有两种状态迁移路径。
1. 如果目标ECU需要通过CAN完成某些功能,则CAN总线进入Normal state,用于完成指定功能。一旦功能完成,CAN总线会从Normal State进入Ready sleep状态。
2. 如果目标ECU进入Normal state但没有功能需要完成,则CAN总线会进入Ready Sleep状态。
一旦CAN总线进入Ready Sleep状态后,CAN总线会在合适的条件下进入到Prepare Bus-Sleep mode,进而进入Bus-Sleep mode。至此,CAN总线完成了一次完整的状态迁移。
上面的介绍是网络管理的基础内容,由于我目前还不清楚是否所有的CAN网络管理策略都是一致的,但想来差别不会特别大。OEM提供CAN NM的需求应该是针对CAN总线各mode互相迁移时需要满足的条件,供应商根据OEM提供的需求设计目标ECU的CAN网络管理策略。
该文章是对于CAN网络管理状态的基础知识总结,目的在于构建CAN NM的基础框架,至于细节可以在以后工作过程中逐步学习完善...
文章首发于上汽零束开发者论坛。
作者:程序猿司晨
文章来源:上汽零束SOA开发者论坛
原文链接:https://bbs.z-onesoft.com/omp/community/front/api/page/mainTz?articleId=7758