# Ford 6.0 Mode-22 PID research — workflow findings (2026-06-29)

Source: multi-agent deep web hunt (`ford-60-pid-hunt` workflow).
Search done: 107 raw candidates from 8 finders; Dedup: 30 unique PIDs; verifying top 28; Verify done: 15/28 corroborated.
Raw candidates: 107 | unique PIDs: 30 | verified: 28 | corroborated: 15.

> Cross-verified across the canonical Torque "Ford 6.0L Diesel Extended PIDs" lineage,
> ScanGauge XGauge DB, diesel forums, and — critically — the truck's own brute-scan,
> which independently confirms every PID in the 0x1000-0x14FF window.

---

# Ford 6.0L Power Stroke (2003-2007) — Enhanced PID Synthesis

Verdict-driven reconciliation of the tentative table against multi-source evidence plus the truck's own brute-scan. **The headline:** every PID the truck answered comes from one canonical community lineage (the "Ford 6.0L Diesel Extended PIDs" Torque list), and the empirical scan independently validates the ones that fall in the 0x1000–0x14FF window. The tentative table's 12xx numbers are simply **wrong addresses**, not a bus problem.

---

## 1. VERIFIED PID TABLE (safe for `FORD_60_PIDS`)

Request form is Mode 22: `22 XX XX` → response `62 XX XX <data>`. `A` = first data byte, `B` = second. Header where known is physical PCM addressing `7E0` (Torque "AUTO" works; ScanGauge encodes TXD `07E0…`).

| PID | Name | Units | Formula | Header | Sources | Empirically confirmed on this truck |
|-----|------|-------|---------|--------|---------|--------------------------------------|
| **1446** | ICP — Injection Control Pressure (actual, HPOP) | psi | `(A*256+B)*0.57` | 7E0 | 2+ indep. lineages + scan | **Yes** — `00 16`=22 → 12.5 psi (sane KOEO) |
| **1445** | EBP — Exhaust Back Pressure | psi abs (subtract BARO for gauge) | `(A*256+B)*0.03625`; gauge = `… - [1442]` | 7E0 | 3 indep. + scan | **Yes** — `01 8F`=399 → 14.46 psia (atm) |
| **1440** | MAP — Manifold Absolute Pressure | psi abs | `(A*256+B)*0.03625` | 7E0 (C410F1 functional) | 5 indep. + scan | **Yes** — `01 89`=393 → 14.25 psia (atm) |
| **1442** | BARO — Barometric Pressure | psi abs | `(A*256+B)*0.03625` | 7E0 | 3 indep. + scan | **Yes** — `01 88`=392 → 14.21 psia |
| **(1440−1442)** | MGP / Boost | psi gauge | `[1440 psi] - [1442 psi]` | — | 4 indep. + scan | **Yes** — ≈0 psi boost at KOEO |
| **11B3** | Current Gear (5R110W TorqShift) | gear int | `A/2` | 7E0 (or TCM) | 3 indep. + scan | **Yes** — `02` → gear 1 |
| **11B4** | TSS/ISS — Turbine/Input Shaft Speed | RPM | `(A*256+B)/4` | 7E0 | 2 indep. + scan | **Yes** — `00 00` → 0 RPM (stopped). *Scaling single-lineage but standard Ford RPM /4* |
| **09D0** | FICM Main Power (FMP) — the ~48 V injector rail; **cranking V is the no-start metric** | volts | `(A*256+B)/256` (i.e. `*0.00390625`; 0x3000→48 V) | 7E0 | 3 indep. (incl. ScanGauge) | **Not tested** — below the 0x1000–0x14FF scan window |
| **09CF** | FICM Logic Power (FLP, ~12 V) | volts | `(A*256+B)/256` | 7E0 | 3 indep. (ScanGauge XGauge) | Not tested (below window) |
| **09CE** | FICM Vehicle Power (FVP, ~12–14 V batt) | volts | `(A*256+B)/256` | 7E0 | 2 indep. | Not tested (below window) |
| **09CD** | FICM Sync (cam/crank sync status) | boolean | bit 1 of `A` (1=sync, 0=no); plain `A` = combined status byte | 7E0 | 4 indep. (ScanGauge) | Not tested (below window) |
| **096D** | VGT Duty Cycle | % | `(A*256+B)*100/32767` | 7E0 | 2 indep. (ScanGauge MTH `0064 7FFF 0000`) | Not tested |
| **099F** | Fan Speed Sensor | RPM | `(A*256+B)/4` *(display ceiling 1000 is too low; real ~3500)* | 7E0 | 2 indep. (ScanGauge) | Not tested |

