/i-miev-obd2

Mitsubishi I-Miev OBD-II PID documentation

       ___  __        __     __                          ___
|\/| |  |  /__` |  | |__) | /__` |__| |    | __  |\/| | |__  \  /
|  | |  |  .__/ \__/ |__) | .__/ |  | |    |     |  | | |___  \/
                __                __        __
               /  `  /\  |\ |    |__) |  | /__`
               \__, /~~\ | \|    |__) \__/ .__/

This project aims to document the OBD-II codes for Mitsubishi I-Miev electric vehicle.

Conventions used in this document:

  • Message ID is always 3 hex characters
  • Data bytes are zero-indexed: D0, D1, etc

OBD-II Traffic analysis

Periodically occurring PIDs:

PID descriptions


012

  • Key status (early iMiEV)

Transmitted every 100ms. Data bits:

  • D2: 0x04 Key is turned on

101

  • Key status (later iMiEV)

Transmitted every 100ms. Data bits:

  • D0: 0x04 Key is turned on

149

  • Rotation ESC

Transmitted every 20ms. Data bits:

  • D4-D5: Rotation ESC: (D5 * 256 + D4 - 32934) / 32.934 (OBDZero)

200

  • Wheel rotation

Transmitted every 20ms. Data bits:

  • D2-D3: Wheel rotation: (D2 * 256 + D3 - 49152) / 19 (OBDZero)
  • D3-D4: Wheel rotation: (D4 * 256 + D5 - 49152) / 19 (OBDZero)

208

  • Brake pedal / Wheel rotation

Break pedal sensor data is transmitted every 20ms. Data bits seem to be following:

  • D2-D3: Brake pedal position (D2 * 256 + d3 - 24576) / 6.4
  • D4-D5: Wheel rotation: (D4 * 256 + D5 - 49152) / 19 (OBDZero)
  • D6-D7: Wheel rotation: (D6 * 256 + D7 - 49152) / 19 (OBDZero)

210

  • Gas pedal

Gas pedal sensor data is transmitted every 20ms. Data bits seem to be following:

  • D2: gas pedal position (%) D2 * 0.4

215

  • Vehicle speed

Transmitted every 20ms. Data bits:

  • D0-D1: vehicle speed: (D0 * 256 + D1) / 128

231

  • Brake pedal switch sensor

Transmitted every 20ms. Data bits:

  • D4: 0x02 if brake is free, 0x00 if brake pedal is pressed

236

  • Steering wheel sensor

Transmitted every 10ms. Data bits:

  • D0-D1: Steering wheel position with 0.5 degree accuracy, center point (0.0 degrees) = D0:0x10, D1:0x00. (((D0 * 256) + D1) - 4096) / 2 = steering wheel position in degrees). Negative angle - right, positive angle left.
  • D2-D3: possibly represents rate of change, defaults to D2:0x10, D3:0x00 when steering wheel is at rest.

285


Transmitted every 10ms. Data bits:

  • D0-D1: Acceleration (D0 * 256 + D1 - 2000) / 400

286


Transmitted every 100ms. Data bits:

298


Transmitted every 100ms. Data bits:

  • D0-D3: Motor temp D* - 40
  • D6-D7: Motor RPM D6 * 256 + D7 - 10000

29A

  • Vehicle identification number

Transmitted every 100ms. Data bits:

346

  • Estimated range, handbrake

Transmitted every 20ms. Data bits:

  • D4 handbrake D4 bit 32 released
  • D7 Estimated range: D7

373

  • Battery

Transmitted every 10ms. Data bits:

  • D0: Battery Cell Maximum Voltage (V): (D0 + 210) / 10 (OBDZero)
  • D1: Battery Cell Minimum Voltage (V): (D1 + 210) / 10 (OBDZero)
  • D2-D3: Battery pack amps (A) (D2 * 256 + D3 - 32768)/100
  • D4-D5: Battery pack voltage (V) (D4 * 256 + D5) / 10

374

  • Battery SOC

Transmitted every 100ms. Data bits:

  • D0: State of charge (%): (D0 - 10) / 2 (OBDZero)
  • D1: State of charge (%): (D1 - 10) / 2
  • D4: Cell Maximum temperature (oC): D4 - 50 (OBDZero)
  • D5: Cell Minimum temperature (oC): D5 - 50 (OBDZero)
  • D6: Battery 100% capacity (Ah): D6 / 2 (OBDZero)

377


Transmitted every 100ms. Data bits:

  • D0-D1: 12V battery voltage in mV: D0 + D1
  • D2 + D3 12V battery charging current in A: (D2 + D3) / 10
  • D4-D6 = temperatures of OBC: D* - 40
  • D7 = status bytes
Bits D0
0: Error
1: In Operation
2:
3:
4:
5: Ready
6:
7:

