The check engine light is on. You plug in a scanner. It returns nothing. No codes, no pending faults, no data worth acting on. This is one of the most frustrating diagnostic situations a driver faces, and it leads most people to assume the scanner is broken, the light is wrong, or nothing is actually wrong with the car. None of those explanations is reliable, and each one leads to a different mistake. There are seven specific reasons this combination occurs, and each one requires a different response.
My why does check engine light come on after oil change covers this step by step.
About the author: Hello! I’m Kamil Siegień, founder of OBD2 Scout. My diagnostic experience started with an engine rebuild on a 2014 Skoda Superb 1.8 TSI, where tuning from 160 to 222 hp required mastering live data and ECU behavior that basic code readers cannot handle. I am a former BMW and MINI employee and regularly use diagnostic scanners on my own Audi A4 2.0 TFSI.
This guide covers each cause of the no-code situation in detail, what the ECU is actually doing in each case, and the exact diagnostic steps that separate a resolved minor fault from a developing problem the basic scanner missed entirely.
How the ECU Decides to Store a Code and Turn the Check Engine Light On
The check engine light, technically called the Malfunction Indicator Lamp or MIL, does not turn on the moment a sensor reads an unusual value. The ECU applies a confirmation process before logging a fault and illuminating the light. For most faults, the ECU must detect the same failure condition across two consecutive drive cycles before it stores a confirmed Diagnostic Trouble Code and turns the MIL on. This process prevents a single momentary glitch from triggering a persistent warning.
My my guide on reset check engine light without a scanner covers this step by step.
My the malfunction indicator light mil explained covers this step by step.
Manufacturers apply different names to this light, with ‘Service Engine Soon’ being the most common alternative; my guide to why some vehicles show service engine soon instead of check engine explains which brands chose that name and whether it changes how the light should be interpreted.
A drive cycle is not simply starting the car. It is a sequence of operating conditions (cold start, warm-up, highway cruise, deceleration, idle), that allows the ECU to run the self-tests it needs to evaluate specific systems. Some faults require the ECU to see failure across two complete drive cycles. Others, particularly those that could cause immediate catalytic converter damage, will confirm in a single cycle or even trip the MIL immediately without confirmation. The guide on the OBD2 drive cycle covers the specific enabling conditions each monitor needs before the ECU can run its tests.
Once a fault confirms, the ECU stores the DTC in non-volatile memory and holds it there through multiple power cycles. Clearing it requires either an explicit command from a scan tool or enough consecutive clean drive cycles for the ECU to decide the fault is gone. The light staying on after a repair attempt is a separate cause covered below, the two situations look identical on a scanner but have completely different explanations.
A cleared code that reappears on the next drive is a third scenario with its own explanation; my guide on the check engine light turning back on after clearing covers the full fault cycle and the permanent code category that no scanner command can erase.
Cause 1: The Fault Was Intermittent and Cleared Before You Scanned

