OBD-II (april 2007)

I'm right now looking on how to make my own OBD-II interface to read out diagnostic codes from my car. OBD is the abbrivation for On-Board-Diagnostic. The interface includes different protocols.

  • ISO9141-2
  • ISO15765-4 (CAN)
  • ISO14230-4 (KWP2000)
  • J1850 VPW
  • J1850 PWM

My car (Toyota) uses the first one - ISO 9141-2.


Below you see a drawing of the topology. This tester i'm working on is the one at the rightmost position of the drawing. The tester can be communicating to more than one unit in the vehicle.



This is the topology of the interface. The serial data is transmitted over the K-line.

ODB-II message structure


To communicate with the computer in the car you need a µ-controller. I prefer to use the microcontrollers from Microchip. Looking around you can also find a already preparred microcontroller from ELM electronics (www.elmelectronics.com ) in Toronto.  Having some experience with Microchip controllers you can soon find out that it looks like that ELM electronics are using a Microchip controller for their product (which they also write on their homepage now). I checked the Microchip parametric search engine and looked for 28 pins with CAN controller. One possibility could be the Microchip PIC18F2480. Look by your own to see some similarities. PIC18F2580, PIC18F4480 or PIC18F4580 are also candidates.

  • Pin 1: Master Clear (negated)
  • Pin 2,3,4: Analog inputs (10 bit ADC)
  • Pin 8: VSS
  • Pin 17: Tx
  • Pin 18: Rx
  • Pin 19: VSS
  • Pin 20: VDD
  • Pin 21: "ISO K" is on the PIC: External interrupt 0
  • Pin 22: "ISO L" is on the PIC: External interrupt 1
  • Pin 23: CAN Tx
  • Pin 24: CAN Rx

ELM electronics are very resonable with their prices also if you think about that work that they have put into this huge SW project which is not a simple task to do. Here you can see some part of their order list (april 9. 2007). The one marked with * means that you will also get the Microchip MCP2551 High Speed CAN Transceiver as well as the ?-controller. It is a "simple" transceiver (not a µ-controller). If you bye the DIP version without the tranceiver you only have to pay 32.50 Canadian Dollars [CAD] (this is 157 danish kroner [DKK]) which to my opinion is very reasonable.

Datasheets for µ-controllers
ELM327DS.pdf   183 K
PIC18F2480_2580_4480_4580_39637b.pdf   8.2 M

Serial to USB

Most portable PC's doen't support serial ports anymore. I need a USB interface on my unit. This can be made by using only one chip. A Serial to USB bridge from f.ex. http://www.silabs.com/

They have a product called CP2102 which is a Single-Chip USB to UART Bridge.

When using this a driver will be installled on the PC and by using this driver the Serial interface can be used on a virtuel COM port using the PC USB port.




Datasheet for Single-Chip USB to UART Bridge
CP2102.pdf   409 K

Look back later - I will look further into this and describe my progress. First of all i have now bought a raw cable adaptor from OBD2cables.com (type number 143301) which is a cable with a J1962M in one end and a DB9 connector in the other end.

OBD-II Cable (click to enlarge)

ODB-II files
MCP2551_can_bus_transceiver_21667E.pdf   263 K
OBD-2_Techn._Infos.pdf   180 K
OBD-Stecker_Belegungen.pdf   437 K
OBD2Cables_D_version.com.pdf   245 K
OBDII_-_On-Board_Diagnostic_s_System_-_Does_My_Car_Have_OBD-II__The_Connecto.pdf   37 K
generic_protocols.pdf   227 K

OBD links




I now created a PCB from the shematic. This PCB includes hardware for all OBD-II interface types. It uses a USB interface to the connect it to the PC. Nearly all of the components are SMD (Surfaca Mounted Devices). The PCB is dual-layer with components on the top and buttom layer.

This is it.

For sale

I plan to sell these boards if somebody is interested. Please pop me a mail if so.

Follow this link:




Buy your own PCB

Go to the new KOCH Engineering web shop to order your parts for your own OBD-II interface today

Click here  to go to the shop

Copyright © 2007 - KOCH Engineering (Henrik J. Koch)

To top

Copyright © 2009 - KOCH Engineering