**Mode 01 (generic SAE J1979 — NOT Mode 22)** — these answer on any OBD-II tool and are the reliable engine basics on a 6.0. Request `01 XX` → `41 XX`:

| PID | Name | Formula | Units |
|-----|------|---------|-------|
| 010C | Engine RPM | `(A*256+B)/4` | rpm |
| 0105 | ECT — Coolant Temp | `A-40` | °C |
| 010F | IAT — Intake Air Temp | `A-40` | °C |

Corroborated 5 indep. sources (CSS Electronics J1979, x-engineer, Wikipedia, etc.). Do **not** put these in the Mode-22 table — they are Mode 01.

**Note on the FICM/VGT/Fan/ICP-V rows:** documentarily corroborated but never queried on this truck because `09xx` is below and `16xx` is above the brute-scan window. They are safe to add but flag as *re-probe to confirm on-vehicle*.

---

## 2. TENTATIVE / SINGLE-SOURCE (needs a meter or FORScan check)

| PID | Name | Formula | Why tentative |
|-----|------|---------|----------------|
| **1310** | EOT — Engine Oil Temp | °C = `(A*256+B)/100 - 40`; °F = `*9/5+32` | **Number corroborated + truck-hit** (`1C 92`=7314 → 33 °C / 92 °F, sane), but the canonical Torque list's `+40` offset is a propagated transcription error. Use **−40** (standard SAE/Ford encoding; physics confirms). The "changing between reads" is oil-temp drift, **not a counter**. |
| **16AD** | ICP sensor voltage | `(A*256+B)*0.000072` V | Single canonical lineage; **never tested** (outside 0x10–0x14FF window). Scaling physically plausible for a 0–5 V sensor. Tentative table's `1430` for ICP_V is wrong. |
| **1434** | IPR — Injection Pressure Regulator duty | `(A*13.53)/35` (= `A*0.38657`) **canonical**; variant `A*100/256` (`A*0.39063`) ~1% higher | Single Torque-list lineage; **scaling conflict** (the two forms are NOT exactly equal). Diagnostically negligible (<1% in the 8–60% operating band). Replaces tentative `120B`. Not in the truck's no-response set; adjacent 14xx all answered. |
| **1172** | Battery Voltage (VPWR/B+) | `A/16` (0.0625 V/bit) | Single Torque-list lineage; signal exists in Ford IDS list but no OEM hex/scaling. Plausible. Not truck-tested. |
| **1672** | Fuel Pump Duty (HFCM lift pump) | `A*100/128` (`A*0.78125`) | Single lineage on the number; scaling uncontested + behavior well-known (sits 100%, drops on high EOT). Not truck-tested. |
| **09CC** | Injection Timing BTDC | `(A*256+B)*10/64` (`*0.15625`) — **use this** | **10× scaling conflict**: ScanGauge XGauge (`000A0040…`) gives `*10/64`; Torque list adds a stray `/10`. Torque thread itself flagged this PID as "needs work." Trust ScanGauge form. |
| **16C1** | Fuel Level | `(A*256+B)*100/328` vs `*1/328` | Number corroborated (Torque + ScanGauge) but **scaling genuinely conflicting and uncalibrated** — users report ~17,000% or ~2× high. Needs per-truck full/empty calibration. |
| **1411** | MFDES — Mass Fuel Desired | *(no trustworthy formula)* | Single-source Torque CSV; published GPH formula is **dimensionally broken** and mislabeled. Real parameter is **mg/stroke** mass (~10 idle / 20 cruise / 40 WOT). Treat raw u16 as an internal count; **do not** ship the GPH equation. Was NOT in the scan responders. |

