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:
@@ -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.8–11.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.8–11.2V, VPCM 11.32–11.70V
|
||||
- Recovery: bus 11.8–12.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.
|
||||
@@ -0,0 +1,121 @@
|
||||
================================================================
|
||||
OBD-II Code Reader - ELM327 / 6.0 Power Stroke triage
|
||||
================================================================
|
||||
|
||||
Auto-selected port: COM5 (USB-SERIAL CH340 (COM5))
|
||||
(other ports seen: COM4, COM3 -- pass one as an argument if wrong)
|
||||
Opening COM5 @ 38400 baud ...
|
||||
Adapter : ELM327 v1.5
|
||||
Battery : 12.5V (key ON; healthy 6.0 KOEO ~12.4-12.7V)
|
||||
|
||||
Connecting to vehicle (turn key to ON / RUN, engine off is fine)...
|
||||
Protocol: A6 (CAN=True)
|
||||
|
||||
----------------------------------------------------------------
|
||||
TROUBLE CODES
|
||||
----------------------------------------------------------------
|
||||
|
||||
STORED (mode 03):
|
||||
C0300 - (look up this code)
|
||||
|
||||
PENDING (mode 07):
|
||||
P0113 - Intake air temp (IAT) circuit HIGH
|
||||
C0700 - (look up this code)
|
||||
|
||||
PERMANENT (mode 0A):
|
||||
C3F0A - (look up this code)
|
||||
|
||||
----------------------------------------------------------------
|
||||
KEY LIVE VALUES (key ON)
|
||||
----------------------------------------------------------------
|
||||
Engine RPM 0 rpm
|
||||
Coolant temp 33 C
|
||||
Intake air temp 35 C
|
||||
Intake MAP 98 kPa
|
||||
Engine load 0 %
|
||||
Accel/throttle pos n/a
|
||||
Module voltage 13.1 V
|
||||
|
||||
================================================================
|
||||
SCAN Mode-22 PIDs 1000 - 14FF (1280 PIDs)
|
||||
================================================================
|
||||
Logging hits to: C:\Users\justin\AppData\Local\Temp\ford-scan-hits.txt
|
||||
Safe: Mode 22 is read-only. Will print every PID that answers.
|
||||
|
||||
... 100/1280 scanned in 28s (3.6/s), ~330s remaining, 0 hits so far
|
||||
... 200/1280 scanned in 55s (3.6/s), ~298s remaining, 0 hits so far
|
||||
HIT 1100 len= 7 raw=[01 00 40 05 7F 22 12]
|
||||
HIT 1101 len= 5 raw=[00 62 11 01 00]
|
||||
HIT 1102 len= 1 raw=[00]
|
||||
HIT 1103 len= 5 raw=[00 62 11 03 00]
|
||||
HIT 1104 len= 5 raw=[00 62 11 04 00]
|
||||
HIT 1105 len= 1 raw=[00]
|
||||
HIT 1106 len= 5 raw=[00 62 11 06 04]
|
||||
HIT 1107 len= 5 raw=[00 62 11 07 00]
|
||||
HIT 110C len= 4 raw=[00 7F 22 12]
|
||||
HIT 1123 len= 5 raw=[1E 62 11 23 30]
|
||||
HIT 1125 len= 1 raw=[FF]
|
||||
HIT 1126 len= 5 raw=[00 62 11 26 00]
|
||||
HIT 1127 len= 1 raw=[E7]
|
||||
... 300/1280 scanned in 82s (3.6/s), ~269s remaining, 13 hits so far
|
||||
HIT 1135 len= 2 raw=[FF FF]
|
||||
HIT 1139 len= 5 raw=[2E 62 11 39 2E]
|
||||
HIT 114A len= 5 raw=[7E 00 7F 22 12]
|
||||
HIT 114B len= 5 raw=[A6 56 7F 22 12]
|
||||
HIT 114D len= 2 raw=[81 40]
|
||||
HIT 1155 len= 2 raw=[FF FF]
|
||||
HIT 1165 len= 7 raw=[00 00 62 11 65 00 00]
|
||||
HIT 1169 len= 2 raw=[00 00]
|
||||
HIT 1172 len= 5 raw=[D1 62 11 72 D3]
|
||||
HIT 1177 len= 5 raw=[00 C8 7F 22 12]
|
||||
... 400/1280 scanned in 110s (3.6/s), ~241s remaining, 23 hits so far
|
||||
HIT 11B3 len= 1 raw=[02]
|
||||
HIT 11B4 len= 2 raw=[00 00]
|
||||
HIT 11B5 len= 5 raw=[00 00 7F 22 31]
|
||||
HIT 11B6 len= 4 raw=[8C 7F 22 31]
|
||||
HIT 11B7 len= 5 raw=[00 00 7F 22 31]
|
||||
HIT 11B8 len= 5 raw=[00 00 7F 22 31]
|
||||
HIT 11BA len= 2 raw=[FF 5C]
|
||||
HIT 11BD len= 5 raw=[87 1E 7F 22 31]
|
||||
HIT 11C1 len= 7 raw=[00 00 62 11 C1 00 00]
|
||||
... 500/1280 scanned in 138s (3.6/s), ~215s remaining, 32 hits so far
|
||||
... 600/1280 scanned in 165s (3.6/s), ~187s remaining, 32 hits so far
|
||||
... 700/1280 scanned in 192s (3.6/s), ~159s remaining, 32 hits so far
|
||||
HIT 1310 len= 2 raw=[1C 92]
|
||||
... 800/1280 scanned in 220s (3.6/s), ~132s remaining, 33 hits so far
|
||||
... 900/1280 scanned in 247s (3.6/s), ~104s remaining, 33 hits so far
|
||||
... 1000/1280 scanned in 274s (3.6/s), ~77s remaining, 33 hits so far
|
||||
HIT 1410 len= 2 raw=[00 00]
|
||||
HIT 1411 len= 5 raw=[00 00 7F 22 12]
|
||||
HIT 1412 len= 2 raw=[00 00]
|
||||
HIT 1434 len= 1 raw=[26]
|
||||
HIT 1440 len= 2 raw=[01 89]
|
||||
HIT 1441 len= 5 raw=[00 00 7F 22 12]
|
||||
HIT 1442 len= 2 raw=[01 88]
|
||||
HIT 1445 len= 2 raw=[01 8F]
|
||||
HIT 1446 len= 2 raw=[00 16]
|
||||
HIT 1447 len= 2 raw=[00 34]
|
||||
HIT 1448 len= 2 raw=[00 11]
|
||||
... 1100/1280 scanned in 303s (3.6/s), ~50s remaining, 44 hits so far
|
||||
HIT 1450 len= 2 raw=[00 00]
|
||||
HIT 1451 len= 2 raw=[00 00]
|
||||
... 1200/1280 scanned in 331s (3.6/s), ~22s remaining, 46 hits so far
|
||||
|
||||
Done. 46 responding PIDs in 353s.
|
||||
|
||||
================================================================
|
||||
6.0 POWER STROKE -- NO-START QUICK TRIAGE
|
||||
================================================================
|
||||
|
||||
NO-CODE no-start basics to check by hand on a 6.0:
|
||||
1. BATTERIES: both must be strong. Low voltage -> FICM won't boost ->
|
||||
no injector fire. Load-test both; ~12.5V+ at rest, hold while cranking.
|
||||
2. FICM voltage while cranking (~48V). The #1 6.0 cold no-start cause.
|
||||
3. ICP (Injection Control Pressure): needs ~500 psi to fire. Big leaks =
|
||||
STC fitting, oil rail O-rings, high-pressure oil hoses.
|
||||
4. FUEL: lift pump (HFCM) priming, fuel filters, water-in-fuel.
|
||||
5. CMP/CKP sensors (see codes above).
|
||||
6. Glow plugs/relay if it's cold out (won't stop start, but hard start).
|
||||
|
||||
|
||||
Done. (Re-run any time; codes persist until cleared.)
|
||||
@@ -0,0 +1,48 @@
|
||||
# Mode-22 scan 1000-14FF
|
||||
# pid_hex len raw_bytes
|
||||
1100 7 01 00 40 05 7F 22 12
|
||||
1101 5 00 62 11 01 00
|
||||
1102 1 00
|
||||
1103 5 00 62 11 03 00
|
||||
1104 5 00 62 11 04 00
|
||||
1105 1 00
|
||||
1106 5 00 62 11 06 04
|
||||
1107 5 00 62 11 07 00
|
||||
110C 4 00 7F 22 12
|
||||
1123 5 1E 62 11 23 30
|
||||
1125 1 FF
|
||||
1126 5 00 62 11 26 00
|
||||
1127 1 E7
|
||||
1135 2 FF FF
|
||||
1139 5 2E 62 11 39 2E
|
||||
114A 5 7E 00 7F 22 12
|
||||
114B 5 A6 56 7F 22 12
|
||||
114D 2 81 40
|
||||
1155 2 FF FF
|
||||
1165 7 00 00 62 11 65 00 00
|
||||
1169 2 00 00
|
||||
1172 5 D1 62 11 72 D3
|
||||
1177 5 00 C8 7F 22 12
|
||||
11B3 1 02
|
||||
11B4 2 00 00
|
||||
11B5 5 00 00 7F 22 31
|
||||
11B6 4 8C 7F 22 31
|
||||
11B7 5 00 00 7F 22 31
|
||||
11B8 5 00 00 7F 22 31
|
||||
11BA 2 FF 5C
|
||||
11BD 5 87 1E 7F 22 31
|
||||
11C1 7 00 00 62 11 C1 00 00
|
||||
1310 2 1C 92
|
||||
1410 2 00 00
|
||||
1411 5 00 00 7F 22 12
|
||||
1412 2 00 00
|
||||
1434 1 26
|
||||
1440 2 01 89
|
||||
1441 5 00 00 7F 22 12
|
||||
1442 2 01 88
|
||||
1445 2 01 8F
|
||||
1446 2 00 16
|
||||
1447 2 00 34
|
||||
1448 2 00 11
|
||||
1450 2 00 00
|
||||
1451 2 00 00
|
||||
@@ -0,0 +1,117 @@
|
||||
================================================================
|
||||
OBD-II Code Reader - ELM327 / 6.0 Power Stroke triage
|
||||
================================================================
|
||||
|
||||
Auto-selected port: COM5 (USB-SERIAL CH340 (COM5))
|
||||
(other ports seen: COM4, COM3 -- pass one as an argument if wrong)
|
||||
Opening COM5 @ 38400 baud ...
|
||||
Adapter : ELM327 v1.5
|
||||
Battery : 11.7V (key ON; healthy 6.0 KOEO ~12.4-12.7V)
|
||||
|
||||
Connecting to vehicle (turn key to ON / RUN, engine off is fine)...
|
||||
Protocol: A6 (CAN=True)
|
||||
|
||||
----------------------------------------------------------------
|
||||
TROUBLE CODES
|
||||
----------------------------------------------------------------
|
||||
|
||||
STORED (mode 03):
|
||||
C0300 - (look up this code)
|
||||
|
||||
PENDING (mode 07):
|
||||
C0701 - (look up this code)
|
||||
P0113 - Intake air temp (IAT) circuit HIGH
|
||||
|
||||
PERMANENT (mode 0A):
|
||||
C3F0A - (look up this code)
|
||||
|
||||
----------------------------------------------------------------
|
||||
KEY LIVE VALUES (key ON)
|
||||
----------------------------------------------------------------
|
||||
Engine RPM 0 rpm
|
||||
Coolant temp 33 C
|
||||
Intake air temp 35 C
|
||||
Intake MAP 98 kPa
|
||||
Engine load 0 %
|
||||
Accel/throttle pos n/a
|
||||
Module voltage 12.39 V
|
||||
|
||||
================================================================
|
||||
WATCH MODE (30s) -- Ctrl-C to stop early
|
||||
================================================================
|
||||
ATRV = battery V at OBD port, VPCM = PCM/module V (PID 0142).
|
||||
TURN KEY TO START NOW (or whenever you're ready).
|
||||
|
||||
t(s) ATRV VPCM
|
||||
-------- -------- --------
|
||||
0.00 11.7 12.39
|
||||
0.54 11.7 12.38
|
||||
1.09 11.7 12.36
|
||||
1.64 12.0 12.55
|
||||
2.17 11.9 12.52
|
||||
2.70 12.0 12.49
|
||||
3.25 12.1 12.66
|
||||
3.79 12.1 12.69
|
||||
4.33 12.0 12.55
|
||||
4.84 12.1 12.71
|
||||
5.35 12.0 12.60
|
||||
5.91 10.8 11.65
|
||||
6.42 11.2 11.59
|
||||
6.93 11.0 11.59
|
||||
7.45 11.1 11.48
|
||||
7.95 10.9 11.43
|
||||
8.47 10.8 11.70
|
||||
8.97 11.2 11.67
|
||||
9.49 11.0 11.70
|
||||
10.01 11.0 11.46
|
||||
10.52 11.0 11.59
|
||||
11.02 11.0 11.48
|
||||
11.54 11.0 11.62
|
||||
12.04 10.9 11.48
|
||||
12.55 11.0 11.40
|
||||
13.07 11.0 11.48
|
||||
13.57 10.9 11.40
|
||||
14.08 11.1 11.43
|
||||
14.59 10.9 11.46
|
||||
15.08 11.0 11.48
|
||||
15.59 11.0 11.59
|
||||
16.09 10.9 11.32
|
||||
16.61 11.5 12.17
|
||||
17.11 11.8 ?
|
||||
17.74 11.8 ?
|
||||
18.37 12.0 ?
|
||||
19.02 11.8 ?
|
||||
19.65 12.0 ?
|
||||
20.27 11.9 ?
|
||||
20.90 12.0 ?
|
||||
21.54 12.0 ?
|
||||
22.18 12.0 ?
|
||||
22.81 12.1 ?
|
||||
23.45 12.2 ?
|
||||
24.10 12.1 ?
|
||||
24.74 12.2 ?
|
||||
25.38 12.0 ?
|
||||
26.01 12.0 ?
|
||||
26.66 12.0 ?
|
||||
27.31 12.1 ?
|
||||
27.95 12.2 ?
|
||||
28.59 12.1 ?
|
||||
29.23 12.2 ?
|
||||
29.87 12.2 ?
|
||||
|
||||
================================================================
|
||||
6.0 POWER STROKE -- NO-START QUICK TRIAGE
|
||||
================================================================
|
||||
|
||||
NO-CODE no-start basics to check by hand on a 6.0:
|
||||
1. BATTERIES: both must be strong. Low voltage -> FICM won't boost ->
|
||||
no injector fire. Load-test both; ~12.5V+ at rest, hold while cranking.
|
||||
2. FICM voltage while cranking (~48V). The #1 6.0 cold no-start cause.
|
||||
3. ICP (Injection Control Pressure): needs ~500 psi to fire. Big leaks =
|
||||
STC fitting, oil rail O-rings, high-pressure oil hoses.
|
||||
4. FUEL: lift pump (HFCM) priming, fuel filters, water-in-fuel.
|
||||
5. CMP/CKP sensors (see codes above).
|
||||
6. Glow plugs/relay if it's cold out (won't stop start, but hard start).
|
||||
|
||||
|
||||
Done. (Re-run any time; codes persist until cleared.)
|
||||
Reference in New Issue
Block a user