Subaru P1604 Code: What It Means and How to Fix It
The P1604 code means Startability Malfunction — often caused by a weak battery. Here's what's actually happening, how to diagnose it, and the correct fix.
You pull out your scan tool, hook it up to your Subaru, and there it is: P1604 — Startability Malfunction. The name alone is vague enough to send you down a rabbit hole of forums, most of which will tell you to check your crankshaft position sensor, replace the ECU, or perform some elaborate re-initialization ritual.
Ignore most of that. In my experience, P1604 on a Subaru comes down to one thing about 80% of the time: a weak battery that can’t hold voltage during cranking. Here’s what’s actually happening, how to confirm it, and how to fix it without throwing parts at the wall.
What P1604 Actually Means
P1604 is a Subaru manufacturer-specific code — it won’t show up on a generic $20 Bluetooth dongle, which is part of why it trips people up. The full definition is Startability Malfunction, and it’s logged by the engine ECU (the PCM/ECM, depending on the generation) when it can’t confirm a successful start event.
Here’s the specific mechanism: during cranking, the ECU monitors battery voltage. If voltage drops below a calibrated threshold — typically somewhere in the 9–10V range — while the starter motor is engaged, the ECU treats it as a failed start condition and logs P1604. The engine may have actually started fine. The car may be running perfectly when you scan it. Doesn’t matter — the ECU saw that voltage sag and wrote the code.
This is Subaru’s way of flagging a battery that’s struggling. It’s not telling you the engine didn’t start; it’s telling you the battery barely made it happen.
That’s a meaningful distinction. P1604 is a leading indicator of a battery that’s about to leave you stranded, not a current failure of any ignition or engine component.
Which Subaru Models Are Affected
P1604 shows up across a wide range of Subaru platforms, primarily 2014 and newer models running the current-generation ECU architecture. The affected lineup includes:
- Forester (2014+, all trims including XT)
- Outback (2015+, including 3.6R)
- Impreza (2014+, sedan and hatch)
- Crosstrek (2016+, including Hybrid)
- Legacy (2015+)
- WRX/STI (2015+, though less common due to larger OEM battery)
- Ascent (2019+)
Older Subarus — pre-2014 EJ-engine cars especially — use a different ECU architecture and won’t generate this specific code. If you’re on a 2013 or earlier and seeing battery-related codes, look for P0562 (System Voltage Low) or C1411 instead.
Why a Weak Battery Causes It
The flat-four engines in most of these Subarus — the FA20, FB20, FB25, and EJ25 — are reasonably easy to turn over when warm, but they’re not light loads on a cold morning. A healthy battery under a cold-crank load should stay above 10V throughout the crank cycle.
When a battery ages, its cold cranking amperage (CCA) output degrades. The rated CCA on the label — say, 550 CCA — is what it could deliver when new. After 3–5 years, depending on climate and usage, that same battery might only deliver 350–400 CCA. It’ll start the car most of the time. But voltage will sag harder during cranking, and in cold weather or after sitting overnight, it may dip below the ECU’s threshold.
The ECU sees: “Voltage dropped to 9.1V during start. Flagging P1604.”
You see: car starts, runs fine, check engine light is on.
Clearing the code without addressing the battery brings it back — sometimes within a day, sometimes after a few weeks of warmer weather. Either way, it comes back.
Companion Codes to Watch For
P1604 rarely travels alone on Subarus with genuine electrical issues. When you scan, look for these alongside it:
- C1411 — Low battery voltage, stored by the ABS module. If both the engine ECU and the ABS module are logging voltage complaints, that’s strong corroboration that the battery is the problem.
- B1149 — Battery voltage malfunction from the body control module side.
- U0100 — Lost communication with ECM/PCM. This can appear if voltage sagged enough during cranking to briefly knock out CAN bus communication.
- P0562 — System voltage low. A more generic version of the same complaint.
If you’re only seeing P1604 and nothing else, you might be in the early stages of battery degradation. If you’re seeing P1604 plus C1411 plus a U-code or two, your battery is in rough shape and needs to come out today.
Get the weekly Field Notes newsletter — Subscribe free →
Diagnosis: Don’t Trust the Green Light on a Basic Tester
I’ll tell you about a 2018 Outback that came through my workflow last winter. The owner had 92,000 miles on a 4-year-old OEM Subaru battery — the original Panasonic unit that came from the factory. She’d had the battery tested twice at parts stores. Both times: green light, “battery good,” 72% state of health.
She still had P1604 stored. It had cleared and come back three times over two months.
I put a proper load tester on it — not a conductance tester, an actual carbon pile load tester — and applied a 250A load for 15 seconds. Voltage collapsed to 8.4V. That battery was done. The parts store testers were measuring open-circuit voltage and running a conductance check, which is fine for a quick assessment but misses a battery that can’t sustain voltage under real load.
Here’s the actual diagnosis procedure:
Step 1 — Scan for all stored and pending codes across all modules. Don’t just read engine codes. Use a scanner that can read body and ABS codes. If you’re using a generic OBD2 reader, it may not even see P1604 since it’s a manufacturer-specific code. A tool like the Foxwell NT604 Elite OBD2 Scanner or BlueDriver Pro OBD2 Scanner will pull codes from all modules, not just the powertrain.
Step 2 — Check battery terminal condition. Look for corrosion at both terminals and at the negative ground strap where it attaches to the chassis. A corroded ground strap adds resistance that mimics a weak battery — voltage sag during cranking, intermittent electrical gremlins, and yes, P1604. Clean terminals with a wire brush and baking soda solution before condemning the battery.
Step 3 — Load test the battery. A conductance tester (the kind most parts stores use) will tell you approximate state of health but can miss batteries that fail under real current draw. If you have access to a carbon pile load tester, use it. Apply half the CCA rating as the load and watch whether voltage stays above 9.6V for 15 seconds. If it drops below that, the battery is done.
Step 4 — Check charging system output. With the engine running and a load on (headlights, rear defroster, blower motor on high), check voltage at the battery terminals. You want 13.8–14.7V. Below 13.5V with load suggests an alternator that’s not keeping up. Above 14.8V suggests a voltage regulator issue. Either can contribute to P1604 over time by chronically undercharging or overcharging the battery.
Step 5 — Inspect the negative ground strap. On Subarus, there’s a main ground strap from the negative battery terminal to the chassis, and a secondary strap from the engine block to the body. These corrode from the inside out — the cable looks fine externally but the internal conductors are oxidized. If you have unexplained voltage drop during cranking and the battery tests healthy, pull the ground straps and check continuity and resistance end-to-end.
The Fix
In most cases: replace the battery.
Subaru specifies a Group 35 battery for most of the affected models (some larger engines use Group 24F — check your owner’s manual or the battery label). Look for at minimum the OEM-rated CCA — typically 550–590 CCA depending on the model. Honestly, buying slightly above the OEM spec isn’t a bad idea if you’re in a cold climate.
If you want to stay close to OEM spec, the Odyssey PC680 Battery (Subaru replacement) is the correct replacement. For verifying the old battery’s actual condition before replacement, the Battery Load Tester is a decent entry-level load tester for home use.
After replacing the battery, you’ll need to clear the code — it won’t self-clear just because the root cause is gone. Use your scan tool to erase stored fault codes across all modules, not just the engine ECU. The C1411 in the ABS module needs to be cleared separately if it’s present.
If the battery tests genuinely healthy:
Go back and check the charging system and ground straps. A faulty alternator diode that’s bleeding current overnight, a parasitic drain from an aftermarket accessory, or a corroded ground strap can all cause P1604 without the battery itself being defective. In rare cases — and I mean rare — a corroded fusible link or main fuse block connection can cause enough resistance to drop voltage during cranking even with a good battery.
ECU re-initialization:
Some forums recommend performing a “Throttle Position Sensor initialization” or “Clear Memory” procedure after any battery replacement on modern Subarus. This resets idle learn, transmission adaptive memory, and other learned parameters. On 2015+ models with an electronic parking brake or EyeSight, you may see a temporary warning light after battery replacement — these typically self-clear within a few drive cycles. If they don’t, a quick reset with a capable scan tool will handle it.
Scanner Recommendations for P1604 Diagnosis
As I mentioned, a generic OBD2 scanner may not read P1604 at all — it’s a manufacturer-specific code in the P1xxx range that requires Subaru-enhanced coverage. The same applies to C1411 in the ABS module.
For diagnosing P1604 properly, you need a scanner that covers:
- Subaru-specific powertrain codes (P1xxx range)
- ABS/SRS module codes
- Body module codes
- Live data including battery voltage during cranking (if your scanner supports freeze frame or live graphing)
The Foxwell NT604 Elite OBD2 Scanner handles all of this at a price point that’s reasonable for a Subaru owner who doesn’t want to pay shop rates for a diagnosis they can do in the driveway. The BlueDriver Pro OBD2 Scanner is excellent if you prefer working from your phone — its Subaru-specific database is genuinely good, and the live data graphing makes it easy to watch voltage behavior during a cranking event.
I’ve got a full comparison of Subaru-compatible scanners in this article if you want to dig deeper. And if you’re looking up an unfamiliar code, the OBD code lookup tool will tell you what you’re dealing with before you start pulling things apart.
Bottom Line
P1604 on a Subaru is the ECU telling you it saw a voltage sag during cranking that fell below its acceptable threshold. It’s almost always a battery problem — specifically a battery that’s aged past its useful CCA output even if it still shows a green light on a basic tester.
The diagnosis isn’t complicated: scan all modules for companion codes, load test the battery properly (not just a conductance check), inspect the ground straps, and verify charging system output. In four out of five cases, a battery replacement clears P1604 and it doesn’t come back.
Don’t clear the code and hope for the best. A battery that’s causing P1604 on a cold morning is a battery that’s going to leave you stranded on a cold morning — it’s just a question of which one.
Related Articles
Check Engine Light Just Came On — Here Is What to Do First
Steady CEL vs flashing CEL changes everything. Here is how to triage a check engine light, get a free scan, and decide if you can keep driving.
How to Use Live Data on Your OBD2 Scanner — the Values That Actually Matter
Codes tell you where to look. Live data tells you what is actually happening. Learn the key PIDs, normal ranges, and how to read fuel trims correctly.
How to Reset TPMS Sensors After a Tire Rotation or New Tires
TPMS light on after a rotation? Learn how direct and indirect systems work and the right reset method for your vehicle before you make it worse.