Files
obdash/handoff.md
T
justin e15e22a825 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>
2026-06-29 21:49:18 -04:00

5.0 KiB

Handoff — ford-obd / 6.0 Power Stroke no-start

Pick-up notes for diagnosing the truck in the cab. Repo: git.jpaul.io/justin/ford-obd (private).

TL;DR — what to do at the truck

  1. CH340 ELM327 adapter → OBD port (under dash, driver side).
  2. Key to RUN (not ACC). Engine off is fine for reading codes.
  3. On the Windows laptop, in the repo folder: double-click RUN_OBD.bat (or python obd_reader.py). If no port found: python obd_reader.py COM5.
  4. Read the codes + the no-start triage it prints. Write the codes down.
  5. To erase codes after reading: python obd_reader.py COM5 --clear (it asks you to type CLEAR).

Hardware confirmed

  • Adapter chip: QinHeng CH340 (USB 1a86:7523), ELM327 v1.5 clone.
  • Working baud: 38400 (default in the tool). If you get garbage, try 9600.
  • It's an AT@2 = ? clone (no stored serial) — normal, works fine for generic OBD-II.

What the tool does / doesn't

  • DOES: read stored/pending/permanent codes, decode them (6.0 codes flagged as no-start suspects), clear codes (--clear), show battery voltage + key live PIDs.
  • EXPERIMENTAL (--ford): tries a small table of community-sourced Ford 6.0 Mode-22 PIDs (ICP, IPR%, FICM main/sync/logic V, EBP, EOT). PID numbers and scaling are TENTATIVE — raw bytes are always printed; cross-check against a meter or FORScan before trusting a value.
  • --pid XXXX: one-shot probe of any 16-bit Mode-22 PID; prints raw bytes plus a few common decodings so you can eyeball the right scaling.
  • DOESN'T (yet): a verified Ford-enhanced PID set the way FORScan has. We're building toward that — see follow-ups below.

6.0 no-start priority checklist (from the triage)

The 6.0 needs, to fire: good batteries → FICM ~48V → ICP ~500 psi → fuel → cam/crank signal.

  1. Batteries — both. Weak battery → FICM won't boost → no injector fire. Load test; ~12.5V+ at rest, watch it while cranking.
  2. FICM voltage while cranking (~48V). #1 6.0 cold no-start cause. <45V is suspect.
  3. ICP (injection control pressure) ~500 psi to fire. Leaks: STC fitting, oil rail O-rings, high-pressure oil hoses, IPR/HPOP.
  4. Fuel — HFCM lift pump priming, fuel filters, water-in-fuel.
  5. CMP/CKP sensors — failed cam sensor = crank, no-start (codes P0340/P0341, P0335/P0336).
  6. Glow plugs/relay if cold (won't stop start, but hard start).

Code-driven branches the tool will hint at

  • P0335/P0336/P0340/P0341/P0344 → cam/crank sensor path.
  • P0611/P1316 or P02xx/P026x injector codes → FICM / injector path.
  • P0087/P0148/P0191 → fuel pressure (low-side + high-side oil).
  • U0100/U0073/P0606 → module comms / PCM.

Status of this session's work

  • Tool built + tested against the real adapter (init, all 3 DTC modes, live PIDs, clear flow).
  • DTC parser unit-tested incl. a fixed bug: legacy ISO/PWM multi-frame responses repeat the 43 header (was producing phantom codes) — fixed + regression-tested.
  • 2026-06-29 in-cab session: added --watch, --ford, --pid, and --scan modes. Captured cranking voltages + ran a Mode-22 brute scan (46 PIDs hit). Full session writeup + raw data in diagnostics/2026-06-29-no-start/. Headline: not batteries, not fuel — almost certainly ICP / FICM / CMP. Unfinished: FICM meter test on M/S/L was started but readings never logged.
  • Pushed to git.jpaul.io/justin/ford-obd, branch main. Files: obd_reader.py, RUN_OBD.bat, README.md, README.txt, handoff.md, diagnostics/.

To resume with Claude from the cab

Mention: "6.0 Power Stroke no-start, using the ford-obd tool (git.jpaul.io/justin/ford-obd)". Then paste the tool's full output (codes + live values). Useful to also say: cranks vs. no-crank, hot vs. cold, what changed before it died, and FICM/ICP readings if you metered them.

To resume from the desktop (after the 2026-06-29 session)

Read diagnostics/2026-06-29-no-start/README.md first — that's the full state. Top open items:

  1. Get FICM M/S/L meter readings (key-ON and during a short crank).
  2. Re-probe the clean scan hits (1310, 1440-1451, 11Bx) with --pid XXXX for uncontaminated data, then map them to known engine conditions.
  3. Look at FORScan via the CyanLabs mirror to capture ground-truth PIDs.

Open follow-ups (when off the truck)

  • FORScan from the CyanLabs mirror once forscan.org is back — useful as the ground truth for verifying our Mode-22 PID table.
  • Verify every entry in FORD_60_PIDS (obd_reader.py) against either a meter reading or FORScan, one at a time. As each is confirmed, drop the "TENTATIVE" warning for that row.
  • Option 3: brute-force scan of the Mode-22 PID space (e.g. 0x1000- 0x14FF) and log which PIDs return data, so we can fingerprint what this PCM exposes without external references. Hook it in as --scan.
  • Add --watch mode that streams ATRV + PID 0142 (and the FICM PIDs once verified) at ~5 Hz so we can watch the voltage sag during cranking.