Correct Ford 6.0 Mode-22 PID table from workflow research
The old 12xx PIDs (1209/1228/120B/...) were wrong addresses -- that's why they returned 'no response' on the truck, NOT a bus/gateway problem. The real Ford-enhanced DIDs are in the 09xx/14xx/16xx families. Confirmed by the truck's own brute-scan: 1446=ICP, 1445=EBP, 1440=MAP, 1442=BARO, 1310=EOT, 11B3=gear, 11B4=TSS all decode to sane on-vehicle values. - Rewrite FORD_60_PIDS with corrected addresses + [VERIFIED]/[DOC]/[TENTATIVE] tags - FICM voltages -> 09D0/09CF/09CE/09CD (09D0 Main = the ~48V no-start metric) - ICP=1446 *0.57, IPR=1434, ICP_V=16AD; EOT scaling fixed to /100-40 - watch --ford now streams 09D0/09CF/1446/1434 (FICM main V + ICP during crank) - Add diagnostics/2026-06-29-no-start/pid-research.md (full workflow findings) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yT89n4zR4qbrySoSiEyZs
This commit is contained in:
@@ -0,0 +1,130 @@
|
|||||||
|
# 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.
|
||||||
+61
-38
@@ -11,19 +11,19 @@ Scope (what a generic ELM327 CAN do, engine off / KOEO):
|
|||||||
* Read key KOEO live PIDs (coolant, IAT, MAP, module voltage, RPM...)
|
* Read key KOEO live PIDs (coolant, IAT, MAP, module voltage, RPM...)
|
||||||
* Battery voltage at the OBD port (ATRV)
|
* Battery voltage at the OBD port (ATRV)
|
||||||
|
|
||||||
Experimental: with --ford it also tries a handful of community-sourced
|
Ford enhanced (--ford): reads Ford-enhanced Mode-22 PIDs (ICP, IPR%, FICM
|
||||||
Ford-enhanced Mode-22 PIDs (ICP, IPR%, FICM main/sync/logic voltage, EBP,
|
main/logic/vehicle voltage + sync, MAP/BARO/EBP, EOT, gear). Addresses were
|
||||||
EOT). The PID numbers and scaling are TENTATIVE and need to be verified
|
corrected 2026-06-29 (see diagnostics/2026-06-29-no-start/pid-research.md):
|
||||||
against a known-good reading (meter or FORScan). Raw bytes are always
|
14xx/13xx/11Bx are VERIFIED on this truck; the 09xx FICM family is documented
|
||||||
printed so you can sanity-check. Wrong PID = "no response", nothing
|
but not yet read here -- re-probe to confirm. Raw bytes are always printed.
|
||||||
written to the truck.
|
ICP_DES (desired ICP) has no public Mode-22 DID -> FORScan-only.
|
||||||
|
|
||||||
Usage (Windows):
|
Usage (Windows):
|
||||||
python obd_reader.py # auto-detect the COM port
|
python obd_reader.py # auto-detect the COM port
|
||||||
python obd_reader.py COM5 # force a port
|
python obd_reader.py COM5 # force a port
|
||||||
python obd_reader.py COM5 9600 # force port + baud
|
python obd_reader.py COM5 9600 # force port + baud
|
||||||
python obd_reader.py --ford # + try Ford 6.0 Mode-22 PIDs
|
python obd_reader.py --ford # + read Ford 6.0 Mode-22 PIDs
|
||||||
python obd_reader.py --pid 1430 # probe one Mode-22 PID, show raw
|
python obd_reader.py --pid 1446 # probe one Mode-22 PID (1446=ICP), show raw
|
||||||
python obd_reader.py --clear # erase stored + pending DTCs
|
python obd_reader.py --clear # erase stored + pending DTCs
|
||||||
|
|
||||||
Requires: pip install pyserial
|
Requires: pip install pyserial
|
||||||
@@ -142,32 +142,54 @@ def _u16(b):
|
|||||||
return (b[0] << 8) + b[1]
|
return (b[0] << 8) + b[1]
|
||||||
|
|
||||||
|
|
||||||
|
# Confidence tags in the notes column:
|
||||||
|
# [VERIFIED] multi-source AND confirmed by this truck's own brute-scan
|
||||||
|
# (the 14xx/13xx/11Bx PIDs returned sane values on-vehicle)
|
||||||
|
# [DOC] corroborated in >=2 independent sources but NOT yet read on
|
||||||
|
# this truck (the 09xx FICM family was outside the scan window)
|
||||||
|
# [TENTATIVE] single-source or disputed scaling -- sanity-check before trust
|
||||||
|
#
|
||||||
|
# These addresses were corrected 2026-06-29 by the ford-60-pid-hunt workflow.
|
||||||
|
# The OLD 12xx numbers (1209/1228/120B/...) were WRONG -- not real Mode-22
|
||||||
|
# DIDs -- which is why they all returned "no response" on the truck. See
|
||||||
|
# diagnostics/2026-06-29-no-start/pid-research.md for sources and the full
|
||||||
|
# verification. (ICP_DES / desired ICP has no public Mode-22 DID -> FORScan-only.)
|
||||||
FORD_60_PIDS = [
|
FORD_60_PIDS = [
|
||||||
# --- Injection Control Pressure (need ~500+ psi to fire) ---
|
# --- Injection Control Pressure (need ~500+ psi to fire) ---
|
||||||
("1209", "ICP", "psi", lambda b: _u16(b),
|
("1446", "ICP", "psi", lambda b: round(_u16(b) * 0.57, 1),
|
||||||
"Injection Control Pressure (need ~500+ psi to fire)"),
|
"[VERIFIED] Injection Control Pressure -- need ~500+ psi to fire"),
|
||||||
("121A", "ICP_DES", "psi", lambda b: _u16(b),
|
("16AD", "ICP_V", "V", lambda b: round(_u16(b) * 0.000072, 4),
|
||||||
"ICP desired (commanded)"),
|
"[TENTATIVE] ICP sensor raw voltage (single-source)"),
|
||||||
("1430", "ICP_V", "V", lambda b: _u16(b) / 1000.0,
|
|
||||||
"ICP sensor raw voltage"),
|
|
||||||
|
|
||||||
# --- Injection Pressure Regulator duty ---
|
# --- Injection Pressure Regulator duty ---
|
||||||
("120B", "IPR", "%", lambda b: round(b[0] * 100 / 255, 1),
|
("1434", "IPR", "%", lambda b: round(b[0] * 13.53 / 35, 1),
|
||||||
"IPR duty (high = trying hard to make ICP)"),
|
"[TENTATIVE] IPR duty -- KOEO ~14-15%, cranking ~30-40%, idle ~25-30%"),
|
||||||
|
|
||||||
# --- FICM voltages -- THE 6.0 no-start metric (~48V cranking) ---
|
# --- FICM voltages -- THE 6.0 no-start metric (~48V cranking) ---
|
||||||
("1228", "FICM_MPWR", "V", lambda b: _u16(b) / 1000.0,
|
("09D0", "FICM_MPWR", "V", lambda b: round(_u16(b) / 256.0, 1),
|
||||||
"FICM Main Power -- want ~48V cranking, <45V = suspect"),
|
"[DOC] FICM Main Power -- want ~48V cranking, <45V = suspect"),
|
||||||
("1229", "FICM_SYNC", "V", lambda b: _u16(b) / 1000.0,
|
("09CF", "FICM_LPWR", "V", lambda b: round(_u16(b) / 256.0, 1),
|
||||||
"FICM Sync Power"),
|
"[DOC] FICM Logic Power (~12V)"),
|
||||||
("122A", "FICM_LPWR", "V", lambda b: _u16(b) / 1000.0,
|
("09CE", "FICM_VPWR", "V", lambda b: round(_u16(b) / 256.0, 1),
|
||||||
"FICM Logic Power (~12V)"),
|
"[DOC] FICM Vehicle Power (battery, ~12-14V)"),
|
||||||
|
("09CD", "FICM_SYNC", "", lambda b: (b[0] >> 1) & 1,
|
||||||
|
"[DOC] FICM Sync -- 1=in sync, 0=no sync (bit 1 of A)"),
|
||||||
|
|
||||||
# --- Exhaust back pressure / oil temp (handy, not no-start critical) ---
|
# --- Pressures (all raw*0.03625 -> psi ABSOLUTE) ---
|
||||||
("121C", "EBP", "psi", lambda b: _u16(b) / 100.0,
|
("1440", "MAP", "psi", lambda b: round(_u16(b) * 0.03625, 2),
|
||||||
"Exhaust Back Pressure"),
|
"[VERIFIED] Manifold Absolute Pressure (psi abs; MGP boost = MAP-BARO)"),
|
||||||
("1310", "EOT", "C", lambda b: b[0] - 40,
|
("1442", "BARO", "psi", lambda b: round(_u16(b) * 0.03625, 2),
|
||||||
"Engine Oil Temperature"),
|
"[VERIFIED] Barometric Pressure (psi abs)"),
|
||||||
|
("1445", "EBP", "psi", lambda b: round(_u16(b) * 0.03625, 2),
|
||||||
|
"[VERIFIED] Exhaust Back Pressure (psi abs; minus BARO = gauge)"),
|
||||||
|
|
||||||
|
# --- Oil temp / driveline ---
|
||||||
|
("1310", "EOT", "C", lambda b: round(_u16(b) / 100.0 - 40, 1),
|
||||||
|
"[VERIFIED] Engine Oil Temperature"),
|
||||||
|
("11B3", "GEAR", "", lambda b: b[0] // 2,
|
||||||
|
"[VERIFIED] Current gear (5R110W TorqShift)"),
|
||||||
|
("11B4", "TSS", "rpm", lambda b: _u16(b) / 4,
|
||||||
|
"[VERIFIED] Trans input/turbine shaft speed"),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@@ -408,10 +430,11 @@ def read_ford_pids(elm, pids=None):
|
|||||||
if pids is None:
|
if pids is None:
|
||||||
pids = FORD_60_PIDS
|
pids = FORD_60_PIDS
|
||||||
print("\n" + "-" * 64)
|
print("\n" + "-" * 64)
|
||||||
print(" FORD 6.0 ENHANCED (Mode 22) -- TENTATIVE / UNVERIFIED")
|
print(" FORD 6.0 ENHANCED (Mode 22)")
|
||||||
print("-" * 64)
|
print("-" * 64)
|
||||||
print(" PID numbers and scaling are community-sourced and NOT yet")
|
print(" [VERIFIED] = confirmed on this truck's scan; [DOC] = corroborated")
|
||||||
print(" verified on this truck. Raw bytes shown for sanity-checking.")
|
print(" in sources but not yet read here (re-probe to confirm);")
|
||||||
|
print(" [TENTATIVE] = single-source/disputed scaling. Raw bytes shown.")
|
||||||
print(" 'no response' = wrong PID or this PCM doesn't expose it.")
|
print(" 'no response' = wrong PID or this PCM doesn't expose it.")
|
||||||
print()
|
print()
|
||||||
any_response = False
|
any_response = False
|
||||||
@@ -464,17 +487,17 @@ def watch_loop(elm, seconds=20, with_ford=False):
|
|||||||
"""Stream battery + module voltage as fast as we can for N seconds.
|
"""Stream battery + module voltage as fast as we can for N seconds.
|
||||||
Designed for cranking: start it, then turn the key.
|
Designed for cranking: start it, then turn the key.
|
||||||
|
|
||||||
with_ford=True also streams Mode-22 FICM/ICP PIDs -- only enable once
|
with_ford=True also streams Mode-22 FICM/ICP PIDs. 09D0 (FICM Main) is
|
||||||
those PIDs are verified for this PCM, otherwise each 'no response'
|
the no-start metric -- watch it sag during cranking (<45V = failing FICM).
|
||||||
timeout starves the sample rate."""
|
The 09xx PIDs are [DOC]-grade (not yet read on this truck) -- if they
|
||||||
|
'no response', the timeout will starve the sample rate, so drop --ford."""
|
||||||
stream_pids = []
|
stream_pids = []
|
||||||
if with_ford:
|
if with_ford:
|
||||||
stream_pids = [
|
stream_pids = [
|
||||||
("1228", "FICM_M", "V", lambda b: (b[0] << 8 | b[1]) / 1000.0),
|
("09D0", "FICM_M", "V", lambda b: round((b[0] << 8 | b[1]) / 256.0, 1)),
|
||||||
("1229", "FICM_S", "V", lambda b: (b[0] << 8 | b[1]) / 1000.0),
|
("09CF", "FICM_L", "V", lambda b: round((b[0] << 8 | b[1]) / 256.0, 1)),
|
||||||
("122A", "FICM_L", "V", lambda b: (b[0] << 8 | b[1]) / 1000.0),
|
("1446", "ICP", "psi", lambda b: round((b[0] << 8 | b[1]) * 0.57, 1)),
|
||||||
("1209", "ICP", "psi", lambda b: (b[0] << 8 | b[1])),
|
("1434", "IPR", "%", lambda b: round(b[0] * 13.53 / 35, 1)),
|
||||||
("120B", "IPR", "%", lambda b: round(b[0] * 100 / 255, 1)),
|
|
||||||
]
|
]
|
||||||
print("\n" + "=" * 64)
|
print("\n" + "=" * 64)
|
||||||
print(f" WATCH MODE ({seconds}s) -- Ctrl-C to stop early")
|
print(f" WATCH MODE ({seconds}s) -- Ctrl-C to stop early")
|
||||||
|
|||||||
Reference in New Issue
Block a user