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).

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)
    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)
  • 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"