Has anyone reverse-engineered ECM-CCM comms?
- Upload sketch to Arduino
- Unplug Arduino
- Run jumper wires from pins 2 and 3 to the proper pins on the ALDL port (think I've specified somewhere above which one goes to which)
- Connect the Arduino back to your computer's USB
- Run the Python script
- When finished, hit Ctrl + C to interrupt the script
- View your results in the generated file
I plan to polish this script up and make it plot the data real-time, but it will be awhile before I can get to that.
I've mostly parked this as I've been figuring out details for the standalone. Today I might see if I can finish the real-time plotting code and hook the Arduino back up. I just need to figure out a way to keep the leads stuffed into the ALDL port. That's honestly been the most frustrating part about this whole project.
Again, it seems odd that the ECM would be calculating this value if it's not used in MPG calculations, and the fact that the datastream calls it "IPFUEL" makes me think it would be used for the instrument panel fuel display. That said, I don't see anything like this in the usual serial datastream, so I guess it's a moot point.
While trying to think through what the $41 bytes each are, I remembered the ECM has a calibration value for VSS pulses per mile. It would make sense that it sends this to the CCM like it does the injector flow rate ($41 byte 11), but none of the bytes fit. Byte 13 is constant over my log, but its value is 1, whereas the VSS PPM is 0xE6 in the tune. Byte 4 is also constant, but its value is 0, which doesn't make sense either.
I previously noticed the similarity between $10 B5 (which is known to be speed) and $41 B12. It almost looks like $41 B12 is an unfiltered version of $10 B5. I don't see why the CCM would have a VSS input if it gets speed from the ECM, but there are three options here:
- The ECM sends the CCM the calibration value. This would make the most sense, but it does not seem to be the case. I guess it's possible the ECM sends this value just one time on startup or something, but that would not match its behavior with the injector scalar.
- The ECM sends the CCM the calculated vehicle speed. In this case, the CCM VSS input would be useless?
- The calibration value does nothing. I can test this by changing the calibration value and seeing how $41 B12 responds.
I've still got a lot of bytes to decode: 3-10, 12, and 13. I'm going to try to make a systematic testing plan to figure them out.
While trying to think through what the $41 bytes each are, I remembered the ECM has a calibration value for VSS pulses per mile. It would make sense that it sends this to the CCM like it does the injector flow rate ($41 byte 11), but none of the bytes fit. Byte 13 is constant over my log, but its value is 1, whereas the VSS PPM is 0xE6 in the tune. Byte 4 is also constant, but its value is 0, which doesn't make sense either.
I previously noticed the similarity between $10 B5 (which is known to be speed) and $41 B12. It almost looks like $41 B12 is an unfiltered version of $10 B5. I don't see why the CCM would have a VSS input if it gets speed from the ECM, but there are three options here:
- The ECM sends the CCM the calibration value. This would make the most sense, but it does not seem to be the case. I guess it's possible the ECM sends this value just one time on startup or something, but that would not match its behavior with the injector scalar.
- The ECM sends the CCM the calculated vehicle speed. In this case, the CCM VSS input would be useless?
- The calibration value does nothing. I can test this by changing the calibration value and seeing how $41 B12 responds.
I've still got a lot of bytes to decode: 3-10, 12, and 13. I'm going to try to make a systematic testing plan to figure them out.
I wonder why the $10 message has a filtered speed output, while $41 has unfiltered. I'm still not quite sure how/why the $10 and $41 messages are different. They both appear to be broadcast data from the ECM, so I don't see why they would need to be separate messages.
Last edited by C4ProjectCar; Mar 17, 2021 at 12:41 PM.
I wonder why the $10 message has a filtered speed output, while $41 has unfiltered. I'm still not quite sure how/why the $10 and $41 messages are different. They both appear to be broadcast data from the ECM, so I don't see why they would need to be separate messages.



