The vehicle drives normally with P0315, so short-term driving is generally fine. The catch is that misfire detection is degraded until the CKP variation relearn is completed, so schedule the relearn promptly rather than ignoring the light. P0315 means the engine computer has no stored crankshaft position (CKP) variation-learn values in its memory, so the misfire monitor cannot run accurately. It is a calibration/procedure code, not a failed part: it sets after a PCM reflash, CKP sensor replacement, or engine work whenever the required scan-tool "CKP System Variation Learn" (crank relearn / CASE relearn) has not been completed or did not save.
What P0315 means
Every crankshaft and CKP sensor has tiny machining and mounting tolerances, so the gaps between the reluctor teeth are never perfectly even. The crankshaft position variation-learn feature measures those slight reference-period errors and stores a set of correction values in the engine control module (ECM). With those corrections in place, the ECM can tell a real combustion-event slowdown from normal tooth-spacing variation, which lets it detect misfire accurately across a much wider range of engine speed and load. Those variation-compensation values are only saved after the learn procedure has been run and the ignition has been switched OFF for at least about 30 seconds so the module can power down and commit them to memory. P0315 sets when the ECM finds no valid variation values stored, or when a proper power-down did not occur after the learn procedure so the values were never saved. It is a Type A DTC, meaning the check-engine light comes on the first time the fault is detected. Because the electrical circuits and the sensor itself can be perfectly healthy, this is a missing-calibration condition, not a broken component — the standard fix is to perform (and correctly save) the relearn, not to replace parts.
Symptoms
- Check-engine light on immediately after a PCM/ECM reflash, module replacement, CKP sensor replacement, or timing-related engine work
- P0315 stored on its own with no driveability complaint, since the engine still starts and runs normally
- A companion random-misfire code such as P0300 may set because the misfire monitor is running without valid variation corrections
- Occasional false or erratic misfire counts reported by a scan tool even when the engine feels smooth
- The MIL returns shortly after a scan-tool code clear if the relearn was never performed or never saved
Common causes
- The crankshaft position system variation learn was simply never performed after a repair that requires it (most common)
- The learn was started but not completed, or the ignition was not left OFF for at least ~30 seconds afterward, so the values never saved to ECM memory
- ECM/PCM reflash, reprogramming, or replacement that erased the previously stored variation values
- Crankshaft position sensor replacement, timing chain/sprocket service, or other work that changes the crank-to-sensor relationship and invalidates the old learn
- A weak or low battery, or a poor charging condition, that prevents the relearn from completing correctly (the procedure requires a fully charged, load-tested battery)
- A replaced or repaired ECM that cannot retain the learned values, requiring module replacement only after the relearn repeatedly fails
Severity & driving advice
Severity: Moderate — The engine runs normally, but until the relearn is done the misfire monitor is compromised and a genuine misfire could go undetected.
Can I drive? The vehicle drives normally with P0315, so short-term driving is generally fine. The catch is that misfire detection is degraded until the CKP variation relearn is completed, so schedule the relearn promptly rather than ignoring the light.
Diagnostic approach
- Confirm the code and read the history — Read P0315 with freeze-frame and note any companion codes such as P0300 (random misfire). Ask what work was done just before the light appeared: a PCM reflash, ECM swap, CKP sensor replacement, or timing work all wipe or invalidate the stored variation values and are the usual trigger. Recognize this is a missing-calibration code, not a wiring fault, so no circuit testing is needed first.
- Verify the battery and charging system — The variation-learn procedure requires a battery that has passed a load test and is fully charged, because the relearn will not complete reliably on a weak battery. Confirm state of charge and connections before attempting the learn, since a marginal battery is a common reason the procedure fails to save and P0315 keeps returning.
- Bring the engine to operating temperature — Start the engine and let it reach normal coolant temperature. The ECM will only run and store the variation learn once the engine is fully warmed up and idle conditions are stable, so a cold engine will not complete it. Address any active engine faults first — the relearn should be run on an otherwise healthy engine.
- Run the scan-tool Crankshaft Position System Variation Learn — With a capable scan tool, select the CKP System Variation Learn (crank relearn / CASE relearn) special function and follow its prompts. On GM 3.6L engines this typically commands a controlled wide-open-throttle acceleration followed by a closed-throttle deceleration so the ECM reads crank-speed variation during decel fuel cutoff (fuel injectors off while the engine coasts down from high rpm toward about 1000 rpm). The tool reports when the values are learned; hold the vehicle safely on a lift or a closed course during this step.
- Power down so the values save, then verify — After the tool reports the learn is complete, turn the ignition OFF and wait at least about 30 seconds so the ECM powers down fully and commits the variation values to memory — skipping this leaves them unsaved and re-sets P0315. Restart, operate within the running conditions, and confirm P0315 does not return and no P0300 sets.
- Replace the ECM only if the relearn will not save — If the battery is good, the engine is warm, and the learn has been performed correctly with a proper power-down but P0315 still sets, the ECM is not retaining the values. Per the factory verification path, replace the engine control module (with correct programming and setup) as the last step — only after the relearn itself has been ruled out.
FAQ
Do I need to replace any parts to fix P0315?
Usually no. P0315 is a missing-calibration code: it means the crankshaft variation-learn values are not stored, not that a sensor or wire is broken. The fix is to run the scan-tool Crankshaft Position System Variation Learn on a warm engine and then leave the ignition off for about 30 seconds so the values save. Only if the relearn repeatedly fails to save, with a good battery and warm engine, does the ECM itself need replacing.
Why did P0315 appear right after I replaced the crank sensor or reflashed the computer?
Because both of those actions invalidate or erase the stored variation values. Replacing the CKP sensor changes the exact crank-to-sensor tolerances the old values were based on, and reflashing or swapping the ECM wipes the learned data. The computer then finds no valid values in memory and sets P0315 until you perform the relearn. That is expected, and the code should clear once the learn is completed and saved.
Can I do the CKP variation relearn without a scan tool?
Not properly. The variation learn is a commanded special function that puts the ECM into learn mode and guides a controlled acceleration and decel-fuel-cutoff coast-down while it reads crank-speed variation. A generic code reader cannot trigger it. You need a scan tool that supports the Crankshaft Position System Variation Learn (crank/CASE relearn) function for your vehicle, or a shop that has one.
How is P0315 related to a P0300 misfire code?
They are linked through the misfire monitor. The stored variation values are what let the ECM distinguish a real misfire from normal uneven tooth spacing. If those values are missing (P0315) or the measured variation falls outside them, the misfire monitor can misread crank speed and set P0300 (random misfire). Completing the variation relearn restores accurate misfire detection and often clears an accompanying P0300.
Why does the ignition have to stay off for about 30 seconds after the relearn?
The ECM writes the learned variation values to its long-term memory during power-down, not while running. If you restart too quickly, the module never fully powers down and the values are lost, so P0315 comes right back even though the learn appeared to succeed. Turning the key off and waiting about 30 seconds gives the ECM time to store the data permanently.