openxc / vi-firmware

OpenXC-compatible firmware for PIC32 and LPC1768
http://vi-firmware.openxcplatform.com
BSD 3-Clause "New" or "Revised" License
196 stars 106 forks source link

Add diagnostic request/command to get vehicle VIN #359

Open zacnelson opened 8 years ago

zacnelson commented 8 years ago

I've been investigating add VIN support to the vi-firmware stack. My end goal would be to implement a command similar to the vi-firmware Version and Device ID. So in the Android Enabler, you would see:

VI Version ____
VI Device ID ____
VIN ____

In order to support this on the firmware side, we need to be able to support multi-frame diagnostic messages in the iso-tp library. VIN requests come in 3 CAN messages.

Before I dive into the work of adding that to the iso-tp library, I wanted to first see if other folks had thoughts for adding this support. Based on the standard OBDII-PIDs, the VIN number can be read as follows: https://en.wikipedia.org/wiki/OBD-II_PIDs

Mode = 0x09 - Request vehicle information ID = 0x02 - VIN

  1. Send request.
  2. Response would be first message of a multi-frame response. (VIN is 17 bytes)
  3. VI would then send a flow-control message for the remaining data to be sent
  4. Next 2 messages would contain the remainder of the VIN info.
emarsman commented 8 years ago

Probably optional, but you could also do a mode=0x09, id=0x00 to make sure id=0x02 is supported and pid=01 to make sure 5 bytes get returned. Maybe we only support 5 bytes for now, but can spit out more useful error messages if we do the other commands first.

Here is a good example I had of VIN data returns: http://www.obdscan.net/APEX.pdf