AutoLogicTools

OBD-II trouble code

P0591: Cruise Control Multi-Function Input "B" Circuit Range/Performance

A voltage arrived on the "B" input that is neither too low nor too high — it simply landed in the empty space between two recognised commands, so the module could measure it but had no idea what the driver asked for.

Low severityPowertrainCruise ControlDrivable short-term

Quick facts

System
Powertrain
Category
Cruise Control
Severity
Low severity
Drivable
Usually safe to drive short-term
Repair cost range
$0$450
DIY difficulty
Intermediate DIY

What does P0591 mean?

P0591 is about the gaps in a lookup table, which makes it a fundamentally different failure from the low and high codes that sit either side of it.

The calibration for a multiplexed switch input is a list of voltage windows. Each recognised command occupies a narrow band, and between the bands the engineers leave deliberate empty space — guard bands, whose only purpose is to keep two adjacent commands from being confused when component tolerances stack up in opposite directions. That empty space is not a fault region by accident. It is designed to be unreachable in a healthy system, which is precisely what makes an arrival there diagnostically meaningful. P0591 says a measurement landed in a guard band: on scale, within the supply rails, entirely readable, and matching nothing.

The physical cause is almost always drift rather than damage. The values in the ladder come from real resistors, and real resistors move. Carbon-film elements age upward. Contact resistance at a switch pad climbs as the plating oxidises. Every one of those changes is small — a few percent — and for a long time it makes no difference at all, because the band has margin built in. Then the accumulated drift finally walks one command past the edge of its window and into the guard band next door, and the code appears with no event to explain it. Nothing broke on the day the light came on; a slow change simply crossed a line.

That mechanism gives P0591 two behaviours the other codes in the family do not share, and both are useful. First, it is strongly temperature-sensitive. Resistance shifts with temperature, so a ladder already sitting near the edge of a window is far more likely to fall out of it on a cold morning than on a warm afternoon, which is why so many of these are intermittent in a way that tracks the weather rather than the road. Second, and more valuable, the fault is self-identifying. Because a guard band lies between two specific commands, reading the measured voltage and comparing it against the calibration table tells you exactly which button has drifted, without disassembling anything. There is no equivalent shortcut on a low or high code, where the fault swamps every band at once.

The other population worth naming is aftermarket hardware. A replacement steering wheel, a switch pad from a different trim level, or a generic control assembly sold as a universal fit will often use resistor values that are close to the original but not identical. The buttons work — sometimes for months — and then the mismatch shows up as a persistent range/performance fault on one function. If the wheel or the switch pad has been changed at any point, that is the first thing to establish, because no amount of circuit testing will find a fault in wiring that is perfectly healthy.

Common causes

  • Aged resistors in the switch ladder whose values have drifted out of their calibration windows
  • Oxidised switch contacts adding resistance that shifts a command toward the adjacent guard band
  • Aftermarket or wrong-trim steering wheel switch assembly with resistor values close to but not matching specification
  • High resistance at a connector pin behind the wheel, offsetting every band by a small amount
  • Marginal ground reference for the switch circuit, biasing all reported values
  • Partially broken conductor strand raising circuit resistance without opening it
  • Moisture inside the switch pad creating a leakage path in parallel with the ladder
  • Worn contact plating on a single frequently used button such as set or resume
  • Control module reference voltage drifting slightly out of tolerance, uncommon and last to suspect

Symptoms

  • Check engine light on with P0591 stored
  • One cruise control function producing the wrong action while others behave normally
  • Cruise engaging but ignoring a specific command such as resume or coast
  • Fault appearing on cold mornings and clearing once the vehicle warms up
  • Intermittent behaviour with no clear connection to road or steering input
  • Cruise buttons working when pressed firmly but not with a light touch
  • Symptoms starting some time after a steering wheel or switch pad was replaced
  • No symptoms at all beyond the stored code on some vehicles

