AutoLogicTools

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.

Medium severityPowertrainOxygen SensorDrivable short-term

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. 1.Confirm bank 1 has no stored or pending codes. It is only usable as a control sample if it is genuinely healthy.
  2. 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. 3.Log both banks' reference-derived live values in the same recording, on the same drive, rather than testing bank 2 in isolation.
  4. 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. 5.Note exactly when the two separate — cold start, warm idle, fan cycling, load changes, over bumps — because the trigger identifies the mechanism.
  6. 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. 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. 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. 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.

Related codes

Frequently asked questions

The reading looks like it is within spec. Why is there a code?

Because the module is not comparing against a published tolerance window — it is comparing against how the circuit ought to behave. Those windows are wide enough that a circuit can sit inside one and still be sick. That is why the useful test on a two-bank engine is not the absolute number but the gap between the banks. If bank 2 sags relative to bank 1 every time the fan cycles, that is a real fault regardless of whether both numbers were technically in range.

How do I use bank 1 as a comparison?

Log both banks in the same recording, on the same drive, and watch them side by side rather than testing bank 2 on its own. Bank 1 gives you the same circuit design, the same age, the same temperature and the same vibration — a control sample you would otherwise have no way to build. Two conditions make it valid: bank 1 must have no stored or pending codes of its own, and you should know from the wiring diagram whether the two banks share a rail, because if they do, a divergence is pointing at the branch wiring rather than the rail.

Why does this only happen in certain weather?

Because the usual cause is a marginal connection rather than a failed component, and marginal connections are sensitive to moisture and temperature. A pin with light corrosion can conduct perfectly on a dry day and lose stability on a damp one; a splice with lost strands can behave differently hot and cold. That weather dependence is not noise to be ignored — it is the clue that tells you to look at connections rather than parts.

Should I replace the sensor to see if it fixes it?

It is a poor first move on this code. A degrading sensor can draw an unstable load on the reference and is a genuine cause, but marginal terminal contact and moisture in the connector are far more common, much cheaper, and produce the same wandering behaviour. On a bank 2 sensor the part and the labour are both usually more than the bank 1 equivalent, so a guess costs real money. Record the bank-to-bank comparison first and let the data pick the part.

AutoLogicTools provides general automotive planning information. Trouble code interpretations, repair cost ranges, and DIY guidance vary by vehicle, model year, location, parts quality, and shop labor rate. Always verify a diagnosis with a scan tool and a qualified automotive professional before approving repairs.