Home Learning Paths ECU Lab Assessments Interview Preparation Arena Pricing Log In Sign Up

CanNm State Machine

AUTOSAR CanNm State Machine
  Power On / Nm_NetworkRequest()
          │
          ▼
  ┌─────────────────────┐
  │   BUS SLEEP         │ ← CAN transceiver in low-power standby
  └──────────┬──────────┘
             │ WakeUp event / Nm_NetworkRequest()
             ▼
  ┌─────────────────────┐
  │ REPEAT MESSAGE      │ ← Sends NM PDUs every CanNmMsgRepeatPanelTime
  │ (CanNmRepeatMsgTime)│   Ensures all nodes see the network request
  └──────────┬──────────┘
             │ CanNmRepeatMsgTime expires
             ▼
  ┌─────────────────────┐
  │ NORMAL OPERATION    │ ← Periodic NM PDUs at CanNmMsgCycleTime
  │ (optional)          │   Only if CanNmMainFunctionPeriod configured
  └──────────┬──────────┘
             │ Nm_NetworkRelease() from all nodes
             ▼
  ┌─────────────────────┐
  │ PREPARE BUS-SLEEP   │ ← Stops sending NM PDUs; waits CanNmTimeoutTime
  └──────────┬──────────┘
             │ CanNmTimeoutTime expires (no NM PDU received)
             ▼
  ┌─────────────────────┐
  │   BUS SLEEP         │
  └─────────────────────┘

NM PDU Structure

Ccannm_pdu.c
/* CanNm PDU structure (8 bytes typical) */
typedef struct {
    uint8_t  NID;   /* Node ID: identifies transmitting node (0x00–0xFE) */
    uint8_t  CBV;   /* Control Bit Vector:
                       Bit 0: Repeat Message Request (RMR) — request all nodes to re-enter Repeat Message
                       Bit 1: Reserved
                       Bit 2: PNI (Partial Network Information present in PNC byte field)
                       Bit 3-7: Reserved / user data */
    uint8_t  PNC0;  /* Partial Network Cluster request bitmask byte 0 */
    uint8_t  PNC1;  /* Partial Network Cluster request bitmask byte 1 */
    uint32_t UserData; /* Optional user data bytes 4-7 */
} CanNm_PduType;

/* Example: ECU with NID=0x05 requesting network stay awake,
   requesting PN cluster 0 (bit 0 of PNC0) */
CanNm_PduType myNmPdu = {
    .NID  = 0x05,
    .CBV  = 0x04,   /* PNI=1: PNC bytes are valid */
    .PNC0 = 0x01,   /* Requesting PN cluster bit 0 */
    .PNC1 = 0x00,
};

Partial Networking: Selective Wake-Up

Partial Networking Cluster Architecture
  Vehicle Network (all nodes on one CAN bus)
  ┌──────────────────────────────────────────────────────┐
  │ PN Cluster 0: Powertrain (ECU_Engine, ECU_Trans)      │
  │ PN Cluster 1: Chassis (ECU_ABS, ECU_ESC)             │
  │ PN Cluster 2: Body (ECU_BCM, ECU_Door_FL, ECU_Door_FR)│
  └──────────────────────────────────────────────────────┘

  Scenario: Driver unlocks vehicle (BCM needs to wake)
  BCM sends CanNm PDU with PNC2 bit set
  → Only ECU_Door_FL and ECU_Door_FR check PNC2 = 1 → stay awake
  → ECU_Engine, ECU_Trans, ECU_ABS check PNC0, PNC1 = 0 → go back to sleep
  → Saves 200–400 mA quiescent current during vehicle access
TransceiverPN SupportWUF FilterNotes
TJA1145YesCAN ID + maskStandard PN transceiver for body networks
TJA1044NoCAN-FD only; no PN capability
TJA1463YesCAN ID + maskCAN-FD + PN combined
TLE9255W (Infineon)YesCAN ID + maskAlternative to TJA series

ComM Integration with CanNm

XMLComM_CanNm_Config.arxml


  ComMChannel_Powertrain
  /ComM/ComMNetworkHandles/PowertrainCAN
  /CanNm/CanNmChannels/CanNmChannel_0
  
  
  
  

Summary

CanNm orchestrates the coordinated sleep/wake lifecycle for all nodes on a CAN bus. The state machine ensures all nodes synchronise their wake-up (Repeat Message phase) and sleep transition (Prepare Bus-Sleep → Bus-Sleep). Partial Networking adds per-cluster granularity — only the nodes needed for a specific function wake up, reducing quiescent current significantly. ComM is the application-facing interface; it abstracts the CanNm state machine behind simple COMM_FULL_COM / COMM_NO_COM requests.

🔬 Deep Dive — Core Concepts Expanded

This section builds on the foundational concepts covered above with additional technical depth, edge cases, and configuration nuances that separate competent engineers from experts. When working on production ECU projects, the details covered here are the ones most commonly responsible for integration delays and late-phase defects.

Key principles to reinforce:

  • Configuration over coding: In AUTOSAR and automotive middleware environments, correctness is largely determined by ARXML configuration, not application code. A correctly implemented algorithm can produce wrong results due to a single misconfigured parameter.
  • Traceability as a first-class concern: Every configuration decision should be traceable to a requirement, safety goal, or architecture decision. Undocumented configuration choices are a common source of regression defects when ECUs are updated.
  • Cross-module dependencies: In tightly integrated automotive software stacks, changing one module's configuration often requires corresponding updates in dependent modules. Always perform a dependency impact analysis before submitting configuration changes.

🏭 How This Topic Appears in Production Projects

  • Project integration phase: The concepts covered in this lesson are most commonly encountered during ECU integration testing — when multiple software components from different teams are combined for the first time. Issues that were invisible in unit tests frequently surface at this stage.
  • Supplier/OEM interface: This is a topic that frequently appears in technical discussions between Tier-1 ECU suppliers and OEM system integrators. Engineers who can speak fluently about these details earn credibility and are often brought into critical design review meetings.
  • Automotive tool ecosystem: Vector CANoe/CANalyzer, dSPACE tools, and ETAS INCA are the standard tools used to validate and measure the correct behaviour of the systems described in this lesson. Familiarity with these tools alongside the conceptual knowledge dramatically accelerates debugging in real projects.

⚠️ Common Mistakes and How to Avoid Them

  1. Assuming default configuration is correct: Automotive software tools ship with default configurations that are designed to compile and link, not to meet project-specific requirements. Every configuration parameter needs to be consciously set. 'It compiled' is not the same as 'it is correctly configured'.
  2. Skipping documentation of configuration rationale: In a 3-year ECU project with team turnover, undocumented configuration choices become tribal knowledge that disappears when engineers leave. Document why a parameter is set to a specific value, not just what it is set to.
  3. Testing only the happy path: Automotive ECUs must behave correctly under fault conditions, voltage variations, and communication errors. Always test the error handling paths as rigorously as the nominal operation. Many production escapes originate in untested error branches.
  4. Version mismatches between teams: In a multi-team project, the BSW team, SWC team, and system integration team may use different versions of the same ARXML file. Version management of all ARXML files in a shared repository is mandatory, not optional.

📊 Industry Note

Engineers who master both the theoretical concepts and the practical toolchain skills covered in this course are among the most sought-after professionals in the automotive software industry. The combination of AUTOSAR standards knowledge, safety engineering understanding, and hands-on configuration experience commands premium salaries at OEMs and Tier-1 suppliers globally.

← PreviousCAN XL - Next GenerationNext →Transport Protocols (ISO 15765)