Algo de teoría
La comunicación con la ECU es establecida mediante la norma ISO 15765. Se define una línea CAN-BUS que enlaza los pines     6 (CAN High) y 14 (CAN
Low) del conector OBD con las diferentes sistemas inteligentes del automóvil.
Es necesario realizar peticiones con el ID 7DFh a los sistemas del vehículo para conocer los valores de sensores o parámetros del motor. También se
pueden obtener los códigos DTC (códigos de avería) así como su borrado.
Como norma general se establecen los siguientes modos (MODE) para obtener la información del vehículo:
01h. Show current data
02h. Show freeze frame data
03h. Show stored Diagnostic Trouble Codes
04h. Clear Diagnostic Trouble Codes and stored values
05h. Test results, oxygen sensor monitoring (non CAN only)
06h. Test results, other component/system monitoring (Test results, oxygen sensor monitoring for CAN only)
07h. Show pending Diagnostic Trouble Codes (detected during current or last driving cycle)
08h. Control operation of on-board component/system
09h. Request vehicle information
0Ah. Permanent DTC's (Cleared DTC's)
Para solicitar la información en alguno de los modos antes mostrados, hay que añadir un nuevo parámetro llamado PID que tiene que ser soportado
por la ECU del vehículo.
Como ejemplo, se muestran algunos de los más habituales (todos los vehículos no tienen porque soportar los PIDs mostrados):
Mode
PID
Description         
    Min value
    Max value
Units
Formula
..............................
..............................
01h  
0Ah 
Fuel pressure    
0   
765  
kPa (gauge) 
A*3
01h  
0Bh  
Intake manifold absolute pressure 
0   
255  
kPa (absolute) 
A
01h  
0Ch  
Engine RPM     
0   
16,383.75 
rpm   
((A*256)+B)/4
01h  
0Dh  
Vehicle speed    
0   
255  
km/h   
A
01h  
0Eh  
Timing advance    
-64   
63.5 
°rel #1 cylinder 
A/2 - 64
01h  
0Fh  
Intake air temperature   
-40   
215 
°C   
A-40
01h  
10h   
MAF air flow rate    
0   
655.35 
grams/sec  
((A*256)+B) / 100
01h
11h 
Throttle position
0
100
%
A*100/255
..............................
..............................
Petición de información
Byte 0
  Número de datos adicionales, 2 (bytes).
Byte 1
  Mode.
ej. 01h = show current data;
ej. 02h = freeze frame;
etc.
Byte 2
  Código PID. 
ej. 05h = Engine coolant temperature;
Byte 3, 4, 5, 6 y 7
 No usado.
Respuesta del vehículo
Byte 0
  Número de datos adicionales, de 3 a 6 (bytes).
Byte 1
  Mode. Mismo valor que en la petición añadiendo 40h.
ej. 41h = show current data;
Byte 2
  Código PID.
ej. 05h = Engine coolant temperature;
Byte 3
  Valor específico del código PID.
Byte 4, 5, 6
  Valores opcionales.
Byte 7
  No usado.
Ejemplo: Petición PID 05h (temperatura motor).
byte
    0
   1
   2
   3
  4      5      6     7
    8
7DFh  02h   01h    05h    ---    ---    ---    ---   ---   ---
- 7DFh: Petición de datos.
-    02h: Los datos que se acompañan. En este caso dos (01h y 05h).
-    01h: Mode. Consultar tabla según standard PIDs (mostrar datos actuales).
-    05h: PID. Consultar tabla según standar PIDs (temperatura motor).
Como respuesta el vehículos nos mostrara la siguiente información:
byte
    0
   1
   2
   3
  4      5      6     7
    8
7E8h  03h   41h    05h     50h  ---    ---    ---   ---   ---
- 7E8h: Respuesta de datos.
-    03h: Los datos que se acompañan. En este caso tres (41h, 05h y 60h).
-    41h: Mode. Respuesta a la consulta de Mode + 40h (01h + 40h). 
-    05h: PID consultado (temperatura motor).
-    50h: Valor del PID consultado. Para nuestro caso y aplicando la fórmula según norma establece que el valor real de la
         temperatura será de “A- 40”;  es decir 20º (50h --> 80d - 40 = 40ºC)
Nota:
Parte de esta información ha sido recogida de Wikipedia, donde se puede obtener un buen resumen de los PID así como su interpretación.
Bricos Peugeot 308