384

  • Heating / Cooling

Transmitted every 100ms. Data bits:

  • D0: AC (A): (D0 * 256 + D1) / 1000
  • D3: Charging 12V Battery (A): D3 / 100 (OBDZero)
  • D4: Heating (A): D4 / 10
  • D5: Heating water temp return: (D5 - 32) / 1.8) - 3 OR D5 * 0.6 - 40
  • D6: Heating water temp flow: (D6 - 32) / 1.8) - 3 OR D6 * 0.6 - 40

389

  • Charger

Transmitted every 100ms. Data bits:

  • D0: Charge DC Voltage (V): 2 * D0 +1 (OBDZero)
  • D1: Charger Input voltage (V): D1
  • D2: Charge DC Input Current(A): D2 / 10 (OBDZero)
  • D3: Charger temp: D3 - 40 (D3 - 50 (OBDZero))
  • D4: Charger temp: D4 - 50 (OBDZero)
  • D6: Charging Input current (A): D6 / 10

3A4

  • Climate console

Transmitted every 100ms. Data bits:

  • D0: Heating level:
    • D0 bit 15 = 7 Middle
    • D0 bit 15 < 7 Cooling
    • D0 bit 15 > 7 Heating
  • D0: Recirculation: D0 bit 64
  • D0: AC On: D0 bit 128
  • D0: Fan spee MAX: D0 bit 32
  • D1: Fan speed (%): ((D1 bit 15) * 12.5) + 0.5
  • D1: Ventillation direction:
    • D1 >> 4 3
      • 1/2: Face
      • 3/4: Legs + Face
      • 5/6: Legs
      • 7/8: Legs + Windshield
      • 9: Windshield

412

  • Speed + Odometer value

Transmitted every 100ms. Data bits:

  • D0: Key On D0 = 254
  • D1: Speed
  • D2-D4: Odometer ((((D2 >> 16) + D3) >> 8) + D4) 3

418

  • Gearshift

Transmitted every 20ms. Data bits:

  • D1:
    • 80 : P
    • 82 : R
    • 78 : N
    • 68 : D
    • 131: B
    • 50 : C

424

  • Light

Transmitted every 40ms. Data bits:

Bits D0 D1 D2 D6
0: hazard lights Unlock doors
1: Right Blinker Unlock driver door
2: Automatic light Upper Beam
3: Fog lights Wiper rear Rear window heating
4: Rear fog light Night headlights
5: Sidelights
6:
7:

696

  • Motor

Transmitted every 100ms. Data bits:

  • D2-D3: Motor current (A): (D2 * 256 + D3 - 500) / 20 (OBDZero)
  • D6-D7: Regeneration amps (A): (D6 * 256 + D7 -10000) /5 (OBDZero)

697

  • CHAdeMO

Transmitted every 100ms. Data bits:

  • D0: Connected
  • D1: Percent (%) (OBDZero)
  • D2: Charger current (A)

6E1 6E2 6E3 6E4

  • Battery pack cells

Transmitted every 40ms. Data bits:

MessageID: 6E1 / 6E2 / 6E3 / 6E4

PID_ID: MessageID - 1761

  • D0: CMU index (CMU_ID): D0 bit 15
  • D1: Temperature 1 (T1): D[1] - 50
  • D2: Temperature 2 (T2): D[2] - 50
  • D3: Temperature 3 (T3): D[3] - 50
  • D4-D5: Cell voltage 1 (V1): ((D4 * 256 + D5) / 200) + 2.1
  • D6-D7: Cell voltage 2 (V2): ((D6 * 256 + D7) / 200) + 2.1

Voltage index (VOLT_ID): (CMU_ID - 1) * 8 + (2 * PID_ID) Temperature index (TEMP_ID): (CMU_ID - 1) * 6 + (2 * PID_ID)

Voltage and temperature index modify based on CMU_id (because cmu 6 has only 4 cell) If CMU_ID >= 7

  • voltage index: VOLT_ID - 4

  • temperature index: TEMP_ID - 3

  • VOLT_ID = V1

  • VOLT_ID + 1 = V2

Temperature index fix based on PID_ID

If PID_ID == 0 {

  • TEMP_ID = T2
  • TEMP_ID + 1 = T3 } else {
  • TEMP_ID = T1 if CMU_ID != 6 && CMU_ID != 12 (this 2 CMU contain T2) - TEMP_ID + 1 = T2 }

Comment

  • 1: Possibly only sent in debug mode.
  • 2: Available when car in sleep and wake up with CAN message
  • 3: bitshift: 1 >> 1 == 1 * 2, 1 >> 2 == 1 * 4 , 1 >> 8 == 1 * 256, 1 >> 16 == 1 * 65536 ,
    x >> 34 == x * 2^34