Intermittent faults are the single most common reason for a check engine light with no stored codes. The fault occurred, the ECU detected it, but it did not persist across the number of drive cycles required to confirm and store a DTC. The light came on because the ECU saw the fault once. Before the second occurrence confirmed it, the underlying condition resolved, or simply did not repeat under the same conditions.
My most common reasons check engine light comes on covers this step by step.
A bidirectional OBD2 scanner can run active tests to force system operation under controlled conditions, which helps reproduce intermittent faults that never confirm through normal driving.
Specific examples of faults that behave this way: a fuel injector that sticks briefly during cold operation and frees up once the engine warms; a mass airflow sensor that reads incorrectly during a hard acceleration event on a warm day due to heat soak; an oxygen sensor whose output is erratic only at a narrow RPM band the driver rarely uses; a crankshaft position sensor losing signal for a fraction of a second over a rough road surface. Each of these can trip the MIL for a drive, then produce nothing on the next scan if conditions did not repeat.
My how to reset injector coding with obd2 scanner covers this step by step.
The diagnostic signal in this scenario is the drive cycle that just happened before the scan. If the light came on during highway driving at sustained high RPM, the fault is more likely sensor-related or ignition-related under load. If it appeared during a cold start and cleared by the time you reached the highway, a temperature-dependent component is the more likely cause. Intermittent faults that repeat will eventually confirm and store. The guide on OBD2 freeze frame data explains how to capture the operating conditions at the moment of a fault, the most practical tool for chasing intermittent problems before they confirm.
Cause 2: Your Scanner Can Only Read Generic OBD2 Codes
My guide to the best OBD2 scanners for ABS and SRS covers which tools access manufacturer-specific module memory beyond the generic OBD2 set.
Not all scan tools access the same codes. The OBD2 standard mandates that every vehicle expose a specific set of generic powertrain codes, accessible through a standard interface, on a standardized connector. Those generic codes cover the emissions-relevant systems: fuel system, misfires, catalyst efficiency, oxygen sensors, EGR, EVAP, and MAF. They do not cover every fault the vehicle can generate. Transmission faults, body control module faults, immobilizer faults, chassis faults, and TPMS faults are stored in manufacturer-specific memory that not every scan tool can reach.
My what are enhanced obd2 codes covers this step by step.
A basic code reader that costs under $30 reads generic OBD2 codes only. A mid-range scan tool reads generic OBD2 codes plus some enhanced manufacturer-specific codes for the most common makes. A professional-grade full-system scanner reads codes from every module on the vehicle: ECU, TCM, BCM, ABS module, airbag module, instrument cluster, and any other networked module the manufacturer installed. The guide on OBD2 code readers vs scanners covers the exact capability difference and what each tool accesses.
If the fault that triggered the MIL is stored in the transmission control module as a manufacturer-specific code, or in the body control module as a U-code network fault, a generic code reader will return zero results. The light is on. The code exists. The scanner simply cannot see it. Before concluding there are no codes, verify the scan tool used can access all modules on the vehicle, not just the ECU.
My a full system scan obd2 scanner explained covers this step by step.
Cause 3: The Code Is Pending and Has Not Confirmed Yet

A pending code is a fault the ECU has detected once but not yet confirmed. It exists in a separate pending code buffer, not in the confirmed DTC storage where most scan tools read by default. Some basic code readers do not display the pending code buffer at all. If the scan tool only reports confirmed DTCs, a pending fault is invisible to it even though the ECU has already flagged the condition.
The MIL does not illuminate for a pending code in most cases. However, there are exceptions. Some manufacturers illuminate the MIL on the first fault detection for certain systems, particularly those related to misfire severity or fuel system rich conditions, before the second confirmation cycle completes. In those cases, the light is on, the confirmed code buffer is empty, and a basic reader returns nothing, but the pending buffer contains the fault. A scan tool that can access pending codes reveals it immediately.
To check for pending codes, the scan tool must have a dedicated “Pending Codes” or “Mode $07” function. Most mid-range and professional scanners include this. Navigate to it separately from the standard DTC read function. If a pending code appears, document it and drive the vehicle through a complete drive cycle under the conditions that triggered the fault, highway cruise, varied RPM, cold start if the fault is temperature-dependent. The second confirmation occurrence will store it as a confirmed DTC. The guide on pending vs confirmed OBD2 codes covers the exact drive cycle count each code type requires before confirming.
Cause 4: A Mode $06 Test Failure Without a Stored DTC
Mode $06 is one of the least-discussed OBD2 diagnostic modes. It stores the numerical results of the ECU’s non-continuous monitor self-tests: catalytic converter efficiency ratio, oxygen sensor response time, EGR flow rate, EVAP system leak test result, and similar component-level measurements. These results include both the actual measured value and the minimum or maximum threshold the component must meet to pass. A component can fail its Mode $06 test (its actual value crosses the threshold), without the ECU having stored a confirmed DTC.
My obd2 mode 06 explained monitor test results covers this step by step.
My my guide on obd2 mode 6 explained use for diagnosis covers this step by step.
Reading Mode $06 data requires a scanner that exposes it, and my roundup of the best budget OBD2 scanners notes which affordable tools include Mode $06 support and which do not.
This happens because Mode $06 test results can fail before the ECU applies enough confirmation logic to set a code. The catalytic converter efficiency reading might be below the pass threshold in Mode $06 while the ECU has not yet confirmed a P0420 fault because the monitor has not run twice consecutively under the required conditions. The oxygen sensor response time might exceed the allowable limit in Mode $06 while the ECU is still within the grace period before setting P0133 or P0153.
My my guide on test catalytic converter covers this step by step.
Reading Mode $06 data requires a scan tool that supports it, many entry-level readers do not expose this mode. The results are displayed as numerical test values next to their pass/fail thresholds. A failing result with no stored code is a strong early warning of a component approaching failure. The guide on OBD2 readiness monitors explains the relationship between monitor completion, Mode $06 self-test results, and when the ECU transitions from a failing test to a stored code.
Cause 5: A Blown Fuse Affecting ECU Communication