---

## 3. BUS REALITY — the most important answer

**Direct answer: on *this* truck, Mode 22 enhanced PIDs ARE reachable over the generic ELM327, and your "no response" results are wrong PID numbers — not an SCP-vs-CAN gateway wall.**

The empirical proof is in your own scan. The truck returned live, physically-sensible Mode-22 data for **1446 (ICP), 1445 (EBP), 1440 (MAP), 1442 (BARO), 1310 (EOT), 11B3 (gear), 11B4 (TSS)** — all members of the same canonical Ford-6.0 enhanced list. A bus that wasn't passing Mode 22 could not have produced 1446 → 12.5 psi or 1442 → 14.21 psia. So the request path works.

Therefore the dead PIDs — `1209, 121A, 120B, 1228, 1229, 122A, 1430, 121C` — failed because **those addresses are not the OBD Mode-22 DIDs** for these parameters. The real ones live in the **09xx / 14xx / 16xx** families: ICP=1446, EBP=1445, IPR=1434, ICP-V=16AD, FICM Main/Logic/Vehicle=09D0/09CF/09CE, FICM Sync=09CD, EOT=1310. The 12xx values look like Ford SCP/IDS-internal identifiers that simply aren't part of the generic enhanced request table.

**The protocol caveat, stated honestly (a real disagreement in the evidence):** Several sources correctly note that a 2003–2007 6.0L Super Duty/Excursion's *legislated generic OBD-II* bus is **SAE J1850 PWM (Ford SCP, DLC pins 2 & 10)** — Ford did not move Super Duty to ISO 15765 CAN until MY2008 (6.4L). Pure CAN-only ELM327 clones can't speak J1850 PWM and will NACK everything. **This does not contradict your results** — it just means your adapter negotiated J1850 PWM (auto-detect) and the `7E0`/`C410F1` headers in the ScanGauge/Torque definitions are protocol-agnostic notation, not proof of a CAN bus. Either way: **the enhanced PIDs answered, so the practical bus question is settled — they're reachable with your generic adapter via Mode 22.** If you ever swap to a cheap CAN-only dongle and everything goes dead, that's the J1850 issue, not the PID numbers.

**Bottom line:** ICP / IPR / FICM are reachable by your ELM327 via Mode 22 **at the corrected addresses**. FORScan is *not* the only path for the actual-value parameters (ICP, EBP, IPR, FICM rails). FORScan/IDS remains the only reliable path for the **commanded/derived** parameters — **desired ICP (ICP_DES) and FICM Sync as a labeled gauge** — which are not published as `22 XX XX` DIDs anywhere (see §4).

---

## 4. SCAN-HIT MAPPING

| Scan hit | Raw | Best hypothesis | Reasoning / confidence |
|----------|-----|-----------------|------------------------|
| **1310** → `1C 92` | 7314 | **EOT — Engine Oil Temp** | Corroborated number. `7314/100 − 40 = 33.1 °C / 91.7 °F` — sane warming oil. "Changes between reads" = temperature drift, **not a counter**. **High confidence.** |
| **1440** → `01 89` | 393 | **MAP** | `393*0.03625 = 14.25 psia` = atmospheric KOEO. **High.** |
| **1442** → `01 88` | 392 | **BARO** | `392*0.03625 = 14.21 psia`. **High.** |
| **1445** → `01 8F` | 399 | **EBP** | `399*0.03625 = 14.46 psia` = atmospheric (≈0 gauge) at rest. **High.** |
| **1446** → `00 16` | 22 | **ICP (actual)** | `22*0.57 = 12.5 psi` KOEO residual. **High.** (2003 trucks baseline ~0 psi; 2004+ ~50 psi.) |
| **1447** → `00 34` | 52 | **No reference found** — undocumented | One address above real ICP (1446); classic brute-scan adjacency artifact. Zero sources name it. The tentative `*0.03625` was a back-fit guess with no support. Reachable (answered) but meaning unknown. |
| **1448** → `00 11` | 17 | **No reference found** — undocumented | Same as 1447; no source in 4 independent compilations names 1448. |
| **11B3** → `02` | 2 | **Current Gear** | `2/2 = gear 1` (idle/standstill in Drive). Validates the whole scan method. **High.** |
| **11B4** → `00 00` | 0 | **TSS/ISS — Turbine/Input Shaft Speed** | `0/4 = 0 RPM`, engine stopped. Sits immediately after gear in the 5R110 trans block (11B3 gear → 11B4 input speed → 11B5 output speed). Identity solid (2 lists); /4 scaling moderate. |
| **11BA** → `FF 5C` | 65372 / −164 | **No reference found** — undocumented | In the 11Bx PCM/transmission-status block (neighbor 11B3 is gear), so *likely* a trans/status value, but unconfirmed. Not trans-fluid-temp (TFT=1674/1E1C). `FF5C` matches no clean temp/pressure scale. Do not assign meaning without truck validation. |

