When you click on links to various merchants on this site and make a purchase, this can result in this site earning a commission. Affiliate programs and affiliations include, but are not limited to, the eBay Partner Network.
This is all good stuff. I'm going to see in the near future if I can just hook up a protocol analyzer and take a look at what's coming over the bus and make sense of it. I imagine that although the CCM is the master, there must need to be some query/response mode for it as well. I cannot imagine it's just constantly streaming out the VIN, for example, but rather must get some request from a scanner. I guess it IS possible it's just constantly streaming commands to the EMC, however.
It is not streaming out the VIN. If there is a way to request the VIN from the CCM (check the datastream definition for your year CCM), it will either be a Mode 1 request (which is the "request datastream" function), or a Mode 3 request (where you request the exact spot in the CCM's ROM where the VIN is stored; assuming you know that information).
It is not streaming out the VIN. If there is a way to request the VIN from the CCM (check the datastream definition for your year CCM), it will either be a Mode 1 request (which is the "request datastream" function), or a Mode 3 request (where you request the exact spot in the CCM's ROM where the VIN is stored; assuming you know that information).
Thanks. I dug through the A111 datastream file and it's got details of everything in the Mode 1 request, but there's no mention of the VIN in there. It appears I need to read out from the ROM until I find something that matches up with a VIN-like pattern. I'll also have to look to find some documentation of the Mode 3 command since that's not in there. OR, I could be lazy and throw money at an eBay Tech1A and just snoop on the line while it reads it (the key barrier here being that once I have the Tech1A and can read it, my laziness might cross the threshold where I stop trying to figure out how to do it myself.
Thanks. I dug through the A111 datastream file and it's got details of everything in the Mode 1 request, but there's no mention of the VIN in there. It appears I need to read out from the ROM until I find something that matches up with a VIN-like pattern. I'll also have to look to find some documentation of the Mode 3 command since that's not in there. OR, I could be lazy and throw money at an eBay Tech1A and just snoop on the line while it reads it (the key barrier here being that once I have the Tech1A and can read it, my laziness might cross the threshold where I stop trying to figure out how to do it myself.
If your CCM is A111, then you are absolutely correct, you cannot get the VIN from a Mode 1 request. And if you intend to dump the entire contents of the ROM rather than pinpointing an exact spot, I recommend going with Mode 2 requests instead (64 bytes at once versus 6 for Mode 3).
If anyone's interested, here's a picture of the FSM page that shows the CCM/ECM connection and another showing the VATS CCM-ECM link. Also, fun fact: ECM apparently stands for "electronic control module" in GM-land.
I just had an idea - could I just use my Arduino to sniff the serial line? I've read serial data with it before, and I don't see how this would be any different.
I have a serial sniffer from a previous project and I just order an ALDL to serial adapter in hopes to understanding this stuff a little better. My goal is small initially, to get the rear defroster to work in a C68 equipped car without the stock ECU in the car. I know the CCM will only trigger the rear defroster relay if the engine is running. I just don't know if the CCM asks the ECU is it is running (RPM I assume) or if the ECU is always sending the data to the CCM so it already knows when the rear defrost button is pressed.
Finding a way to mimic more of the ECU functions would be a huge bonus for the community of stand alone ECU users.
Arduino Rx1 and DIO 4 pins are connected together to the ALDL data pin "E" on the ALDL connector
The Tx1 Arduino pin connects to the cathode of a 1n4001(or similar) diode with the anode connected to ALDL pin "E". This allows Tx to pull down pin "E" during transmission without interfering with the ECM serial output.
Arduino GND is connected to ECM Gnd at ALDL pin "A"
A 10K resisor between ALDL pins "A" and "E" puts the ECM into ALDL mode.
This code is for the early inteface with 160 baud also, and some code is related for that to sync switch over to 8192 baud.
It should be simple to change to 8192 baud only. Especially if you want to use it as a sniffer ans only read data.
I was just about to say—that layout and code is for cars that have a 160 baud connection, and require a special command sequence to ask the ECM to switch baud rates.
Native 8192 ALDL cars like the ones this thread is talking about are wildly different. First, there’s no need for the 10k resistor or that diode. Just connect RX and TX together and jack it into pin 9 (pin M on the 90-93 cars). Then make sure you’re sharing the serial data ground. Also, there is no startup command required to request a baud rate change.
I think I mentioned this before, but if you’re trying to build an Arduino ALDL interface, you’re better off writing your own using the GM datastream definition files on Gearhead-EFI than trying to use that old 160 baud code.
Last edited by Nomake Wan; Jan 18, 2021 at 12:31 AM.
Do you need an adapter? I was thinking you could just wire the Arduino to the two serial pins. Although a cable would admittedly be cleaner...
It will probably be easier for me to start with a development environment I’m familiar with and that’s on a PC. I used the serial sniffer previously to watch what the DFI 6 box was doing and wrote a basic Windows based application that would let me update the fuel and ignition tables instead of the DOS based Calmap software. I’m hoping the same technique and tools will be useful here.
The arduino stuff sounds very promising and would be a great platform to use as a permanent solution but it isn’t something I’ve worked with yet.
I took the quick way and ordered the ALDL to serial adapter. It looks like pin M needs to run through an RS232 chip for serial communication to a PC. Something about 5 volts
versus 12 volts.
The thread already has more info than I’ve found in years. This kind of exciting.
Wow, that's even simpler than I thought. Since what we want (MPG) isn't in the data stream definition, I think we're going to just have to watch the raw hex. If we ignore ABS/climate control communications, I don't think it should be too hard to single out the data we want. The trick will be figuring out what it means - I'm thinking recording serial data at idle for a reference of 0mpg and then at steady state cruise and noting the displayed mpg there.
I'm also not sure whether the ECM is transmitting MPG or just the info needed to calculate it. Since the instrument panel fuel consumption is a value in the bin, it makes sense to me that the ECM would be doing the calculation. If that's the case, we could just search the data stream for hex corresponding to the two MPG values.
Wow, that's even simpler than I thought. Since what we want (MPG) isn't in the data stream definition, I think we're going to just have to watch the raw hex. If we ignore ABS/climate control communications, I don't think it should be too hard to single out the data we want. The trick will be figuring out what it means - I'm thinking recording serial data at idle for a reference of 0mpg and then at steady state cruise and noting the displayed mpg there.
I'm also not sure whether the ECM is transmitting MPG or just the info needed to calculate it. Since the instrument panel fuel consumption is a value in the bin, it makes sense to me that the ECM would be doing the calculation. If that's the case, we could just search the data stream for hex corresponding to the two MPG values.
The MPG (and oil life) are both calculated by the CCM. We know this because the interface for controlling them goes directly to the CCM (the dash buttons to reset the oil life monitor, the fuel economy, etc). So it's entirely expected that these are not transmitted by any other computer.
Instrument panel fuel consumption isn't in the BIN; the calculated flow rate of the fuel system is, and this value is then used in the instrument panel calculations.
So both oil life and fuel mileage will not be found in the serial data on the ALDL bus. The CCM will be taking the necessary values and doing the math by itself (RPM, vehicle speed, oil temperature, fuel level, reported fuel system fuel flow rate, etc).
Last edited by Nomake Wan; Jan 18, 2021 at 12:20 AM.
I have been thinking about making the MPG in the dash work on mu 1984 too.
I got the old stock computer that has not been used for over 18 yeasrs or so, connected power pins and read serial data using WinALDL.
It is a 5-byte data stream. As in the newer, most of the calculations must be in the dash.
The plan is to add potentiometers to TPS and MAP and use an Arduino to great ignition reference pulses and speedometer pulses.
I have verified that TPS and MAP works by applying 5V and watching data in ALDL using 10k mode.
By manually pulsing the VSS pin to ground i got a few MPG.
By manually pulsing 12V thru a resistor to HEI Reference i got a few RPM.
In the MPG data stream the first 2 changed to 3 while manually creatign HEI pulses.
Please note, again, that the above information is wholly and utterly irrelevant with regards to CCM cars (1990-1996), which is what this thread is about. Pre-CCM cars do things much, much differently across the board and as such are probably not a good reference to use when trying to figure out how the CCM cars operate.
I would not be surprised if the same information is used from the ECM. But ok, I will not share my findings.
Feel free to make your own thread regarding your pre-CCM research! It'll help all the people with 1984-1989 cars. It just so happens that this thread is specific to 1990-1996 cars, which operate completely differently.
Regardin CCM to dash info, the CCM dont send the actual values (speed, mpg and so on) to the dash, it just sends information which segments to light up att any given time.
The MPG (and oil life) are both calculated by the CCM. We know this because the interface for controlling them goes directly to the CCM (the dash buttons to reset the oil life monitor, the fuel economy, etc). So it's entirely expected that these are not transmitted by any other computer.
Instrument panel fuel consumption isn't in the BIN; the calculated flow rate of the fuel system is, and this value is then used in the instrument panel calculations.
So both oil life and fuel mileage will not be found in the serial data on the ALDL bus. The CCM will be taking the necessary values and doing the math by itself (RPM, vehicle speed, oil temperature, fuel level, reported fuel system fuel flow rate, etc).
That makes sense, but I don't think it 100% proves the CCM does the calculations. I recall reading somewhere (wish I could remember the source) that instant and average MPG are calculated differently: instant is based on injector flow, while average is based on the fuel sender unit. If this were true, it would be plausible that the ECM calculated instant MPG (since it's already doing all the fueling calculations) while the CCM calculated the average (since there's no reason to have the fuel sender go to the ECM).
In my car, resetting the oil life monitor requires some arcane combination of pressing the gas pedal and cycling the ignition. I don't think the CCM has access to the TPS, so either the ECM itself calculates oil life or it sends a signal to the CCM to reset oil life. It's possible that we can't generalize all the CCM cars due to the different ECMs used.
Originally Posted by AliasJones
Regardin CCM to dash info, the CCM dont send the actual values (speed, mpg and so on) to the dash, it just sends information which segments to light up att any given time.
This thread is to understand communications between the ECM and CCM, not the CCM and dash.
That makes sense, but I don't think it 100% proves the CCM does the calculations. I recall reading somewhere (wish I could remember the source) that instant and average MPG are calculated differently: instant is based on injector flow, while average is based on the fuel sender unit. If this were true, it would be plausible that the ECM calculated instant MPG (since it's already doing all the fueling calculations) while the CCM calculated the average (since there's no reason to have the fuel sender go to the ECM).
In my car, resetting the oil life monitor requires some arcane combination of pressing the gas pedal and cycling the ignition. I don't think the CCM has access to the TPS, so either the ECM itself calculates oil life or it sends a signal to the CCM to reset oil life. It's possible that we can't generalize all the CCM cars due to the different ECMs used.
That's actually a good point; and it jives with the other user who said he could get "everything except instant MPG" working. In fact, going back to the datastream for the 90-91 L98 (A115.ds), you can find this entry:
49 IPFUEL RUNNING TOTAL OF FUEL DELIVERED (MSB)
50 IPFUEL + 1 RUNNING TOTAL OF FUEL DELIVERED (LSB)
uSEC = ([N49]*256 + [N50])*15.26
"IPFUEL" certainly seems to be "Instrument Panel Fuel" to me. However, we can't get too excited, here. The datastream definitions for the 92-93 LT1 and 94-95 LT1 do not include any such value.