C28x tooling reorg + PCS/PM flash fixes, single-node BL handover, odin key doc #7

Merged
outlandnish merged 9 commits from chore/c28x-tooling-reorg into main 2026-07-24 10:27:59 -05:00
outlandnish commented 2026-07-21 20:45:25 -05:00 (Migrated from github.com)

Summary

Consolidates the C28x tooling and lands a batch of bench-driven fixes across the
flash, UDS, immobilizer, and CAN-live paths, plus new PCS CAN encoders and an
odin .bin-key documentation pass.

Commits

  • chore(c28x) — consolidate C28x tooling under scripts/c28x/, correct stale docs
  • fix(flash) — validate verifyCRC/checkRev response status (was silently "OK")
  • fix(flash) — PCS/PM *bl targets the CPU2 region → module 0x0C; *bu stays 0x00. Fixes NRC 0x22 on the bootloader-image flash. SCRIPT_BL now waits for the bu update agent before DSC.
  • fix(uds) — tolerate single-node-bus TX errors during the BL handover (error-passive controller right after reset is expected, not fatal); Phase-2 3E 00 → 7E 00 is the sole arbiter. Case-insensitive node-name resolution.
  • fix(immo) — pair only persists KEY/SALT when the DI RESPONSE matches the locally-derived value; --save-on-mismatch to override.
  • feat(can_live) — /ws-raw raw-CAN WebSocket + send UI, per-ID rate limit (~20/s).
  • feat(pcs) — CAN encoders/validators for the PCS 0x441 protected control frame and vcfront frames (from variant-411 RE).
  • docs(odin) — pin the TM3_BIN_KEY location in dump_odin.py (constant C in odin/platforms/binary_metadata_utils.py) + decode recipe; ignore _bl_work/.claude.

Validation

  • dump_odin.py run end-to-end against the 2024.8.9 dump: extract → detect (py3.10) → decompile (1487/1514 ok). Recovered constant C matches TM3_BIN_KEY in .env exactly.
  • Flash / handover / immobilizer changes are bench-driven (12804 PMR); see commit bodies for the device-confirmed details.

🤖 Generated with Claude Code

## Summary Consolidates the C28x tooling and lands a batch of bench-driven fixes across the flash, UDS, immobilizer, and CAN-live paths, plus new PCS CAN encoders and an odin `.bin`-key documentation pass. ## Commits - **chore(c28x)** — consolidate C28x tooling under `scripts/c28x/`, correct stale docs - **fix(flash)** — validate `verifyCRC`/`checkRev` response status (was silently "OK") - **fix(flash)** — PCS/PM `*bl` targets the CPU2 region → module `0x0C`; `*bu` stays `0x00`. Fixes NRC 0x22 on the bootloader-image flash. SCRIPT_BL now waits for the bu update agent before DSC. - **fix(uds)** — tolerate single-node-bus TX errors during the BL handover (error-passive controller right after reset is expected, not fatal); Phase-2 `3E 00 → 7E 00` is the sole arbiter. Case-insensitive node-name resolution. - **fix(immo)** — `pair` only persists KEY/SALT when the DI RESPONSE matches the locally-derived value; `--save-on-mismatch` to override. - **feat(can_live)** — `/ws-raw` raw-CAN WebSocket + send UI, per-ID rate limit (~20/s). - **feat(pcs)** — CAN encoders/validators for the PCS `0x441` protected control frame and vcfront frames (from variant-411 RE). - **docs(odin)** — pin the `TM3_BIN_KEY` location in `dump_odin.py` (constant `C` in `odin/platforms/binary_metadata_utils.py`) + decode recipe; ignore `_bl_work`/`.claude`. ## Validation - `dump_odin.py` run end-to-end against the 2024.8.9 dump: extract → detect (py3.10) → decompile (1487/1514 ok). Recovered constant `C` matches `TM3_BIN_KEY` in `.env` **exactly**. - Flash / handover / immobilizer changes are bench-driven (12804 PMR); see commit bodies for the device-confirmed details. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
outlandnish/tm3diag!7
No description provided.