---

## 5. NEXT ACTIONS for the tool

**Replace these tentative-table entries (wrong numbers) outright:**
- `1209 ICP` → **`1446`**, `(A*256+B)*0.57` psi
- `121C EBP` → **`1445`**, `(A*256+B)*0.03625` psi abs (subtract 1442 for gauge)
- `120B IPR` → **`1434`**, `(A*13.53)/35` %
- `1430 ICP_V` → **`16AD`**, `(A*256+B)*0.000072` V
- `1228 FICM_MPWR` → **`09D0`**, `(A*256+B)/256` V
- `122A FICM_LPWR` → **`09CF`**, `(A*256+B)/256` V
- `1229 FICM_SYNC` → **`09CD`**, bit 1 of `A` (boolean)
- Add **`09CE`** FICM Vehicle Power, `(A*256+B)/256` V
- `121A ICP_DES` → **remove / mark FORScan-only** (no Mode-22 DID exists)

**Add as new verified entries:** `1440` MAP, `1442` BARO, MGP=1440−1442, `11B3` gear, `11B4` TSS, `096D` VGT, `099F` fan, plus Mode-**01** `010C`/`0105`/`010F` for RPM/ECT/IAT.

**Fix scaling already in evidence:**
- EOT `1310`: use **`/100 − 40`** (drop the canonical `+40`).
- Injection timing `09CC`: use **`*10/64`** (drop the stray `/10`).

**Re-probe on the truck (highest value — these were never queried; they're outside the 0x1000–0x14FF window):**
- `22 09 D0`, `22 09 CF`, `22 09 CE`, `22 09 CD` — **the FICM trio + sync; 09D0 cranking voltage is your no-start metric (<45 V = failing FICM).**
- `22 16 AD` (ICP voltage), `22 14 34` (IPR), `22 11 72` (battery), `22 16 72` (fuel pump), `22 09 6D` (VGT), `22 09 9F` (fan).
- Widen the brute scan to **0x0900–0x09FF and 0x1600–0x16FF**.
- Sanity-check IPR against KOEO ~14–15%, cranking ~30–40%, warm idle ~25–30%; FICM Main ~45–48.5 V running.

**Calibration / do-not-trust:**
- `16C1` fuel level: ship as raw, require per-truck full/empty calibration (both published divisors misread).
- `1411` MFDES: do not ship the GPH formula; expose raw u16 only (real units mg/stroke).

**Is FORScan still the only reliable path?** No — for the *actual-value* parameters (ICP, EBP, IPR, MAP/MGP, FICM rail voltages, EOT) your ELM327 + Mode 22 at the corrected addresses is sufficient. FORScan/IDS remains the **only** source for **desired ICP (ICP_DES)** and a labeled **FICM Sync Yes/No** gauge — those are IDS-computed/SCP-side parameters with no published generic Mode-22 DID, which is exactly why `121A`/`1229` returned no response.

**Confidence caveat to keep in the tool's comments:** the documentary corroboration, however broad in count, is largely **one community lineage** (the JESTERxHEAD Torque list) plus ScanGauge's independent XGauge DB. The genuinely independent confirmation is the truck's own scan for the 0x1000–0x14FF members. Treat 16AD/1434/1172/1672 as community-sourced-but-unverified until you read them back on the vehicle.