The OBD2 diagnostic port receives power from a dedicated fuse in the vehicle’s fuse box. If that fuse is blown, the scan tool cannot draw power from the port, cannot establish communication, and returns an error or shows no codes, not because there are no codes, but because the connection never formed. A blown OBD2 port fuse is a common cause of the scanner appearing to see nothing at all.
Separately, a blown fuse supplying the ECU, TCM, or another control module can cause that module to stop logging data while the MIL stays illuminated from a previously stored state or from another module still on the network. The light comes from the instrument cluster, which receives its illumination command from the network. A module that lost power cannot store new codes or update the network with current data, but the cluster light may remain on from a prior trigger.
My my guide on reset transmission adaptations covers this step by step.
Diagnosing a fuse issue requires the vehicle’s owner’s manual or fuse box diagram. The OBD2 port fuse is often labeled OBD, DLC, or CIGAR/ACC in the interior fuse panel. A visual inspection of the fuse plus a voltage test at the OBD2 port pin 16 (battery positive) and pin 4 or 5 (chassis ground) confirms whether the port is powered. If there is no voltage at pin 16 with the key on, the fuse is the starting point. Replacing it without identifying why it blew will result in the replacement blowing again. The guide on OBD2 port location covers the port pinout and what each pin is responsible for.
Cause 6: The OBD2 Port Has a Connection Problem
The 16-pin OBD2 diagnostic connector is a mechanical component. The contacts inside it can be contaminated with oil residue, debris, moisture, or corrosion, particularly on vehicles where the port is under the dash in an exposed location. A contaminated or damaged pin produces an intermittent or failed connection between the scan tool and the vehicle network. The scanner either fails to connect entirely or connects unreliably and returns partial or empty data.
Bent or damaged pins are another cause. The OBD2 port does not have a locking mechanism on most vehicles, and a scan tool inserted at an angle can bend the pins. Pin 2 carries the SAE J1850 bus signal. Pin 6 and pin 14 carry the CAN High and CAN Low signals. Pin 7 carries the ISO 9141 K-line. If any of these are damaged, the scanner cannot communicate with the corresponding modules, and those modules’ codes are inaccessible.
To inspect the port, use a flashlight and look directly into the connector cavity. Each pin should be straight, centered in its slot, and free of discoloration or buildup. Compressed air removes loose debris. Electronic contact cleaner removes residue from the contact surfaces. Do not use anything abrasive on the pins. If pins are bent, a pin straightening tool designed for OBD2 connectors is the correct fix. Replacing the entire port connector is a dealer or specialist job when pins are broken rather than bent.
Cause 7: The Light Stayed On After a Previous Repair Was Already Made

A check engine light that was not cleared after a repair produces the exact same symptom: the light is on, and the scan shows no codes. Once a repair resolves the underlying fault, the ECU stops seeing the failure condition. After a defined number of consecutive clean drive cycles (typically three, though it varies by manufacturer and fault type), the ECU clears the confirmed DTC automatically and turns the MIL off. If the vehicle has not completed those drive cycles since the repair, the DTC may already be gone from the confirmed buffer while the light remains on.
My guide on how many drive cycles before the check engine light turns off covers the exact self-clear count by fault type and why some vehicles go dark in one trip while others require a full week of normal driving.
The scan returns nothing because the code was cleared by the repair, not because nothing happened. The ECU erased the fault when it confirmed the condition was no longer present. The light is now operating on a delay, it will turn itself off once the drive cycle counter reaches the threshold. Some vehicles clear the light within one complete drive cycle after the repair. Others require three or more.
This scenario is easily confirmed: if the car was recently serviced, a component was replaced, or a previous owner cleared codes before selling the vehicle, the no-code situation is likely this cause. The guide on how to clear OBD2 codes covers the difference between manually clearing codes with a scanner, waiting for the ECU to self-clear, and what happens to the readiness monitor state in each case.
What to Do When Your Scanner Shows No Codes
Work through the causes in order of likelihood and cost. Start with the scan tool itself: confirm it can read pending codes (Mode $07) and not just confirmed DTCs. If the tool cannot access pending codes, try a different scanner. Most auto parts stores will perform a free scan with a full-system reader. Advance Auto Parts, AutoZone, and O’Reilly all offer this, and the store’s scanner will access pending codes that basic handheld readers miss.
If a better scanner still returns nothing, check the OBD2 port. Verify pin 16 has power with the key on. Inspect the pins visually. Look at the fuse box diagram and test the OBD2 port fuse. A no-power result at the port explains a no-code result from any scanner.
If the port is powered and a full-system scanner still shows nothing confirmed or pending, the fault is either intermittent and cleared, already repaired and waiting on drive cycles, or a very early-stage Mode $06 failure. In that case, complete a full OBD2 drive cycle deliberately: cold start, idle for 2-3 minutes, gentle acceleration to highway speed, sustained cruise at 55-60 mph for at least 5 minutes, varied deceleration, city driving with stop-and-go. Then scan again. Pending codes that formed during the cycle will appear. If the MIL turns off on its own during this process, the fault resolved. If a code confirms, the fault is now captured and diagnosable. The guide on how to use an OBD2 scanner covers the full scan procedure from port connection to reading both confirmed and pending results.
The Bottom Line