Diagnostic steps

  1. 1.Read the live "B" circuit voltage with nothing pressed, then with each button held, and write down every value. This code is diagnosed from the numbers, not from continuity.
  2. 2.Compare each measured value against the calibration table and identify which two commands the failing reading fell between. That names the drifted button before anything is taken apart.
  3. 3.Establish whether the steering wheel, switch pad or clockspring has ever been replaced. Aftermarket ladders with near-miss resistor values produce this exact code and no wiring fault.
  4. 4.Repeat the readings cold if the complaint is weather-related. A ladder that measures in specification warm can fall out of its window at low temperature, and testing warm will find nothing.
  5. 5.Measure the resistance of each button directly at the switch connector and compare against specification rather than against each other. A uniform offset across all buttons points at the shared path, not the switch.
  6. 6.Check the voltage drop across the circuit ground. A small ground offset moves every band and is a common reason a good switch reads out of range.
  7. 7.Inspect connector pins behind the wheel for green oxide or spread terminals, which add exactly the small, stable resistance this code responds to.
  8. 8.Press each button with light and then firm pressure while watching the live value. A reading that only reaches its correct band under firm pressure is a worn contact caught in the act.
  9. 9.Where the module supports it, compare the "A" ladder's values against the "B" ladder's. Both drifting together implicates the reference or ground; one drifting alone implicates that switch.

Repair cost

$0$450

Cleaning oxidised contacts or reseating a connector behind the wheel can resolve it for the cost of an hour's labour. A steering wheel control switch assembly is $30-$200 in parts with 0.5-1.5 hours of labour, and the correct part number matters more here than on most jobs — a switch from the wrong trim level will have different resistor values and can set this code straight back. Repairing a high-resistance ground or connector is $80-$250. If an aftermarket steering wheel is involved, budget for the OEM switch assembly rather than another universal-fit part, since the mismatch is the fault.

Estimate your repair

Run the numbers for your vehicle

Open the Repair Cost Estimator with cruise control switch replacement preselected. Adjust labor rate and vehicle category to fit your situation.

DIY vs shop

This is an intermediate DIY job. It usually involves diagnostic steps, specialty parts, and some careful work in tight spaces. If you have the tools and a service manual or trustworthy video for your specific vehicle, it is achievable in a weekend. Otherwise, a competent independent shop will be faster.

Related codes

Frequently asked questions

What is the difference between P0591 and the low or high codes?

It is the difference between an unreadable signal and an unclassifiable one. The low and high codes fire when the voltage leaves the usable scale entirely, which almost always means a short or an open and affects every button on the circuit at once. P0591 fires when the voltage is perfectly on scale but lands in one of the deliberate empty gaps the calibration leaves between commands. That distinction has a practical payoff: because a gap sits between two named commands, the measured value tells you which specific button drifted, whereas a low or high reading tells you nothing about which button is involved.

Why does it only happen when it is cold?

Resistance changes with temperature, and a switch ladder that has already drifted close to the edge of its window has very little margin left. On a cold morning the shift is just enough to push the value out of its band and into the gap next door; by the time the cabin warms, it has moved back inside and the fault disappears. This is a useful clue rather than a nuisance — it says the ladder is marginal rather than broken, which points at aged resistors or oxidised contacts and away from a wiring fault. It also means testing on a warm afternoon will find nothing, so read the values cold.

I fitted a replacement steering wheel and now I have this code. Are they connected?

Almost certainly. The buttons in a multiplexed switch identify themselves by resistance, and the module compares what it measures against a table of values programmed for your specific vehicle. A switch assembly from a different trim level, a different model year, or a universal aftermarket kit can use resistors that are close enough for the buttons to appear to work while sitting near the boundary of their windows. Once one lands outside, you get a persistent range/performance fault on a circuit with nothing wrong with it. The fix is the correct part number, not further diagnosis.

Can I keep driving with P0591?

Yes. This code sits on a convenience circuit that has no connection to braking, steering, or how the engine runs, so nothing about it makes the vehicle unsafe. What you lose is reliable cruise control — most often one function behaving unpredictably rather than the whole system failing — and a check engine light that will mask the next fault the car develops. Since the underlying cause is usually gradual drift, it also tends to get worse rather than better, so it is worth reading the live values while the fault is still intermittent and easy to characterise.

Editorial context

About This Diagnostic Information

AutoLogicTools diagnostic guides explain OBD-II trouble codes using recognized code definitions, standard automotive diagnostic principles, and practical automotive context. A trouble code records a condition detected by a control module. It does not automatically identify a failed part, and the right diagnostic procedure can vary by vehicle.

Manufacturer service information, technical service bulletins, wiring diagrams, and vehicle-specific procedures should take precedence when available.

AutoLogicTools was founded by Vincent Fisk, an automotive locksmith and shop owner in San Diego with hands-on experience in vehicle keys, immobilizer systems, electrical issues, modules, programming, and diagnostics.