Looking for GM Can broadcast message information
Trying to get a digital dash and PMU to do some stuff off the GM canbus broadcast messages.
I have managed to get decoded partially the following ID's:
0c9 -- RPM and throttle pedal % (missing other fields)
4c1 -- ECT and IAT (missing other fields)
4d1 -- Oil Pressure (missing other fields)
3e9 -- Vehicle speed
I am still looking for:
In particular: Ambient air temp, baro pressure, manifold pressure.
I am also looking for any info on the broadcast messages above to fill in the missing values, but also the below which I see in the data streams:
0f9 (80Hz)
1c3 (40Hz)
1ed (80Hz)
1ef (80Hz)
1f5 (40Hz)
2c3 (20Hz)
3c1 (10Hz)
3d1 (10Hz)
3f9 (4Hz)
3fb (4Hz)
4c9 (2Hz)
4f1 (1Hz)
772 (1Hz)
Any info to help fill in the details would be appreciated. Willing to share what I have as well.
Trying to get a digital dash and PMU to do some stuff off the GM canbus broadcast messages.
I have managed to get decoded partially the following ID's:
0c9 -- RPM and throttle pedal % (missing other fields)
4c1 -- ECT and IAT (missing other fields)
4d1 -- Oil Pressure (missing other fields)
3e9 -- Vehicle speed
I am still looking for:
In particular: Ambient air temp, baro pressure, manifold pressure.
I am also looking for any info on the broadcast messages above to fill in the missing values, but also the below which I see in the data streams:
0f9 (80Hz)
1c3 (40Hz)
1ed (80Hz)
1ef (80Hz)
1f5 (40Hz)
2c3 (20Hz)
3c1 (10Hz)
3d1 (10Hz)
3f9 (4Hz)
3fb (4Hz)
4c9 (2Hz)
4f1 (1Hz)
772 (1Hz)
Any info to help fill in the details would be appreciated. Willing to share what I have as well.
I'm also looking for the same values so I confirm if my intake mods are actually have a net positive effect before I spend the money on a tune.
Pretty disheartened in the lack of info out there, I thought surely someone out there would have decoded all the values by now, or at least confirmed some.
From the net I've found the following all unconfirmed:
0C9 Byte 5 Accelerator 0 (0%) to 254 (100%) Bytes 2,3 RPM
0F1 Byte 2 Brake 0 (0%) to Unknown (254?) Typical pressure on brake pedal generates about 30.
135 Byte 1 Drive Position 0=Park, 1=Neutral, 2=Drive/L, 3=Reverse
1A1 Byte 8 Accelerator 0 (0%) to 254 (100%)
1C3 Byte 8 Accelerator 0 (0%) to 254 (100%)
1EF Bytes 3-4 Gas Engine RPM RPM
1F5 Byte 4 Shift Position PRNDL 1=Park, 2=Reverse, 3=Neutral, 4=Drive, 9=Low & M1, 8=M2, 7=M3, 6-M4, 5=M5, 4=M6, Byte 6 is Tow/Haul Status 4=ON, 0=OFF. This set changes when in Manual Mode to 2 & 6.
32A Bytes 1-4 GPS Latitude Milliarcseconds Bytes 5-8 GPS Longitude Milliarcseconds
3D1 Byte 8 Accelerator 00= (0%) to FF = (100%) [A*100/255]
3E9 Bytes 5-6 Speed 1/100 MPH 55MPH would be 5500 (0x157c) (taken from an American site so might not be 100% accurate for other countries)
4C1 Byte 2 Engine Temp in C. [A -40]
Using an Arduino and a MCP2515 chip, I've made a program to log the values from the OBD port and then it processes all the recorded values and graphs them. Some interesting values that looked like temperatures are (All temperature values appear to have the A-40 formula):
3F9 Byte 2
4C1 Byte 3,4
4C9,4D1 Byte 2
4E9 Byte 5
12A Byte 4
1F1 Byte 7
Also for MAF, the following look promising:
1A1,1C3 Byte 7
1C4 Byte 6
1ED Byte 3,5
1EF Byte 3
I'm getting a GM VCX Nano soon, I'll be able to hopefully determine what some things are as I'll have the exact values to calculate what they should be in HEX.
Have you got any further with your testing?
Scratch that, I can't reply to PM's either. Damn...
Any chance you could link the doc here?
ID 4D1, Byte 2, Engine Oil Temp (Formula A-40)
ID 4C1, Byte 2, Coolant Temp (Formula A-40)
ID 4C1, Byte 3, Intake Temp (Formula A-40)
ID 4C1, Byte 4, Outside Temp (Formula A/2-40)
ID C9, Byte 2,3, Rpm (Formula (A*256+B)/4)
ID C9, Byte 4, Accelerator % (Formula A/2.55)
ID 3E9, Byte 0,1, Speed (Formula (A*256+B)/100)
ID 120, Byte 2,3, Trip (Formula (A*256+B)/64)
ID 1EF, Byte 2,3, MAF g/s (Formula (A*256+B)/100)
ID 135, Byte 0, Transmission gear (A)
ID 514, VIN Part 1
ID 4E1, VIN Part 2 (In ASCII)
There are a few others broadcasted but I haven't deciphered them yet. There doesn't appear to be MAP in case anyone is wondering.
What I found that it's possible to send multiple OBDII PIDs at the same time by sending the following CAN Bus Message:
ID 7DF
Bytes 8 (always 8)
ODBII Message: Number of bytes, 0x01, PIDs, pad out remainder of the 8 bytes 0x00
So if you wanted PIDs 0x04, 0x05, and 0x0A all at once the CAN message would look like:
7DF 8 {04, 01, 04, 05, 0A, 00, 00, 00} OR
7DF 8 040104050A000000
Response will be on the ID 7E8 and have the format:
ID 7E8
Bytes 8
ODBII Message: Number Bytes, 0x41, PID, value, pid value, pid value, etc
Some cars will split up the response if you go over the 8 bytes into multiple lines however my car doesn't appear to do that.
For anyone using the MCP2521 Arduino shield accessing the high speed CAN, set the baud to 500k and the frequency must be set correctly (try 8MHz for Chinese clones). I used the mcp_can library. Make sure you set the library to send a one shot only CAN0.enOneShotTX(); otherwise it'll continue to send messages as fast as it can. I couldn't send and receive on the same Arduino so I used two nanos with two MCP2521 sheilds and sent on one, and received on the other. Wiring for the nano is:
VCC - 5V
GND - GND
CS - D10
SO - D12
SI - D11
SCK - D13
INT - D2
CAN H - OBDII 6
CAN L - OBDII 14
For anyone using the MCP2521 Arduino shield and trying to access the low speed CAN Bus (Pin 1, 33.3kbps), connect it exactly the same as the high speed CAN but connect the CAN Low to signal ground, then use the GMLan Bible to find the codes or just work it out yourself. It's critical you set the MCP2521 frequency correctly and the CAN bus speed correctly.
I didn't work out the extended PIDs. You send them on the regular ID 7DF, followed by the bytes, 0x22, then the PID/service code.
So your message should look like:
7DF 8 Bytes 22 Extended PID OR
7DF 8 0422194000000000
Hopefully this info helps someone.
I'm putting together a multipurpose board that simplifies designs related to CANBUS, Bluetooth, various other inputs, PWM drivers, A/D and Relay drivers. Instead of the usual rats nest of breadboard wires, just plug the modules in that apply to your design and cut the wires you don't need. With that combination of optional functions, there are lots of possibilities.
I've already used this platform to design a gas utilization device, getting Holley CAN data to let users know how much gas they've consumed or have left in fuel cells for various race vehicles.
Once you have something "programable" on the canbus it becomes really powerful to add functionality.
Trending Topics
The Best V8 Stories One Small Block at Time
I've managed to decipher the extended PIDs and they are working great. You have to know which module to send the request to otherwise it won't respond. 7E0 is the main ECU, 7E2 is the transmission etc. You can get the computers to "stream" the data (send via 5E8 for 7E0 main ECU requests) however I haven't had the time to get the code working. Link to the Github here https://github.com/alm4096/Holden-OBD2-Extended-PIDs
I also have a working scanner I bought I can use to work out additional extended PIDs (does everything from engine/transmission PIDs to controlling windows and lights). Unfortunately my main laptop died so I'm waiting for it to be fixed before I can grab any more PIDs to add to the list.
I'd be keen to hear what others have got working so far. Together I think we can work out most of these OBDII messages.
Last edited by alm865; Apr 13, 2024 at 12:07 AM.
pjs
ID 0x34A first two bytes at wheel speed left rear, next two are wheel speed right rear. The Australian version you divide the 16 bits by 32 to get km/hr
ID 0x348 is the same but for the front wheels
ID 0xC9 second byte and the third byte divided by 4 is the engine rpm.
Not sure what car you are looking to talk to but yours may be different.
There's a heap more, I've made a little esp32 display that works well. I've been meaning to upload it all to github but I haven't got around to it. I'll see if I get time over the next few days. It'll basically have all that you want in the code (all the pids i know of are in there).
i am working on Gauge Cluster Projects as well for different applications and i wanted to thank you for all the Info you already have put together here.
Are those signals all the same through all the range and age of thecontrollers (E38/E67 - E92 - E99)?
Thanks
Flo
Last edited by jack frank; Feb 19, 2026 at 01:47 PM.







