Add --watch/--ford/--pid/--scan modes + 2026-06-29 session diagnostics

obd_reader.py:
- Mode 22 plumbing: ELM.mode22() sends a 16-bit PID request, parses both
  positive (62 ..) and negative (7F 22 NRC) responses.
- --ford runs a small TENTATIVE table of community-sourced Ford 6.0 PIDs
  (ICP/IPR/FICM/EBP/EOT). All printed with raw bytes for verification.
- --pid XXXX probes a single PID and prints multiple candidate decodings
  (u8, u16, mV, temp, duty) so we can eyeball the right scaling.
- --watch [N] streams ATRV + module voltage (PID 0142) for N seconds.
  Designed for capturing voltage sag during cranking.
- --scan AAAA-BBBB brute-force scans Mode-22 PIDs with --scan-log PATH
  for output. Uses fast ELM timing (ATAT2, ATST19) for ~3.5 PIDs/sec.

diagnostics/2026-06-29-no-start/:
- Captured cranking voltage trace, full Mode-22 scan (1000-14FF -> 46
  hits), and a session writeup. Working hypothesis: not batteries, not
  fuel -- ICP / FICM / CMP. FICM meter test still owed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-06-29 21:49:18 -04:00
parent 8bdb77cf53
commit e15e22a825
6 changed files with 771 additions and 16 deletions
+115
View File
@@ -0,0 +1,115 @@
# 2026-06-29 — 6.0 Power Stroke no-start session
In-cab diagnostic session using the `ford-obd` tool on the truck.
Charger on "12V Hi" was attached for most of the session.
## Symptoms
- Cranks **fast** (starter spins the engine normally)
- **Zero combustion event** — no sputter, no cough, no kickback
- HFCM lift pump heard priming on key-RUN and shutting off normally
- Battery at OBD port: 11.2 12.7V key-RUN (varied with charger state)
## Codes pulled (multiple reads, slight variation between reads)
| Mode | Code | Description |
|---|---|---|
| Stored (03) | `C0300` | (chassis — not engine, not in our DB) |
| Pending (07) | `C0700` / `C0701` | (chassis — alternated between reads) |
| Pending (07) | `P0113` | IAT circuit HIGH — sensor wiring, not a no-start |
| Permanent (0A) | `C3F0A` | (chassis — not engine) |
No engine P-codes, no FICM codes, no injector codes, no CMP/CKP codes.
## What we ruled out
- **Batteries as primary cause** — cranks fast and voltage held adequately
(see `watch-cranking.log`). Bus sagged to 10.811.2V during ~11s crank,
borderline-low but not catastrophic. Healthy starter spin means batteries
have current to give.
- **Fuel supply** — HFCM lift pump audibly primes and shuts off correctly
on key-RUN.
- **Compression / mechanical** — fast even cranking, would feel different
with a low-compression cylinder.
## Working hypothesis (in order of suspicion)
1. **ICP / high-pressure oil leak** — STC fitting is the classic 6.0 culprit
for "cranks great, won't fire, no codes". Need ≥500 psi ICP to fire even
one injector.
2. **FICM weakness** — should boost to ~48V. Sometimes doesn't throw a code
even when failing. **Not yet measured** — see open items.
3. **CMP sensor** — would usually throw P0340/P0341 but not always.
## What we did with the tool this session
- Pulled DTCs across all 3 modes (multiple times).
- Captured cranking voltage with `--watch 30` (see `watch-cranking.log`):
- Pre-crank: bus 11.7→12.1V, VPCM 12.39→12.71V
- Cranking (~11s): bus 10.811.2V, VPCM 11.3211.70V
- Recovery: bus 11.812.2V, VPCM stopped responding (`?`) — possible
PCM brief recovery state after the dip.
- Ran first attempt at Mode-22 probes (`--ford`) with community-sourced
PIDs (ICP=1209, FICM=1228/1229/122A, IPR=120B, etc.). **All returned
"no response."** Either the PCM uses different PID numbers, or these
values live on Ford's SCP bus and aren't gatewayed to OBD-CAN.
- Brute-force scanned PIDs `0x1000-0x14FF` (1280 PIDs, ~6 min, 46 hits).
See `mode22-scan-hits.txt`. Data is noisy because **multiple modules on
the bus answer the same query** — positive responses from PCM mixed
with negative-response bytes (`7F 22 12`, `7F 22 31`) from other modules.
## Interesting PIDs from the scan to verify next session
Cleanest-looking PCM-side responses worth re-probing individually
(with normal timing, `python obd_reader.py --pid XXXX`):
```
1310 2 1C 92 (was 1C 69 earlier — value changes; maybe a counter?)
1440 2 01 89 = 393
1442 2 01 88 = 392 ← three closely-spaced ~390 values
1445 2 01 8F = 399 suggests a related sensor cluster
1446 2 00 16 = 22
1447 2 00 34 = 52
1448 2 00 11 = 17
11B3 1 02
11B4 2 00 00
11BA 2 FF 5C
```
Likely scaling guesses:
- raw / 100 → fits if these are voltage-tenths or pressure-tenths
- raw / 1000 → if mV (0.393V plausible for sensor outputs)
- raw - some offset → temperature
To know what each one *is*, compare against a known measurement:
- Run `--pid 1440` with engine off, write down value.
- Get engine running (eventually), write down value.
- Change condition, watch which PIDs move.
## Open items / what's next
1. **FICM meter test was started but no readings reported back yet.**
Measure M / S / L on the FICM body, key-ON and during a (short) crank:
- M (Main) target ~48V cranking, <45V suspect, <40V dead
- S (Sync) target ~48V cranking
- L (Logic) target ~12V (mirrors battery)
2. **Visual under-engine check** for STC-fitting oil leak (wet/oily mess
at the rear of the engine, around the turbo / bell housing).
3. **Verify scan-hit PIDs.** Re-probe the clean ones above with
`--pid XXXX` to get uncontaminated readings, log them against known
conditions.
4. **Try addressing other modules with `ATSH`** — particularly the FICM
on its CAN address if it has one (uncertain on 6.0 — likely on SCP).
5. Try **FORScan** when forscan.org / CyanLabs mirror is back, on the
same CH340 adapter, to capture FORScan's actual PID requests for
ICP/FICM/IPR. That gives us the ground truth.
## Tool state at end of session
`obd_reader.py` now has:
- `--ford` — try the (tentative) Ford 6.0 Mode-22 PID table
- `--pid XXXX` — one-shot probe of any 16-bit Mode-22 PID
- `--watch [N]` — stream ATRV + VPCM for N seconds (default 20)
- `--scan AAAA-BBBB` + `--scan-log PATH` — brute-force scan a PID range
All work on the CH340 ELM327 v1.5 clone at 38400 baud, HS-CAN switch.