Enhanced PID's over CAN protocol?
#1
Launching!
Thread Starter
iTrader: (2)
Join Date: Jan 2003
Location: Downtown Chicago
Posts: 265
Likes: 0
Received 0 Likes
on
0 Posts
Enhanced PID's over CAN protocol?
At least for J1850 cars (which I understand is a completely different protocol than any flavor of CAN), you could get undocumented PID's from the car by sending a physically-addressed J2190 message. This link shows some of the ones that apparently work on LT1/LS1 cars.
I've been trying to do the same thing with my 2004 CTS. I can send and receive multi-packeted CAN messages (i.e. getting RPM, engine load, speed, etc. all in one packet). However, my car doesn't appear to support all of the PID's that I'd like it to. For example, the ECM doesn't seem to support any of the official J1979 throttle position PID's. I'd wager that the car does have some PID for this, but it's probably not an SAE-official one.
The question is, how do I get this info from the ECU? Is there any semi-documented list of "enhanced" PID's for CAN vehicles?
Edit:
Here's an example of a test that I tried to get ignition voltage (1141). I wasn't sure about endianness so I tried the bytes as both 11 41 an 41 11:
07 E0 03 22 11 41
07 E0 03 22 41 11
In either case, I get the following response from the car:
07 68 03 7F 22 11
I interpret that as a J1979 error message:
07 68 -- ECU address
03 -- Message length
7F -- J1979 Negative Response Service identifier
22 -- J1979 service identifier
11 -- Response code "serviceNotSupported".
Thoughts?
Thanks!
I've been trying to do the same thing with my 2004 CTS. I can send and receive multi-packeted CAN messages (i.e. getting RPM, engine load, speed, etc. all in one packet). However, my car doesn't appear to support all of the PID's that I'd like it to. For example, the ECM doesn't seem to support any of the official J1979 throttle position PID's. I'd wager that the car does have some PID for this, but it's probably not an SAE-official one.
The question is, how do I get this info from the ECU? Is there any semi-documented list of "enhanced" PID's for CAN vehicles?
Edit:
Here's an example of a test that I tried to get ignition voltage (1141). I wasn't sure about endianness so I tried the bytes as both 11 41 an 41 11:
07 E0 03 22 11 41
07 E0 03 22 41 11
In either case, I get the following response from the car:
07 68 03 7F 22 11
I interpret that as a J1979 error message:
07 68 -- ECU address
03 -- Message length
7F -- J1979 Negative Response Service identifier
22 -- J1979 service identifier
11 -- Response code "serviceNotSupported".
Thoughts?
Thanks!
Last edited by trax; 03-15-2010 at 01:22 PM.
#2
Launching!
Thread Starter
iTrader: (2)
Join Date: Jan 2003
Location: Downtown Chicago
Posts: 265
Likes: 0
Received 0 Likes
on
0 Posts
So I did more research and testing last night, and I've got more questions.
I ran across this post on MP3Car.com, which shows some of the data exchanged between a CAN scan tool and a GM vehicle.
In that example, the scan tool uses J2190 command 0x2C to define a custom PID (called a DPID) and then gets that data using a manufacturer-reserved command, 0xAA.
Now, when I try to break down the 0x2C command, I get this:
7E 00 Address
04 Packet length
2C "Define PID" command
FE User-defined PID (I think, according to J2190, that this can be any one-byte number)
00 11 Two-byte PID value
Now, according to the spec, there should be another byte between the "FE" and the "00". This should be a one-byte bitmask that tells the PCM/ECM/ECU about how to build this custom PID request. I'm guessing that it's missing because GM has bent the rules?
I did my own experiment with this:
Data sent:
0x07, 0xE0, 0x04, 0x2C, 0xFE, 0x00, 0x11
Response (seems to be good):
0x07 0x68 0x6C 0x7E
But when I tried to send a more standardized J2190 command, I got an error...
Data sent:
0x07, 0xE0, 0x05, 0x2C, 0xFE, 0x49, 0x11, 0x49
Response:
0x07 0x68 0x7F 0x2C 0x12
I think that last 0x12 corresponds to a "sub function not supported / invalid format" error.
Thoughts? What piece(s) am I missing here?
Thanks!
I ran across this post on MP3Car.com, which shows some of the data exchanged between a CAN scan tool and a GM vehicle.
In that example, the scan tool uses J2190 command 0x2C to define a custom PID (called a DPID) and then gets that data using a manufacturer-reserved command, 0xAA.
7e 00 04 2c fe 00 11
7e 0 03 aa 04 fe
7e 0 03 aa 04 fe
7E 00 Address
04 Packet length
2C "Define PID" command
FE User-defined PID (I think, according to J2190, that this can be any one-byte number)
00 11 Two-byte PID value
Now, according to the spec, there should be another byte between the "FE" and the "00". This should be a one-byte bitmask that tells the PCM/ECM/ECU about how to build this custom PID request. I'm guessing that it's missing because GM has bent the rules?
I did my own experiment with this:
Data sent:
0x07, 0xE0, 0x04, 0x2C, 0xFE, 0x00, 0x11
Response (seems to be good):
0x07 0x68 0x6C 0x7E
But when I tried to send a more standardized J2190 command, I got an error...
Data sent:
0x07, 0xE0, 0x05, 0x2C, 0xFE, 0x49, 0x11, 0x49
Response:
0x07 0x68 0x7F 0x2C 0x12
I think that last 0x12 corresponds to a "sub function not supported / invalid format" error.
Thoughts? What piece(s) am I missing here?
Thanks!