OBD-II trouble code
P2248: O2 Sensor Reference Voltage Performance (Bank 2 Sensor 1)
A performance code on bank 2 comes with an advantage no single-bank engine ever gets: a second, healthy reference circuit on the same vehicle, in the same weather, on the same drive. Use bank 1 as the control and read the difference, not the number.
Quick facts
- System
- Powertrain
- Category
- Oxygen Sensor
- Severity
- Medium severity
- Drivable
- Usually safe to drive short-term
- Repair cost range
- $130 – $900
- DIY difficulty
- Advanced DIY
What does P2248 mean?
This is not a limit fault. The reference supply to the bank 2 upstream sensor is present and it is inside its absolute boundaries, which is why no open, low or high code has set. What the module has objected to is the way the value behaves — it drifts, it sags at moments it should not, it recovers slowly, or it simply does not track the way the module's model says a healthy reference should.
That makes it the hardest member of the reference voltage family to prove, and the one most often written off as intermittent and left alone. It is also the one where a two-bank engine hands you a diagnostic tool for free, and almost nobody uses it.
Here is the tool. If bank 2's reference is misbehaving and bank 1's is not, then bank 1 is a known-good example of the same circuit design, built by the same manufacturer, of the same age, at the same temperature, under the same vibration, seeing the same humidity, on the same drive. It is a control sample you would otherwise have to build. Log both banks' reference-derived live values together, in the same recording, and stop looking at whether bank 2's number is inside a published range. Look at whether the two banks diverge, when they diverge, and by how much. A reference that sits two hundred millivolts below its twin every time the cooling fan cycles has told you far more than a number that was technically within tolerance the whole time.
This reframing matters because published tolerance windows are wide enough to hide a real fault. A circuit can be inside spec and still be sick, and the module knows it because the module is comparing against its own expectations, not against a workshop manual figure. Bank-to-bank divergence gives you the same kind of evidence in a form you can actually see on a scan tool.
What actually causes the misbehaviour is usually a marginal connection rather than a failed part — a terminal with just enough contact to pass current but not enough to hold steady, a partially corroded pin, a splice that has begun to lose strands, or moisture that raises resistance in one weather condition and not another. Those faults are load-dependent and temperature-dependent by nature, which is precisely why they produce a performance code instead of a clean open or short.
One caution specific to reading it this way: only bank 1's healthiness makes it a valid control. Confirm bank 1 has no stored codes and no pending ones before you trust it as a baseline, and if the two banks are fed from a single shared rail, a divergence between them is telling you about the branch wiring rather than the rail itself. Both of those are quick checks and both change what the comparison means.
Common causes
- Marginal terminal contact in the bank 2 sensor connector — enough to conduct, not enough to hold steady under load or vibration
- Partially corroded pin that raises resistance in damp conditions and recovers when dry
- Splice or crimp in the reference conductor that has lost strands and now varies with temperature
- Reference conductor chafed to the point of intermittent partial contact with an adjacent circuit
- Sensor drawing an unstable load on the reference as its internal circuitry degrades with age
- Loose or high-resistance module connector terminal that behaves differently hot and cold
- Moisture ingress into the bank 2 connector body from cowl or engine bay water drainage
- Marginal module reference regulator that holds within limits but cannot maintain stability under changing load
Symptoms
- Check engine light that comes and goes, often clearing itself for days at a time
- Bank 2 fuel trim wandering while bank 1 stays steady in the same conditions
- Complaint that appears in one weather condition — damp mornings, heavy rain, hot days — and not others
- Brief lean or rich excursions on bank 2 that resolve on their own
- Occasional hesitation or momentary roughness with no repeatable trigger
- Fuel economy slightly down over time with no single obvious fault
- Emissions monitors that complete sometimes and not others
- A code that returns weeks after a previous repair that appeared to fix it
Diagnostic steps
- 1.Confirm bank 1 has no stored or pending codes. It is only usable as a control sample if it is genuinely healthy.
- 2.Check the wiring diagram for whether the two banks share a reference rail. If they do, a bank-to-bank divergence points at the bank 2 branch rather than the rail itself, which changes where you look.
- 3.Log both banks' reference-derived live values in the same recording, on the same drive, rather than testing bank 2 in isolation.
- 4.Read the divergence between the banks, not bank 2's absolute value. A circuit can sit inside a published tolerance window and still be faulty.
- 5.Note exactly when the two separate — cold start, warm idle, fan cycling, load changes, over bumps — because the trigger identifies the mechanism.
- 6.Wiggle-test the bank 2 sensor connector and the harness branch while watching the live comparison, and treat any step change in the gap as a located fault.
- 7.Inspect the bank 2 connector body for moisture, salt film and green corrosion on the pins, and check terminal tension against a known-good pin.
- 8.If the divergence follows temperature rather than movement, heat and cool the suspect connector and branch deliberately and watch whether the gap tracks.
- 9.After repair, log both banks together again in the conditions that originally produced the divergence and confirm they now track each other.
Repair cost
$130 – $900
Diagnosis is $120 to $350 and is typically the largest single line on this code, because proving an intermittent takes recorded data rather than a single measurement. Most repairs end up being connector or terminal work at $120 to $350. Harness branch repair runs $200 to $550. A replacement bank 2 upstream sensor is $180 to $600 fitted. Module replacement is rare on a performance code and runs $600 to $1,600 with programming, but it should never be the first move here — the evidence for it is a divergence that persists after the wiring has been proven good.
Estimate your repair
Run the numbers for your vehicle
Open the Repair Cost Estimator with wiring harness / circuit repair preselected. Adjust labor rate and vehicle category to fit your situation.
DIY vs shop
This is an advanced DIY job. It typically requires specialty tools, scan-tool access, lifting equipment, or careful sequencing to avoid causing new failures. Plan for extended downtime and have a backup vehicle. Most owners are better served by a shop that has done this repair before.