• OSEK network management


    实现几种功能,全网唤醒自组网,物理加入,物理掉线,全网休眠,自我认知到无法建网(跛足)
    令牌环拓扑结构,利用了can总线的仲裁,使id从小到大顺序发送。
    虽然是令牌环,但物理上是单总线,其实每个节点都知道其他所有节点状态。
    用环可以减少ecu的负载,不需要维护总表,因为设备可能很多。只需要维护几个状态,自己下家是谁,全网申请休眠。
    can报文id为ecu自己的id,为4XX,can报文payload有两个字节,data[1]状态字节,有5个bit管用
    0x01 Alive(上线,本ecu是新加入的,或者本ecu被人跳过了)
    0x02 Ring(传递令牌)
    0x04 LimpHome(跛足,网络无人响应无法建环)
    0x10 SleepIndication(休眠申请,本ecu想休眠了)
    0x20 SleepAcknowledege(应答申请,检测到一次回环中所有报文都SleepIndication,可以休眠了)

    各个bit不能任意组合实际只有5种报文
    01:代表Alive报文,在总线上声明自己的存在,请求其他节点与自己建环。
    02:代表Ring报文;
    12:代表当前节点已无通讯请求(睡眠标志位SleepIndication置位),即告知其他节点我已满足睡眠条件;
    32:即将其睡眠应答位置1,当检测到其他节点都在发送12ring报文后,最后一个节点发送此应答报文,告知其他节点当前整个网络无通信请求,可以睡眠。此时进入睡眠等待状态即Twbs状态。
    04:代表跛行报文,如果网络管理报文接收计数器和发送计数器超限后,发送跛行报文即无其他节点与此节点建环,只有一个节点存在。

    data[0]两种情况,alive报文填本ecu的id,ring报文填写令牌要发给目的ecu的id。
    令牌环的逻辑,每个节点有独一无二的id。总线由id小的先发送,将data[0]设置为自认为比自己id大的下一个节点,发送报文相当于发送令牌环。id最大的下一节点为最小id节点。
    网络唤醒后,大家都发alive,各自记住自己下一个节点是谁。
    节点加入或错乱,每个节点监听自己是否被跨过去,即 can id < 自己的id < can data[0],发现后发alive,自己上一级节点更新它自认为比自己id大的下一个节点。
    节点掉线,超时后,开始刚唤醒时候流程。
    网络休眠,一次回环大家都发送休眠申请,计时进入全网休眠。
    相互独立的节点自组网,由于网络的不确定性,当然离不开时间的约定,报文响应时间,超时处理,状态机闭环,各个厂家要求不一样。

  • 相关阅读:
    C++ 丑数
    【数据分享】2021年全国区县点位数据
    【苹果家庭群发iMessage】 软件安装应用层的数据包的丢失不涉及IP层
    工作相关----《配置bond》
    强扩展、强一致、高可用…GaussDB成为游戏行业的心头爱
    Spark SQL将Hive表中的数据写入到MySQL数据库中
    Maven进阶-继承与聚合
    2023 10月最新Vmd 下载安装教程,Windows&Linux
    探索生成式AI的未来:Chat与Agent的较量与融合
    VSG-001
  • 原文地址:https://blog.csdn.net/jun7118/article/details/126320641