- Note this is all based on self learning and hundreds of hours of analyzing data. I apologize if I got any of it wrong.
Well there is for the VAG group diagnostics but I don’t think there is for regular OBD protocol.
Its a bit complicated how the original diagnostics work vs ISO OBD diagnostics.
When using VAG diagnostics a full list of possible modules is sent after the appropriate request. This includes all module installed and modules the gateway should be able to talk to if installed. In the response the modules are indicated as either present or not. It also assigns a value to the module that the diagnostics must use to initiate communications.
That value it assigns is ONLY used to start communication, as part of the connection protocol that value is reassigned again to a generic value. You can request to use a certain value but the gateway ultimately will assign a value for the tester to respond to. That generic value is what will be used during that session until the disconnect module message is sent. Then that generic value will get reused on another module. Note you can connect to multiple modules at one time so there are multiple generic values. Reconnecting to the same module is not a guarantee on the same generic value being assigned.
All messages between the gateway and the tester must also follow a specific number sequence for ever message that is sent. Failure to send the proper starting Byte will make the gateway simply ignore the message.
For diagnostics it’s much easier to stick to the OBD ISO standard but you can do much more with the VAG diagnostics since you can access/flash/control outputs and so forth with it.
Some basics to get to the gateway. First thing you need to do is send a connection request and receive the ID that all messages are going to sent by.
0x200 (1F C0 00 10 00 03 01) Tester requests communication and ID from gateway.
0x21F (00 D0 00 03 BF 04 01) Gateway Responds. Tester ID is now 0x4BF and gateway will be 0x300
A request for the module coding from The gateway:
0x4BF (14 00 03 22 06 00) Request Module Coding
0x300 (29 00 06 62 06 00 00 C3) Responce: 00C303
0x300 (1A 03)
Requesting installation list from Gateway:
0x4BF (16 00 03 22 04 A1) Request Installation List
Just some lines so I can show.
- First Byte is always line number
0x300 (2E 00 E7 62 04 A1 19 1F) First byte line number the next 5 are the positive response to the request.
0x300 (2F 05 0D 05 31 01 01 09)
0x300 (20 20 01 01 46 21 01 01) Skipped a line for clarity. Byte 03 is start of module identification which always is 01, 46 is the number for the BCM Module 46. 21 is the assigned diagnostic value for 46. Byte 7 (01) shows the module is present. A value of (00) means the module is not installed…
0x300 (21 42 22 01 01 52 23 01)
0x300 (22 01 62 24 01 01 72 25)
0x300 (23 01 01 36 26 01 01 06) Module 06 assigned value 35. NOT INSTALLED.
0x300 (24 35 00 01 69 43 00 01)
Ok so now we know some numbers…
The tester closed communication with the gateway since it got all the IDS and wants to start talking to a module. We will use module 46 from above. We know its new value is 21
Request:
0x200 (21 C0 00 10 00 03 01)
Byte 0 module to connect to (module 46(BCM) aka 21). The the request to connect Bytes 1.
Byte 1 is the request to connect
Byte 2-3 I think is the requested ID for the tester. Always seems to be the same numbers.
Byte 4-5 is the ID the tester wants to use for the BCM in reverse 00 03. 0300… 0x300…
Byte 6 is end of request.
Response:
0x221 (00 D0 00 03 C1 04 01)
Byte 0 is blank as the tester doesn’t have any ID (assuming)
Byte 1 is positive response to connect
Byte 2-3 appears to be the modules ID backwards
Byte 4-5 is the assigned ID to the tester
Byte 6 end of request.
so if your watching the can bus all your module 46 messages are going to start with 4C1 now. All your tester messages have to be sent using ID 300 or they will be ignored.
Anyway… That’s enough for now… Good Luck.
Sorry. Should note that isn’t all the connection coding it’s the main coding though. You still have to agree with the module on the keep alive signal which is similar in communication as the module connect.
0x4D1 (A0 0F 8A FF 32 FF) Suggest Keep alive Response
0x300 (A1 0F 8A FF 4A FF) Set Keep Alive Response|
0x4D1 (A3) Send Tester Connected Message (to Keep alive)
0x300 (A1 0F 8A FF 4A FF) Keep alive response
- Keep alive messages do not count against line counts for other requests and messages.
Ending Communication. Not to worry if you are talking to more than one module at a time. Your Tester ID is different for every module so only the module listening to the specific ID that is sending it will close.
0x4D1 (11 00 01 82) Request to close Communications
0x300 (11 00 01 C2) Positive Responce
0x4D1 (A8) - Not sure why but tester gets last goodbye by sending this byte.