From 77d6b79c6bdc042c8467e195aa055917146bcaa6 Mon Sep 17 00:00:00 2001 From: Mikkeli Date: Tue, 13 Oct 2026 20:47:20 +0900 Subject: [PATCH] Z27AG first decoding pass: rpm, pedal, brake, handbrake, indicators, lights, doors, wheel speeds Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz --- docs/impl/reports/Z27AG-DECODE-1.md | 65 +++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 docs/impl/reports/Z27AG-DECODE-1.md diff --git a/docs/impl/reports/Z27AG-DECODE-1.md b/docs/impl/reports/Z27AG-DECODE-1.md new file mode 100644 index 0000000..a362a72 --- /dev/null +++ b/docs/impl/reports/Z27AG-DECODE-1.md @@ -0,0 +1,65 @@ +--- +type: report +date: 2026-10-13 +--- +# Z27AG CAN: first decoding pass + +Session `z27ag-20261013-170050-checklist` (yukart-data `can-captures/`), checklist v1, +117 marks. Method: list every transition of every rarely-changing bit and read it +against the marks; for blinking signals, count toggles inside each marked range +against the seconds before it; for values, dump bytes across the marked range; for +speed, correlate every 16-bit word with GNSS speed over the crawls. Marks lag the +action by a fraction of a second to a few seconds (the operator presses after doing), +so a change shortly *before* a start mark is normal. + +Bit numbering: `ID.byte.bit`, byte 0 first, bit 7 the MSB. + +## Found + +| Signal | Where | Evidence | Confidence | +|---|---|---|---| +| Engine speed | `210` bytes 4–5, BE, 1 rpm | idle 740–870; holds at ~1410 and ~1900 for "1500" / "2000" (operator: revs not exact); blip peak 2887 | High | +| Engine speed, finer | `13D` bytes 0–1, LE, ≈ rpm × 2.048 | moves in lockstep with `210` | High | +| Accelerator pedal | `210` byte 0, 0x00 released … 0xFA full (÷2.5 → %) | engine-off sweep: 0 → 0xFA → 0 | High | +| Accelerator sensors 1 and 2 | `139` bytes 0 and 1 (raw, 0x33 rest … 0xEE full, track each other) | same sweep | High | +| Throttle-related | `139` byte 2 (0x21 … 0xD5) | same sweep; plate or target | Medium | +| Pedal-pressed flag | `210` byte 3 bit 7 | set exactly while the pedal is off rest | Medium | +| Brake pedal switch | `231.4.1` (1 = pressed) | 3/3 presses, plus the foot-brake holds around the handbrake step and the crawls | High | +| Handbrake | `239.0.2` (1 = applied) | set through every engaged stretch, clear during the crawls and the handbrake releases | High | +| Left indicator | `423.2.6` blinking | 2/2 | High | +| Right indicator | `423.2.5` blinking | 2/2 | High | +| Hazards | `423.2.6` only blinks, 2/2 | odd: `2.5` stays still. Maybe `2.6` is "left or hazard", maybe the hazard has its own bit elsewhere at a rate this method missed | Low | +| Side lights | `423.2.2` and `570.7.3` (1 = on) | on/off and during dipped | High | +| Dipped beam | `423.3.1` (1 = on) | 1/1 | Medium (one sample) | +| Any door open | `423.2.1` | driver and passenger | Medium | +| Driver door | `423.0.4` | driver only, not passenger | Medium | +| Driver belt unbuckled | `573.5.7` (1 = unbuckled) | set at ignition on, cleared at buckle; no release seen | Low | +| A/C request / blower | `443` bytes 1–2 and `711` bytes 5–6, multi-bit | change with A/C and blower; not separated yet | Low | +| A/C compressor engaged | `13D.6.7` | engine running, A/C on; set ~0.5 s after the request, cleared with A/C off | Medium | +| Four wheel speeds | `235` four 16-bit words (bytes 0–1, 2–3, 4–5, 6–7) | zero parked, all four move together in the crawls | High (signal), **scale open** | +| Vehicle speed | `231` byte 6 (and probably byte 7) | tracks the wheel words | Medium | + +**Wheel-speed scale.** Crawls topped out at ~6 km/h, and so far only the first byte of each word moved +(0x4C at GNSS 3.5 km/h). Read as little-endian ×0.05 km/h (the forfour's `200` +scale), that is 3.8 km/h, which is plausible given GNSS lag. Big-endian is not ruled out. The +jack-stands session and a GNSS-matched drive settle both the byte order and the scale. + +## Not on this bus (or not seen) + +- **Clutch pedal:** nothing changed in 3 presses, engine off. +- **Gear position:** nothing in 5 gears, reverse or neutral. Expected for a manual. The + gear can be computed from rpm ÷ wheel speed once the scale is known. +- **Reverse:** no reverse bit found. The reverse lamp is probably wired directly. +- **Steering angle:** not analysed yet (step 5 was done with the engine on, at the end). + +## Not analysed yet + +- `312` (four noisy 16-bit words that follow the throttle: MAP/load/air candidates) +- `449` temperatures (coolant candidate), `710`–`713` slow body/meter frames +- `0C0`, `119`, `149`, `156` (counters/checksums; `149` inertial candidate) + +## Scripts + +Scratch analysis for now: a session loader, a transition timeline, a blink counter and a +GNSS correlator, in Python with numpy. They become a tool once a DBC exists to check +against.