欢迎光临
我们一直在努力

AUTOSAR中的CanNm到底在干什么?NM报文里到底藏着什么秘密?

前言

上一篇《AUTOSAR中的Nm到底在干什么?为什么网络睡眠、网络唤醒全靠它?》中,我们讲清楚了:

  • Network Request是什么
  • 网络为什么不能直接睡眠
  • Ready Sleep和Bus Sleep区别
  • ComM、Nm、CanSM如何协同工作

    但很多同学看完后又产生了一个新的疑问:

    Nm负责网络管理我懂了,那CanNm到底在干什么?

    为什么仅仅发一条NM报文,

    整个网络就能被唤醒?

    为什么一个节点掉线,

    其他ECU都能知道?

    为什么很多OEM调试网络问题,

    第一件事就是抓NM报文?

    今天就带大家彻底拆开CanNm,

    看看NM报文里到底藏着什么秘密。

    • CanNm到底是什么?

    先回顾一下上一篇的架构。

    ComM

    Nm

    CanNm

    CanIf

    CAN Bus

    其中:

    Nm负责:

    网络管理策略

    而CanNm负责:

    NM报文发送与接收

    简单理解:

    Nm像指挥官。

    CanNm像传令兵。

    例如:

    BCM决定:

    我要唤醒网络

    CanNm就会发送:

    NM报文

    通知所有节点:

    大家起床了!


    • NM报文长什么样?

    很多新人第一次抓总线:

    会发现这样一条报文:

    ID = 0x500

    Data:

    01 00 00 00 00 00 00 00

    或者:

    40 00 00 00 00 00 00 00

    这就是NM报文。

    典型结构:

    ┌───────────────┐
    │ Source NodeID │
    ├───────────────┤
    │ CBV │
    ├───────────────┤
    │ User Data │
    └───────────────┘

    其中:

    • Node Identifier
    • Control Bit Vector
    • User Data

    是最重要的部分。

    Node Identifier是什么?

    Node ID:

    表示:

    我是谁

    例如:

    BCM = 0x01

    Gateway = 0x02

    ADAS = 0x03

    TCU = 0x04

    当收到NM报文:

    NodeID = 0x03

    所有节点都知道:

    ADAS在线

    最神秘的CBV是什么?

    CBV:

    Control Bit Vector

    控制位向量。

    也是NM报文的灵魂。

    例如:

    Byte1

    中的每一位都有特殊含义。

    Bit0

    Repeat Message Request

    Bit3

    Coordinator Sleep Ready

    等等。

    很多OEM调试网络管理:

    实际上看的就是CBV。

    Repeat Message Request是什么?

    简称:

    RMR

    CanNm中最常见的功能。

    例如:

    某个ECU刚刚上电。

    它并不知道:

    当前网络状态

    于是发送:

    RMR = 1

    意思:

    大家继续发送NM报文


    这样:

    整个网络重新进入:

    Repeat Message State

    确保所有节点重新同步。


    • 为什么一个NM报文就能唤醒网络?

    很多新人觉得很神奇。

    实际上过程非常简单。

    假设:

    当前网络状态:

    Bus Sleep

    此时:

    BCM检测到:

    车门解锁

    于是:

    CanNm发送NM报文

    总线产生活动。

    其他ECU:

    CAN Wakeup

    被硬件唤醒。

    随后:

    收到NM报文

    进入:

    Repeat Message State

    最终:

    Normal Operation

    • Remote Sleep Indication是什么?

    这是很多OEM会开启的功能。

    简称:

    RSI

    当节点发现:

    长时间收不到NM报文。

    会认为:

    网络准备睡眠

    于是产生:

    Remote Sleep Indication

    通知上层:

    大家可能都准备睡觉了

    这也是Ready Sleep的重要依据之一。

    Node Detection是什么?

    很多OEM要求:

    能够检测网络中:

    哪些节点在线

    例如:

    网络中有:

    BCM

    Gateway

    ADAS

    TCU

    如果突然:

    ADAS NM超时

    大家就知道:

    ADAS掉线

    因此CanNm还承担:

    Node Detection

    功能。


    • 为什么NM报文周期这么短?

    很多项目:

    100ms

    甚至:

    20ms

    发送一次NM。

    原因:

    必须及时知道:

    网络是否还活着

    如果发送太慢:

    例如:

    1s

    一次。

    那么:

    节点掉线后:

    可能数秒才能发现。

    因此:

    OEM一般会配置:

    NmMessageCycleTime

    NmTimeoutTime

    共同工作。


    • 项目中最常见的CanNm问题

    问题1

    网络睡不着

    抓包发现:

    NM报文一直发送

    根因:

    Network Request未释放

    问题2

    网络频繁唤醒

    抓包发现:

    RMR频繁置位

    导致:

    不断进入Repeat Message

    问题3

    节点误判离线

    原因:

    NmTimeoutTime配置过短

    问题4

    网络无法同步

    原因:

    NM ID配置错误

    多个节点使用相同Node ID。

    如果网络有问题:

    先看NM报文。

    80%的问题都能找到线索。


    • 面试高频题

    问题:

    CanNm和Nm有什么区别?

    标准答案:

    Nm负责策略

    CanNm负责实现

    问题:

    NM报文最重要的字段是什么?

    答案:

    Node ID

    CBV

    问题:

    为什么NM报文能唤醒网络?

    答案:

    总线活动

    CAN Wakeup

    NM同步

    三者共同完成。


    总结

    CanNm是AUTOSAR网络管理真正落地的模块。

    它通过NM报文:

    • 维持网络活跃
    • 协调网络睡眠
    • 同步节点状态
    • 检测节点在线
    • 实现网络唤醒

    很多项目里的:

    • 网络睡不着
    • 节点频繁掉线
    • 网络异常唤醒
    • 静态电流超标

    🚗 一句话总结:

    Nm负责制定规则,而CanNm负责把规则通过NM报文告诉整个网络。


    👉下期预告

    《AUTOSAR中的Partial Networking到底是什么?为什么一辆车睡觉时总有几个ECU醒着?》

    带你搞懂:

    • PNC是什么
    • PN Filter怎么工作
    • Selective Wakeup原理
    • CAN Transceiver如何筛选唤醒报文
    • 为什么OTA升级时TCU不用唤醒整车
    赞(0)
    未经允许不得转载:171主机测评 » AUTOSAR中的CanNm到底在干什么?NM报文里到底藏着什么秘密?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址