1.7 KiB
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_ecusession fixture invokes the flasher before tests - The flasher uses the same
LinInterfaceas 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.pyis a stub — replace with your protocol implementation (UDS/XCP)- Validate timing requirements and chunk sizes per ECU
- Consider power-cycle/reset hooks via an external rig if required
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"