Technical Description of OBD-II Trouble Code
VIN Not Programmed or Incompatible – TCM
What does that signify?
This is a generic diagnostic trouble code (DTC) that is applicable to many OBD-II vehicles (1996-newer). This includes vehicles from Dodge, Chrysler, Ford, Toyota, Hyundai, etc. Although it is a generic code, the specific repair steps may vary depending on the year, make, model, and powertrain configuration.
When a code P0631 is stored, it indicates that the transmission control module (TCM) does not recognize the 17-character vehicle identification number (VIN).
Every vehicle produced in North America is assigned a VIN. This alphanumeric code represents the country of manufacture, year, make, model, transmission type, engine size/type, and the production sequence of the vehicle. No two vehicles have the same VIN.
Since the implementation of OBD-II diagnostic systems, the VIN has been programmed into each ECM/PCM (after installation in the vehicle). Other controllers, including the TCM, may also be programmed to recognize the VIN, but federal regulations require the ECM/PCM to be programmed accordingly.
The main reason for programming the ECM/PCM to recognize the VIN is to deter vehicle and controller theft and prevent odometer tampering. Controllers cannot be swapped between vehicles without being programmed to match the specific vehicle. The ECM/PCM also stores the vehicle’s mileage. If controllers could be swapped, the accuracy of odometer readings would be compromised. When an ECM/PCM is replaced, it must be programmed with the vehicle’s odometer reading and VIN. The TCM is programmed to recognize the VIN for similar reasons.
If the TCM fails to find or recognize the VIN, a code P0631 will be stored and a malfunction indicator lamp (MIL) may illuminate. The TCM searches for the VIN during the self-test when the key is turned on. In most cases, the TCM will not function without VIN recognition.
Photo of a PCM with the cover removed:

What is the severity of this DTC?
Since the TCM’s ability to function properly is compromised without VIN recognition, a stored code P0631 should be considered severe.
What are some of the symptoms of the code?
Symptoms of a P0631 trouble code may include:
What are some of the common causes of the code?
Possible causes for this code may include:
What are some P0631 troubleshooting steps?
Unlike most other stored codes, the P0631 is usually related to TCM failure or some type of programming error. Due to the sensitive nature of the parameters that need to be programmed into the various controllers (VIN and mileage), reprogramming equipment should only be used by qualified personnel. Without the ability to reprogram the specific controller, successfully repairing the issue will be highly unlikely.
To arrive at a reasonable diagnosis of a code P0631, you will need a diagnostic scanner and a reliable source of vehicle information. Use the vehicle information source to search for relevant technical service bulletins (TSB). If you find a TSB that matches the vehicle make and model, exhibited symptoms, and the stored code, it will provide guidance in the right direction.
I would connect the diagnostic scanner to the vehicle’s diagnostic port and compare the VIN displayed on the scanner to the actual VIN located on the lower driver side of the windshield. If the etched VIN tag does not match the VIN displayed on the scanner, it is possible that the TCM has been swapped from another vehicle.
If the VIN is not displayed on the scanner, suspect that the TCM has been replaced without being programmed to match the vehicle. If this is not the case, TCM failure or a programming error may be the cause.
In some cases, aftermarket replacement TCMs that have been programmed to match the vehicle may be available for purchase. If this is an option, you will need to provide the parts vendor with the mileage and VIN of the vehicle, as well as any other relevant data.
Unfortunately, there is no foolproof method for testing the TCM. However, it is relatively safe to assume that unless there has been a controller replacement without proper programming, some type of controller failure has occurred.