A check engine light with no codes is not evidence that nothing is wrong. It is a specific diagnostic situation with seven identifiable causes, each requiring a different response. The most common cause (an intermittent fault), means the problem is real and will likely return. The second most common (a scanner that cannot see the code), means the code exists and a better tool will find it.
The correct sequence is: confirm the scanner can read pending codes, verify the port is powered, use a full-system reader if available, complete a deliberate drive cycle, and then scan again. That sequence resolves the diagnosis in the large majority of no-code situations. The guide on car diagnostic costs covers what a shop charges to perform this same process with professional tools, and whether the investment in a mid-range scan tool pays off compared to paying per-visit diagnostic fees.
FAQs
Can the check engine light come on without any fault being present?
Yes, in rare cases. A failing instrument cluster, a wiring fault in the MIL circuit itself, or a BCM software glitch can illuminate the light without any stored or pending codes across all modules. This is uncommon compared to the other causes above and is typically confirmed only after all other causes have been ruled out with a full-system scanner. If a professional scan tool with full module access returns zero codes across all network modules and the port, wiring, and fuses test correctly, a cluster or BCM fault is the remaining explanation.
Should I keep driving when the check engine light is on but no codes appear?
Short trips to complete a drive cycle are reasonable if the vehicle feels and drives normally. The no-code state does not confirm the car is safe, it confirms the fault has not been captured yet. If the car is running rough, stalling, shifting poorly, or showing any unusual behavior alongside the light, do not drive it further until the fault is diagnosed. Normal driving feel alongside the light, with no codes, is most likely an intermittent or recently resolved fault that will confirm on the next occurrence.
Why does the auto parts store scanner sometimes find codes that my own scanner misses?
Auto parts store scanners are typically mid-range or professional tools that read both generic OBD2 codes and manufacturer-enhanced codes for common vehicle makes. A basic handheld reader reads only generic OBD2 codes. If the fault is stored as a manufacturer-specific code in the TCM, BCM, or another module rather than the ECU, the basic reader returns nothing while the store scanner finds it immediately. This is the most practical free solution when a basic tool shows no results.
What is Mode $06 and how do I read it?
Mode $06 is OBD2 mode 6, which stores the numerical results of the ECU’s non-continuous monitor self-tests. It shows the actual measured value of each tested component alongside the pass/fail threshold. A component whose actual value is worse than the threshold has failed the test even if no DTC has confirmed yet. To read Mode $06, the scan tool must explicitly support it, look for “Mode 6 Tests,” “OBD Tests,” or “Component Tests” in the menu. Not all entry-level tools expose this mode.
How many drive cycles does it take for a pending code to become a confirmed code?
Most OBD2 systems require two consecutive drive cycles during which the ECU detects the same fault before confirming a DTC and turning the MIL on. Some faults that risk immediate catalytic damage confirm after one cycle. Some rarely-triggered systems take three or more cycles. The exact count is manufacturer and fault-specific. Once the fault is gone (either resolved by a repair or no longer occurring), the ECU counts clean drive cycles in the opposite direction and eventually clears both the pending code and the MIL.
Can a scan tool show no codes immediately after disconnecting the battery?
Yes. Disconnecting the battery clears the ECU’s fault memory, including all confirmed and pending DTCs, and resets all readiness monitor flags to “not ready.” If the battery was disconnected recently (by the owner, a mechanic, or a previous owner before a sale), all codes from before that point are gone. The light may go off immediately after the battery is reconnected, or it may stay on briefly while the cluster runs its self-check sequence. If it turns off and stays off, the memory was cleared and the original fault may or may not return.

