Re: GM 16216588 - Hacking
Posted: Tue May 03, 2016 4:48 am
To sum up where we are at with this:
I got a clean read off a 97 PCM flash chip (desoldered the flash) and we threw together the following proof of concept:
Looking at a full 128k bin (after addressing is corrected):
$2000-$2003 = Calibration ID
$2004-$2005 = CheckSum Store Address
$2007-$200A = Broadcast Code (ASCII x 4 Characters)
$2006-$FFFF = Bank 1 of Calibration
$18000-$1FFFF = Bank 2 of Calibration
So when you combine the hex ranges for "Bank 1 of calibration" and "Bank 2 of calibration", you can sum the full calibration to know show the theory in action:
*I obfuscated the broadcast ID because I was tinkering with changing that to see the checksum change to/fro If some readers are wondering what this means...The "calibration" is the data you are most interested in changing. And the PCM is going to run the same logic as above to sum the hex addresses of calibration to ensure the checksum matches before it'll run the code that lets the vehicle operate. So we now know what blocks of memory need to be read/flashed and we know how to properly calculate the checksum for a successful flash. We are the first group of fools to accomplish this outside of commercially available software (for this PCM) and everything you need to get rolling is no longer a "secret".
The interface cable you need to begin working with this PCM is an AVT-852 REV "E" at a minimum. You need this J1850 4x connection to flash at a reasonable speed. REV "T" adds some I/O channels you could use to track fuel pressure, EGT, etc. if you wanted to include those digital channels in your data logging (which are not available from the PCM because it doesn't track them). You'll appreciate this info if you visit the AVT website and see how confusing it can get for a newb.
What's next:
-Figure out the J1850 communications via AVT interface to read/write these memory blocks
-Figure out how to start building this out in TunerPro. I'm not sure if it can handle doing the checksum of banked code.
-Continue dis-assembly to figure out what's what
I got a clean read off a 97 PCM flash chip (desoldered the flash) and we threw together the following proof of concept:
Looking at a full 128k bin (after addressing is corrected):
$2000-$2003 = Calibration ID
$2004-$2005 = CheckSum Store Address
$2007-$200A = Broadcast Code (ASCII x 4 Characters)
$2006-$FFFF = Bank 1 of Calibration
$18000-$1FFFF = Bank 2 of Calibration
So when you combine the hex ranges for "Bank 1 of calibration" and "Bank 2 of calibration", you can sum the full calibration to know show the theory in action:
*I obfuscated the broadcast ID because I was tinkering with changing that to see the checksum change to/fro If some readers are wondering what this means...The "calibration" is the data you are most interested in changing. And the PCM is going to run the same logic as above to sum the hex addresses of calibration to ensure the checksum matches before it'll run the code that lets the vehicle operate. So we now know what blocks of memory need to be read/flashed and we know how to properly calculate the checksum for a successful flash. We are the first group of fools to accomplish this outside of commercially available software (for this PCM) and everything you need to get rolling is no longer a "secret".
The interface cable you need to begin working with this PCM is an AVT-852 REV "E" at a minimum. You need this J1850 4x connection to flash at a reasonable speed. REV "T" adds some I/O channels you could use to track fuel pressure, EGT, etc. if you wanted to include those digital channels in your data logging (which are not available from the PCM because it doesn't track them). You'll appreciate this info if you visit the AVT website and see how confusing it can get for a newb.
What's next:
-Figure out the J1850 communications via AVT interface to read/write these memory blocks
-Figure out how to start building this out in TunerPro. I'm not sure if it can handle doing the checksum of banked code.
-Continue dis-assembly to figure out what's what