ecu-tests/docs/07_flash_sequence.md

1.7 KiB

Flashing Sequence (ECU Programming)

This document outlines the expected flashing workflow using the HexFlasher scaffold over the LIN interface and where you can plug in your production flasher (UDS/XCP).

Overview

  • Flashing is controlled by configuration (flash.enabled, flash.hex_path)
  • The flash_ecu session fixture invokes the flasher before tests
  • The flasher uses the same LinInterface as tests

Mermaid sequence

sequenceDiagram
  autonumber
  participant P as pytest
  participant F as flash_ecu fixture
  participant H as HexFlasher
  participant L as LinInterface (mock/babylin)
  participant E as ECU

  P->>F: Evaluate flashing precondition
  alt flash.enabled == true and hex_path provided
    F->>H: HexFlasher(lin).flash_hex(hex_path)
    H->>L: connect (ensure session ready)
    H->>E: Enter programming session (UDS/XCP)
    H->>E: Erase memory (as required)
    loop For each block in HEX
      H->>L: Transfer block via LIN frames
      L-->>H: Acks / flow control
    end
    H->>E: Verify checksum / signature
    H->>E: Exit programming, reset if needed
    H-->>F: Return success/failure
  else
    F-->>P: Skip flashing
  end

Implementation notes

  • ecu_framework/flashing/hex_flasher.py is a stub — replace with your protocol implementation (UDS/XCP)
  • Validate timing requirements and chunk sizes per ECU
  • Consider power-cycle/reset hooks via programmable poewr supply.

Error handling

  • On failure, the fixture calls pytest.fail("ECU flashing failed")
  • Make flashing idempotent when possible (can retry or detect current version)

Configuration example

flash:
  enabled: true
  hex_path: "firmware/ecu_firmware.hex"