Open-source ELM327 OBD adapter


The adapter allows you to interface with your car's OBD-II bus. It provides you a serial interface using the ELM327 command set and supports all OBD-II standards:

  • SAE J1850 PWM
  • SAE J1850 VPW
  • ISO 9141-2
  • ISO 14230-4
  • ISO 15765-4 CAN




The adapter kit schematic is shown here. It is built around NXP LPC1517 Cortex-M3 microprocessor with 64 kB program memory, but can accommodate another chip from same family like LPC1549 with 256 kB if required. The NXP chips has a ROM-based bootloader that supports loading a binary image into its flash memory using USART or CAN. All the software is written in C++ for NXP LPCXpresso IDE which is essentially using GNU toolchain for ARM Cortex-M processors. However, it can be compiled with other pre-built GNU toolchain, like GCC ARM Embedded or even with Keil uVision IDE.



The Highlights

  • NXP LPC1517JDB48 ARM Cortex M3 72Mhz processor
  • 64kB Flash, 12kB RAM
  • Using NXP sophisticated State Configurable Timers to do the precise signal handling for J1850 PWM and VPW protocols
  • CAN FIFO buffers for handling some not-strict ISO-compliant ECUs
  • Botloader for initial firmware programming
  • Low power consumption

See building the adapter firmware from the source code. Or, if you just want to program the firmware check the programming the Adapter with Flash Magic.



A release is available:

The software and other materials in is released under GPLv3. If you want to reuse the source code in your commercial products, contact me for a commercial license.

The printed circuit board data are available separately:



This version of AllPro adapter is ready-to-use fitted to "de-facto" standard OBD connector case and paired FT230XS USB to UART chip. Here is the schematic. The FTDI chip is crystal-less with the synchronization for this oscillator can be taken from the USB data stream itself and clocking Cortex processor as well. It also providing 3.3V from internal VREG.