What OBD (On Board Diagnostics) protocol does my car use?
There is a chance that your car may not use any OBD protocol. Many vehicles are able to communicate with some form of scan tool, but may not use an OBDII protocol (which is what ELM ICs support). If your car is older, or from a country that does not require OBD, then your car may not respond to OBD requests for data.
A vehicle’s ability to communicate using OBDII really depends on the age of the vehicle, and the market that it was manufactured to be sold in. It is difficult for us to provide an accurate table of this data for you, as most countries set a date for full compliance, and also provide a ‘phase-in’ period in which the OBD requirements increase over time. Some do not publish their requirements openly, and some have different requirements for urban and rural areas.
With the help of our users and from published information, we have been able to come up with the following list of dates for light duty vehicles:
- Algeria – 2014
- Argentina – 2009
- Australia – 2006 (gas), 2007 (diesel)
- Bahrain – 2017 (basic), 2018 (OBDII)
- Bolivia – 2021?
- Brazil – 2007 (gas), 2015 (diesel)
- Canada – 1998
- China – 2005 to 2009 (gas), 2011 (diesel)
- Chile – 2013 (diesel), 2014 (gas)
- Colombia – none
- Costa Rica – 2017 (basic)
- European Union – 2001 (gas), 2004 (diesel)
- Fiji – 2015 (imports), 2016? (all)
- Hong Kong – 2006
- Indonesia – 2016?
- Iran – 2012
- Israel – 2003
- India – 2013 (some cities), 2017 (all)
- Japan – 2002 (basic), 2008 (domestic), 2010 (imports)
- Kuwait – 2017 (basic), 2018 (OBDII)
- Malaysia – 2015?
- Mexico – 2006 (basic), 2013
- Morocco – 2010
- Nigeria – 2015
- New Zealand – 2006
- Oman – 2017 (basic), 2018 (OBDII)
- Peru – 2017
- Philippines – 2016
- Qatar – 2017 (basic), 2018 (OBDII)
- Russia – 2010 to 2012
- Saudi Arabia – 2017 (basic), 2018 (OBDII)
- Singapore – 2014
- South Korea – 2005 to 2010
- Taiwan – 2008
- Thailand – 2013
- Turkey – 2013
- Ukraine – 2018
- United Arab Emirates – 2017 (basic), 2018 (OBDII)
- Uruguay – none
- USA – 1996
- Venezuela – none
- Vietnam – 2017
- Yemen – 2017 (basic), 2018 (OBDII)
Cars and light duty trucks (typically < 14,000 lbs GVW) that were manufactured for sale in the listed country after the date shown will likely work well with our products. If your vehicle is older than this, or was imported, it may not be OBDII compliant so may not work with our integrated circuits (even if it uses a similar looking connector). Note that large trucks and busses generally have different OBD requirements, and typically use different protocols too (usually SAE J1708 or SAE J1939).
Vehicles that comply with the OBDII standards will have a data connector within about one meter of the driver’s position. If the location is not obvious, check the owner’s manual as many newer vehicles list the location there. In most cases, it will be at the bottom of the dashboard, just out of sight from the driver’s position. Occasionally it will have a cover that needs to be removed, or moved sideways (there are a few vehicles that have the connector behind a panel in the centre of the dashboard).
The OBD connector is officially called an SAE J1962 Diagnostic Connector, but is also known by DLC, OBD Port, or OBD connector. It has positions for 16 pins, and looks like this:
Many older vehicles use a similar type of connector for communication with modules, but do not comply with the OBDII standards. Simply having a J1962 connector does not mean that the vehicle is OBDII compliant. Be aware of this when attempting to read vehicle codes (and be aware that you may cause damage to some circuits if you connect the wrong voltages to them). Always look first for a section on OBDII compliance in the owners manual, for a sticker in the engine compartment, or for information on the manufacturer’s web site, to be sure that you are dealing with an OBDII compliant vehicle.
Locate the J1962 connector in your vehicle, and determine if there are pins at positions 2, 6, 7, 10, 14 or 15. Once you know which pins are used and which are not, then determine which standard applies from the following table:
Pin 2 | Pin 6 | Pin 7 | Pin 10 | Pin 14 | Pin 15 | Protocol | Use |
---|---|---|---|---|---|---|---|
must have |
– | – | must have |
– | – | J1850 PWM |
ELM320 or ELM327 |
must have |
– | – | – | – | – | J1850 VPW |
ELM322 or ELM327 |
– | – | must have |
– | – | may have* |
ISO 9141-2 or 14230-4 |
ELM323 or ELM327 |
– | must have |
– | – | must have |
– | ISO 15765-4 (CAN) |
ELM327 or ELM329 |
The above should be considered a good guideline. The presence or absence of pins in the connector is not an absolute indication though, as only your vehicle manufacturer can say for sure which standards the vehicle was built to.
Pre-2008 Typical Protocols
All new cars (2008+) seem to be going to the faster ISO 15765 (CAN) protocol, but older vehicles might have used one of several different protocols. The vehicle manufacturers generally stayed with one protocol, but not always (for example, Chrysler started using ISO 9141-2 and then switched to SAE J1850 VPW around MY2000). Typically, you will find the following standards usage for older vehicles:
Manufacturer | J1850 PWM (ELM320) |
J1850 VPW (ELM322) |
ISO9141 ISO14230 (ELM323) |
ISO15765 CAN (ELM327 or ELM329) |
---|---|---|---|---|
Acura | X | |||
Chrysler | X | X | ||
Ford | X | |||
General Motors | X | |||
Honda | X | |||
Saturn | X | |||
Subaru | X | |||
Suzuki | X | |||
Toyota | X | |||
Volkswagen | X | |||
Actually, beginning with the 2005 model year, some North American vehicles did begin using the ISO 15765-4 (CAN) interface standard, so maybe we should have put some ‘X’s in the last column. The above should be a good starting point for you, though.
Beginning with the 2008 model year, all North American vehicles were required to use ISO 15765-4 (CAN).
Some OBD Web Links
Here are some links to reference material, and products that you may find useful. We've split them into four sections:
- Standards Organizations and Documents
- Scan Tools and other Hardware
- Decoding Trouble Codes
- Other Helpful Links
Standards Organizations and Documents
A serious hobbyist will want to obtain the relevant standards for reference. Many are available for sale through the following sites, but be warned – somes are fairly expensive:
- http://www.ansi.org/
- ANSI – American National Standards Institute
- http://www.arb.ca.gov/
- CARB – California Air Resources Board
- http://www.iso.org/
- ISO – International Organization for Standardization
- http://www.sae.org/
- SAE – Society of Automotive Engineers
Scan Tools and other Hardware
A quick search with Google will provide many links, but to get you going, here are a few handy ones:
- http://www.actron.com/
- Actron Automotive Test Equipment offers ready-built code readers, and also provides a handy trouble code lookup.
- http://www.aeswave.com/
- Automotive Electronics Services has lots of diagnostic tools.
- http://www.auterraweb.com
- Dyno-Scan scan tools and software.
- http://www.autotap.com/
- AutoTap needs little introduction. An excellent tool brought to you by B&B Electronics.
- http://www.autoxray.com/
- Autoxray is a maker of several automotive scan tools.
- http://www.bsecorp.com/
- Blue Streak Electronics have a 3 in 1 BDM Pro kit for serious troubleshooting.
- http://www.carplugs.com/
- We are often asked where the OBDII (J1962) connectors are sold – CarPlugs.com is one source to try.
- http://www.digimoto.com/
- Digimoto no longer sells ELM-based products, but they still have some well respected vehicle diagnostics software, as well as good interfaces.
- http://www.dgtech.com
- DG Technologies make a number of vehicle interfaces – most notably the Gryphon. They do host a number of courses too, for those that want to go beyond the basics.
- http://www.elm-327.eu
- ELM327.EU offers ELM327 interfaces with either Bluetooth or USB connectivity (WiFi is coming). If you’re in the EU, this Romanian company may be just what you’re looking for.
- http://www.ferretinstruments.com/
- Ferret Instruments offer several automotive analyzers.
- http://www.gendan.co.uk/
- Gendan sells ELM-based OBD interfaces (others too), and offers a free (for casual users) online Fault Code Library.
- http://www.hickok-inc.com/
- Hickok makes the New Generation STAR factory scan tool.
- http://www.ilexa.co.uk/
- Formerly OnBoardDiagnostics.co.uk, Ilexa Onboard Diagnostics offer a variety of tools. Volkswagen, Seat, Skoda and Audi owners will be interested in their VCDS, and the Opel and Vauxhall owners will appreciate the VAUX-COM.
- http://www.interro.com/
- Omitec Interro are makers of handheld automotive diagnostic systems.
- http://www.kds-online.com/
- Kuester DatenSysteme offer a variety of interfaces and parts.
- http://LapLogger.com/
- LapLogger offer software and interface packages for most platforms.
- http://www.mediakit2010.com
- Mediakit2010 offer a very wide range products, including several that use our ICs (USB and BlueTooth versions, too). Be sure to have a look at their site. They’re based in Spain, which may be of advantage if you are in Europe.
- http://www.millisi.net/
- Millisi Corp. offer several interfaces, both for VAG and for OBDII.
- http://www.nexiq.com/
- Nexiq makes several interfaces, including ones for big rigs.
- http://www.obd-2.com/
- Alex Peper’s site – ICs, interfaces, and software for the experimenter.
- http://www.obd-2.de/
- An extensive OBD site. Primarily in German, but there are links that provide translations to several other languages as well.
- http://www.obd2allinone.com/
- OBD2AllInOne.Com offers a low cost ELM327 based tester, if you would prefer to buy rather than build. For those that are looking for OBD1 devices, this same group operates the ALDLCable.com, and OBD1.com sites too.
- http://www.obd2cables.com/
- Looking for a reasonably priced OBD cable for your project? Have a look at OBD2Cables.com
- http://www.obdscan.net/
- Harrison R&D have been around for many years. They offer interfaces and software (for Windows users).
- http://www.skpang.co.uk/index.htm
- UK-based SK Pang Electronics offer ELM327 based OBD interfaces and parts for the experimenter. They also carry VAG-COM interfaces (which ELM chips do not support), and a lot of other neat things for the experimenter.
- http://www.snapon.com/
- Snap-on Inc offers quite a range of diagnostics tools for the industry. They were once too expensive for the average homeowner, but you may now be surprised to see how competitive they’ve become.
- http://www.tuning.it/
- Servitel srl is based in Italy, and offers ELM based products as well as some Opel and VAG specific ones. Click here for the english language version of their site.
- http://www.ukobd.co.uk/
- UKOBD Ltd. is a UK-based distributor of scan tools (mostly mOByDic and Autel).
Decoding Trouble Codes
Many of the software programs for the ELM OBD products will provide a description of the Diagnostic Trouble Codes (DTCs) for you, but some times you may just want a different description. Here are some links to sites that may be of help to you:
- Actron’s code lookup
- The Actron Diagnostic Trouble Code (DTC) Definitions page seems to offer a large number of B and U type codes that others do not.
- About.com’s OBD codes database
- This site is pretty good for older (pre-OBDII) vehicles. For newer (OBDII) vehicles, they direct you to the OBD-Codes site.
- DTC search
- A pretty good bare bones site for looking up codes.
- DTCodebank
- Gendan’s online DTCodebank for OBDII, EOBD, and VAG trouble code definitions.
- TroubleCodes.net
- Trying to read a code from and older (pre-OBDII) vehicle? Bat Auto’s Trouble Codes web site may be able to show you how.
- OBD-codes.com
- An interesting site for learning more about the OBD codes. In addition to the basic descriptions, they also offer troubleshooting tips, symptoms, and possible solutions.
Other Helpful Links
From time to time we come across useful resources that we think should be shared. Here are a few of the latest ones:
- AutoTap’s OBDII Page
- The AutoTap (by B&B Electronics) OBD info pages. Well worth a browse.
- http://www.batauto.com/
- This link now redirects you to the Bat Auto Forums – a good source of info.
- International Automotive Technicians Network
- Is a resource for automotive professionals.
- Mechanicbase.com
- This website provides a variety of vehicle related information (trouble code descriptions, repair tips, equipment reviews, etc.). From our emails, there is definitely a need for help with interpreting DTCs, and this site does offer that. Certainly worth a visit, and a bookmark/favourite too!
- OBD Advisor
- This blog provides a fair bit of OBD buying advice and tips.
- OBD Planet
- This site has some auto repair tips, as well as scanner info.
- Rick’s Free Auto Repair Advice
- This site may not cover every vehicle, but there is a lot of advice for those that it does cover.
- Wikipedia – OBDII PIDs
- Wikipedia is always a good resource, and OBD is no exception. If you are looking for a particular piece of information from your vehicle, it may be available through one of these standard PIDs.
Some OBD Software
Fortunately, a very large number of developers have created software for use with our OBD integrated circuits. We list just a sampling of what is available here, to get you started. They are grouped based on the operating system:
- Windows
- Mac OS X
- Linux
- iOS
- Android
- Other
Windows Software
The following are just a few of the programs that are available for the Windows platform:
- AutoScan OBD2
- Autosafe Diagnostics offers the AutoScan OBD2 software for the PC. You can download a free trial before you buy.
- Com Port Terminal
- This is a bare bones (but free) terminal program from WGSoft. Works well for communicating with the ELM327.
- EngineCheck
- Gendan's EngineCheck for ELM-based tools.
- FORScan
- As the web site says, FORScan is a software scanner for Ford, Mazda, Lincoln and Mercury vehicles, designed to work over ELM327 and compatible OBD2 to RS232 interpreters.
- freediag
- A SourceForge project that provides a command line interface for controlling OBDII interfaces (with some support for ELM327 devices). Versions available for Windows, and Linux too.
- HW VSP
- This software is used to create a virtual serial port over a TCP/IP network (typically ethernet or WiFi). It may be useful if you have software that is only designed to be used with a COM port.
- iMechatronics.com
- ...keeps a list of (mostly) Windows software that you might find convenient.
- LapLogger
- LapLogger.com offers software and interface packages for a variety of platforms.
- OBD 2007
- GLM Software offers a Lite (free) version OBD 2007 program, in addition to the full one.
- OBD Auto Doctor
- OBD Auto Doctor is available for Windows, Mac and Linux.
- OBD2Spy
- Offers software for Elm and mOByDic based interfaces.
- OBD Logger
- A basic software package for reading trouble codes, and real-time data. Available for Windows and Unix/Linux.
- openOBD
- A SourceForge project that provides a GUI for controlling ELM327 devices. Versions available for Windows and Linux.
- PC Scan Tool
- Some assorted bits of OBD info, and a link to a freeware PC scan tool. It is no longer supported, but is still useful.
- PCMSCAN
- This software is full-featured and works with a large number of interfaces.
- RealTerm
- Is another great free terminal application, that is certainly worth a try.
- Scanclic
- Most of the OBD software available is in English, but if you prefer Italian, one company (Informaticlaclic) offers Windows and Android software packages that may be of interest to you.
- ScanMaster-ELM
- WGSoft has been offering the full-featured ScanMaster software for a number of years. They offer great support, and a very reasonable price, considering all the features.
- ScanTool.net open source software
- ScanTool.net started an open-source project several years ago. It is still available on the SourceForge site: http://sourceforge.net/projects/scantool/
- ScanXL Pro
- In addition to the PCMSCAN software, Palmer Performance also offers ScanXL. If you purchase the vehicle-specific versions, ScanXL will provide access to a great deal more than just the standard OBD information.
- Serial Port Redirector
- This software is used to create a virtual serial port over a TCP/IP network (typically ethernet or WiFi). It's a little pricey for the experimenter, but may be just what you need for that legacy software that requires a COM port.
- SynchroScan
- The eurOBDiag group in France brings us this software.
- Tera Term Pro
- By T. Teranishi, this is yet another free terminal program. It hasn't been updated for some time, but should still work well on many systems. If you are interested in this program, be sure to also look at the Tera Term project at SourceForge.
- Terminal 1.9b
- Bray++ has offered several versions of this program since 1997. It's a good way of directly 'talking' to your ELM327 circuit (and the vehicle), made even easier with the macro and scripting capability. It's donation-ware, so don't forget to send him something if you use it.
- Termite
- This is a bare bones (but free) terminal program from CompuPhase. It has a nice, simple interface, and offers a large number of features.
- TouchScan
- OCTech offers this complete Windows based (XP SP3 or later) system for obtaining and displaying vehicle info. If you wish to go into more detail, they also have a reasonably priced add-on package.
- WinALDL
- A 160 baud ALDL reader (that's pre OBDII) for those vehicles that use it. The software is 32 bit Windows only.
- wOBD
- obd2crazy.com offers their wOBD software at no charge. It's a little out-dated but still may be just what you need.
Macintosh OS X Software
There aren't as many titles available for the Macintosh, but these will get you started:
- EOBD-Facile
- The people that brought us the iOS version of EOBD-Facile now offer a Mac OSX version. The free download allows you to read trouble codes, while the paid version offers full functionality. See the Outils OBD Facile YouTube page for additional info.
- goSerial
- Andreas Mayer offers a great little program for directly 'talking' to your ELM327 circuit. It's donation-ware, so if you like it, consider sending something his way.
- Movi and Movi Pro
- Only for the Mac, there are two versions of this software. The standard version provides all the basic OBD functions, while Movi Pro adds more bells and whistles. If you just want to try it out, the download will operate in demo mode.
- OBD Auto Doctor
- OBD Auto Doctor is available for Windows, Mac and Linux.
- OBD GPS Logger
- Useful for logging both GPS and OBD data, if you should wish to compare vehicle data and location. Exports data in a few useful ways. Available for Mac OSX and Linux.
- LapLogger
- LapLogger.com offers software and interface packages for a variety of platforms.
- ZTerm
- Dave Alverson provides terminal software too. Even though the site does not say so, we have had no trouble using it with Mavericks.
Linux Software
Here are a few Linux apps:
- CuteCom
- Alexander Neundorf offers this graphical serial terminal program. Note that there are no precompiled versions at this link - you will have to make your own.
- freediag
- A SourceForge project that provides a command line interface for controlling OBDII interfaces (with some support for ELM327 devices). Versions available for Windows and Linux.
- minicom
- This link takes you to the nixCraft site for info on installing and setting up minicom. Very DOS-like, but it gets the job done.
- OBD Auto Doctor
- OBD Auto Doctor is available for Windows, Mac and Linux.
- OBD GPS Logger
- Useful for logging both GPS and OBD data, if you should wish to compare vehicle data and location. Exports data in a few useful ways. Available for Mac OSX and Linux.
- OBD Logger
- A basic software package for reading trouble codes, and real-time data. Available for Windows and Unix/Linux.
- openOBD
- A SourceForge project that provides a GUI for controlling ELM327 devices. Versions available for Windows and Linux.
- Perl OBD-II Logger
- Open source software for logging OBD-II PID data. The sampling periods/rates can be customized for each PID. Runs primarily on Linux, but also on Windows if you install a Perl interpreter. Includes SYSV init scripts for running on the Raspberry Pi in dedicated "headless" mode.
- picocom
- A very minimal terminal emulation program that runs on Linux.
- pyOBD
- Python-based interface for use with Elm devices, now maintained by SECONS Ltd.
- Note that there are several versions of this program available, so check around if you are discouraged with this package (see pyOBD-II and roflson/pyobd).
- pyOBD-II
- As the description says, pyOBD-II (a.k.a. "pyobd2") is a Python library for communicating with OBD-II vehicles. Its goal is to make writing programs for vehicle diagnostics and monitoring vehicle data as easy as possible. Relies on pySerial to communicate with ELM scanners.
- roflson/pyobd
- Python-based interface that offers several improvements over the original pyOBD.
- Serialclient
- A simple bit of software for communicating with a serial port from the command line.
iOS Software
The iPhone, iPad , and iPod continue to be very popular ways of interfacing to the ELM327.
A word of caution - the Bluetooth that Apple uses in iOS devices does not currently support the Serial Port Protocol (SPP). As such, iOS devices can not connect to ELM327 modules with Bluetooth - you must use WiFi with your device*.
- AutoProPlus
- AutoProPlus is a free app for monitoring your vehicle with an iPhone. A little difficult to figure out as the Owner's Manual and web site are both very minimal.
- BT1
- Another bit of software that works using Bluetooth, but only if you also purchase the GoPoint Technology BT1 interface module.
- DashCommand
- Palmer Performance are here with another app for ELM327s and compatibles. DashCommand is a reasonable price considering what you get. You can also purchase enhancements that allow more than just generic data for many vehicles.
- Engine Link
- This app continuously monitors several engine parameters, but it's not clear how you can modify (or stop) them. It does allow you to define custom PIDs though, which might be handy (depending on just what you are using the scan tool for).
- EOBD Facile
- The basic version of this app is free, and works well. It provides some vehicle information, and will read trouble codes, but you can not clear them unless you buy the full package. Once you've got to that point, you will know how you like the software, and the decision should be easy. Well worth a try.
- ezOBD
- Up and Running have a free app that may be just what you're looking for. The reviews aren't in on it yet, but it is being updated regularly.
- FORScan Lite
- Lite version of the popular Windows software. Current version requires iOS 6, and a WiFi ELM327 (or compatible) device.
- iOBD2
- This software offers free support for their iOBD2 hardware, but you must pay in order to connect to an ELM327 device.
- NovaScan - The OBD Total Solution
- ubiqCOM offers this software for the iPad or iPhone. Unfortunately, the free demo version will not connect to a vehicle, so you can not really try it before you buy it.
- OBD Car Doctor
- A great little bit of free software. Provides all the basics, and works quite well.
- OBD Fusion
- A full-featured interface from OCTech that sells for a reasonable price. Does just about everything that you would want and now even offers support for the Apple Watch.
* We are aware that older iOS devices have serial data available at the 30 pin connector, but do not know of any software that you could use to take advantage of it.
Android Software
There's a large number of Android Apps for talking to the ELM327. We've had to pare it down to a few of the most popular:
- Car Gauge Pro
- OBD Scantech's app provides all the basics, as well as enhanced diagnostic data for many vehicles. The price is quite reasonable too.
- DashCommand
- Palmer Performance also supports the ELM327 (and compatibles) on Android. This app only allows 30 minutes of (limited) use before you have to make your decision whether to buy.
- eCar PRO
- This software reads your OBD information through Bluetooth, but does more than just read trouble codes. You can see and compare sensor data, set alarms, display times, and calculate torque and horsepower.
- EOBD Facile
- The basic version of this app is free, and works well. It provides some vehicle information, and will read trouble codes, but you can not clear them unless you buy the full package. Once you've got to that point, you will know how you like the software, can decide whether to purchase the 'Premium Access' package. Well worth a try.
- ELM327 Terminal
- Designed to send pre-defined AT and OBD commands for you. It's a free app that may be right for you.
- Elm Basic
- This is terminal program for sending commands to an ELM327 interface and receiving replies. Just what you may need if you want to stay in complete control.
- Honda Database
- Need Honda trouble code or ECU info, or engine or transmission specs? If so, this handy app is certainly worth a look.
- Kwik OBD Terminal
- Another terminal program for sending commands to an ELM327 interface and receiving replies. Just what you may need if you want to stay in complete control.
- Leaf Spy Pro
- Owners of the Nissan Leaf will be interested in this Android app. There's also a free version (Leaf Spy Lite) that will give battery info. The Leaf Spy Pro page on the Electric Vehicle Wiki is a must-visit too.
- OBD Auto Doctor
- This one is very similar to the iOS version, and it remains a free app too. A great little bit of software that provides all the basics and works well.
- OBD Car Doctor
- This one is very similar to the iOS version, and it remains a free app too. A great little bit of free software. Provides all the basics and works well.
- OBD Trouble Codes Lite
- Get trouble code descriptions on your phone or tablet. The free version of this app (ad sponsored) contains the generic trouble codes (from P0001 to P099F) in its database. The full (paid) version contains almost 20000 codes.
- RaceChrono
- A popular lap timer app that logs both gps information and OBD data. The free version is time-limited, so if you find it useful, you will want to upgrade to the pro version.
- ScanMaster Lite
- A great free app from WGSoft.de, makers of the other ScanMaster programs. Should be one of the first apps that you try.
- Scanclic
- Most of the OBD software available is in English, but if you prefer Italian, one company (Informaticlaclic) offers Windows and Android software packages that may be of interest to you.
- ScanMyOpel Lite
- This app is only for Opel/Vauxhall diagnostics, but that is exactly what many users are looking for. Try this Lite (limited) version before you decide whether to buy the full one.
- Torque Lite
- Free version of the popular app offers a lot for no cost.
- Torque Pro
- Is the full version of the app, which offers more features, supports more vehicles, and does not have ads.
- TouchScan
- This modestly priced app is getting fairly good reviews. If you're looking for an app with a gauge type interface, this one is worth considering.
Note that most Android software requires that you already be paired with a Bluetooth device. We are often asked about pairing codes and while we can never know exactly what code would apply to your interface, we can say that most use either 0000 or 1234.
Other Software
Some items that don't fit into the above categories:
Interest in electric vehicles continues to grow. If your interest is with them, you may find this Wiki helpful.
- Engine Link
- Use ELM327 Bluetooth adapters with your Windows Phone.
- Nokia N800 and Carman
- If anyone is still using a Nokia N800 internet tablet, they may wish to have a look at the Carman software. Looks like version 0.6.3 was the last one produced.
- OBD Auto Doctor
- OBD Auto Doctor is also available for the Windows Phone.
- OBD Gauge
- Dana Peters provides this software for the Palm or Pocket PC platforms. There's even some Windows software for plotting the captured data.
- opengauge
- This is an open source project for interfacing the Arduino to OBD.
- ptelnet
- By Marcio Migueletto de Andrade is free and works well with Palm hand-held devices (if you are still using one). Besides basic communications, it allows macros to be defined, which is handy.
- Raspberry Pi
- If you're experimenting with a Raspberry Pi board, then you are actually using a Linux system, so should refer to the section above for suggestions. There is one Pi-specific article that we've come across that you may find useful though. It's called: Raspberry Pi Reading Car Diagnostics (OBD-II) Data.
OBD Circuit Construction Tips
The following tips are a result of the many technical support questions that have been asked about using our OBD Interpreters. If you are having trouble, then there is likely an answer here. Note that this section deals with OBD related help only - be sure to also see our help > construction tips section for general circuit help.
- Components & Design Choices
- Circuit Boards
- Parts
- Connectivity - RS232, Bluetooth, etc.
- Testing & Troubleshooting
- Initial Tests
- Connecting to a PC
- Talking to a Vehicle
- Understanding OBD
- Protocol Details
- OBD Responses
- the ELM327
- Version History
- Commands and Responses
- Protocols
- Other bits
Components & Design Choices
Circuit Boards
Where can I buy a circuit board for my ELM IC?
Elm Electronics does not sell any circuit boards, but several vendors do offer boards and kits. You may find one from the links on our OBD links page, or possibly prefer to make your own.
If making your own pcb, we can help get you started for the ELM327 only. We've posted some of the design information for our (3"x4" single-sided) demonstration board that was used for the original beta testing:
ELM327 Demonstration Board |
Here are the supporting files for you to download:
- The schematic (Figure 9 from the original data sheet)
- Some info on connections and jumpers
- PDF versions of the foil and silkscreen patterns:
- the copper foil layer from the top,
- the copper foil layer from the bottom, and
- the silk screen layer
- Gerber files (.zip) to have the 3"x4" boards made for you
You are free to use these files as you wish, but Elm Electronics Inc. makes no claims, and offers no guarantees as to the circuits' performance.
Parts
I can not find a 0.3" wide 28 pin socket. Can you help?
Why not use two 14 pin sockets, end-to-end? Many brands can be connected this way, will work fine, and are likely a lot less expensive than a 28 pin one.
My OBD cable uses pin 2 for common, but I see that your demo board uses pin 1. Is that OK?
Yes - the demonstration board was only created for testing the IC, and was not meant to cover all situations. We used cables from OBD2Cables.com for our testing, but you may obtain your cables from anywhere (and modify the board connections to suit). Perhaps you may wish to use both pins 1 and 2 of the connector for your circuit common.
Where do I get a male J1962 connector?
This is difficult as they are not that easily found. Have you tried OBD2AllInOne? They carry components for you to assemble your own, as does OBD2Cables.
For complete cables, you may wish to try OBD2Cables, ScanTool.net, B&B Electronics, and Multiplex Engineering. There are others - just Search the web for J1962 OBD cable vendors.
Your other OBD ICs use a 3.58 MHz crystal. Can I use that frequency for the ELM327 as well?
No, and do not use a 4.096 MHz crystal either, as the frequency error is too great for the protocol timing. The ELM327 must use a 4.000 MHz crystal, as shown in the data sheet.
Do I have to use a Microchip MCP2551 transceiver chip with the ELM327?
No - a CAN transceiver is a very common product that most of the major IC manufacturers make - you can choose as you like. To get you started, have a look at the 82C251 from Philips, the SN65LBC031 from Texas Instruments, and the LT1796 from Linear Technology. We only show the Microchip MCP2551 as one possible example.
Connectivity - RS232, Bluetooth, etc.
Can I use a MAX232 IC for the RS232 interface?
Yes, it can be used but you need to be aware that the RS232 Rx inputs on the ELM320, ELM322, and ELM323 are inverted from what they should be (for a standard interface). This means that the Rx input needs to have an inverter connected in series for the levels to be correct. One of the RS232 drivers inside the Maxim interface IC can be used for this, as shown here:
Note that the ELM327 does not need to have its Rx input inverted, as it uses standard (high at idle) levels. If you wish to use a MAX232 with the ELM327, simply connect the IC as follows:
I would like to connect directly to my microprocessor. Can I do that?
Sure. You don't need the RS232 voltage levels to transfer data if it is going to another circuit on your board. RS232 voltages are really for going longer distances.
The RS232 Receive inputs on the ELM320, 322, and 323 are inverted from what they should be (for a standard RS232 interface), so to correct for that you need to add another inverter. If you have a spare one on your circuit board, then use it. If you do not have an inverter, you can make one. A simple circuit such as this will work well:
This one transistor circuit is placed between your microprocessor transmit output, and the ELM IC's receive input to invert the signal for you. Your microprocessor receive input can be connected directly to the ELM's transmit, and your RS232 is all set. Note that the circuits must all be powered by the same supply (so that you don't try to backfeed through the protection diodes).
The ELM327 does not need to have its' Rx input inverted, as it uses conventional levels at both of the RS232 pins - see the 'Microprocessor Interfaces' section of the ELM327 data sheet for more information.
I want to use my PDA to talk to my vehicle, how do I do this?
Some PDAs can be used - the biggest problem is in finding one that has a serial interface. If it has only USB, it can not be used unless it is capable of USB OTG (on the go).
We can't possibly provide advice on all of the devices out there, but we can get you started by showing how to use some of the very popular Palm series of handhelds.
Many of the early Palm models (M100, etc.) used a serial port connection for HotSyncing. You can use the HotSync cable that was supplied with these Palms to talk to your vehicle.
Newer Palms (Tungstens, etc) use a USB connection for HotSyncing. What to do with them? Well, it turns out that many of them have both USB and RS232 available at their 16 pin "Universal Connector". For these devices, you will only need to purchase Palm's "HotSync Cable-Serial" (part number P10804U). When you connect this cable, you will then have a standard looking 9 pin (F) connector coming from your Palm.
Now that you have this 9 pin (F) connector coming from your Palm, you need to connect to it. This is not as difficult as many would think, as Palm has followed convention so that their devices can be easily connected to any PC. They have made the connection so that the Palm appears as a modem (DCE) device. The ELM IC is expecting to be talking to a PC however, so in order change how the Palm appears, you will need to reverse the wires to it.
This is done by either putting a "null modem" cable between your ELM IC and your PDA, or by using a standard cable and a "null modem adapter" at one end of the cable. If you wish to make your own "null modem" cable, it's not very difficult. All that you really need is:
Having made the connection, you will now need software. There are several terminal programs available for the Palm - take your pick. We use the free and very stable "ptelnet" here at ELM. It will log your sessions to a memo, and the one really good feature that we enjoy is its ability to assign macros (up to 12) to menu items so you don't need to remember those commands. Here a few macros that we use:
Don't forget to turn the serial port on and off using the 'On' box in the bottom left corner of the screen. It seems that some of the earlier models needed the port turned on and off manually, and if left on, they would continue to use battery power even if the Palm was off. We think that Márcio Migueletto de Andrade has provided a nice product here. If you think so too, don't forget to tell him.
I would like to connect to my ELM327 circuit using Bluetooth. Can this be done?
Certainly. We actually prefer to use Bluetooth for connections - either using a directly connected 3.3V module (an LMX9838 from National Semiconductor), or with our GBS301 Serial Adapter (from IOGEAR). For more information on using these, see our Application Note 'AN04 - ELM327 and Bluetooth'.
Testing & Troubleshooting
Initial Tests
I'd prefer to not connect my OBD board to my vehicle for initial testing. Can I test it on the bench?
Certainly. We find that a 9V 'transistor radio' battery works very well. Besides being small and convenient, this type of battery will limit the current available (which is what you want for testing). Try not to use car batteries or power supplies that do not have current limiting until you are sure that your circuit has no wiring problems.
My circuit doesn't work, and I'm not sure where to start troubleshooting. Is there anything with typical voltages on it that I can use to narrow down the location of the problem?
If you are working with the ELM327, have you seen the Application Note 'AN02 - ELM327 Circuit Construction'? It provides help with building an ELM327 circuit, and provides schematics with typical voltages shown on them.
We do not have anything similar for the other chips at this time, but the next section (Connecting to a PC) does have some typical voltages for the RS232 circuitry.
My ELM327 circuit is acting strangely. All I have connected is the ISO 9141 circuitry, and I've checked the wiring many times. Is the chip bad? What next?
All of the ELM ICs are made with a process called CMOS. These are great low-power and fast devices, but one of the problems with CMOS is that it will not tolerate a 'floating' input. That is, all inputs must be either directly connected to either the positive supply or circuit common, or they must be connected ('terminated') through a resistor. If you do not do this, very unpredictable things can happen, and you might possibly damage the chip.
It sounds like you may have a floating input. Check all of your pin connections to be sure that every input is terminated. (Pins designated as outputs can be left open-circuited.)
I can see pulses going out and in, but the ELM IC says NO DATA.
The bit timing is very critical, particularly with the ELM320 as it operates at a higher speed. By adding test equipment, you are adding extra capacitance that changes the pulses (one edge of the pulse depends on a resistor to provide decay so adding C increases the R-C time constant). Remove your test equipment to ensure that everything's working properly, before trying to measure and analyze what is happening.
I've removed my test equipment, but the ELM IC still says NO DATA.
Not all requests are supported by every vehicle. Yours may not have data to give, or was never designed to respond to this PID (or SID). If you are sure that the vehicle should be responding to this request, then check that the ELM IC's timeout has not been set too short. Try issuing a AT ST FF command so the chip waits a full second before declaring there is no data available. Maybe your ECU just has higher priority things to attend to, and it is taking longer for it to answer you.
I can see pulses going out, and my car still won't talk to me. What next?
There can be many reasons for your problem. Consider these:
- You may have selected the wrong interface standard for your vehicle. There are no guarantees that your vehicle uses the standard that is generally attributed to it. For example, much of the literature states that Daimler Chrysler vehicles use the ISO standard, and while many do, as of the MY2000 many of them started to use the J1850 VPW standard. Check with your manufacturer to be sure.
- In line with the above, we once had a person who carefully built an ELM320 circuit only to find that it did not talk to his diesel powered vehicle. We tried everything, and he ended up putting it on the shelf. Eventually though, he tried it on a gasoline engine version of the same vehicle and the circuit worked. Always verify the standard used by your vehicle if you can not communicate with it.
- You may have a wiring error. These occasionally become more obvious after taking a break (why not put this down for a day or two and then come back to it?).
- You may have a component error. Be careful with substitition of component values. For example, changing the 4.7K resistor on pin 4 of an ELM320 circuit to a 47K resistor, will almost guarantee failure (as the R-C time constant will change, altering signal pulse widths).
- Check that your ignition switch is turned fully on. Even though there is 12V at the interface, most ECUs will not respond unless the ignition is on. We've all made this mistake more than once!
Connecting to a PC
I've connected the RS232 but get nothing from my ELM IC. What should I do now?
All of the ELM OBD chips will power up and then send a message saying its device name and the version number. Before even trying to control something with your ELM IC, you need to see this message.
Some of the ELM RS232 Example Applications show RS232 connections for an older style 25 pin connector. This connection was very common for external modems and other computer peripherals, but is now almost extinct. Be sure that you are using the correct pinouts for the type of connector that you are using. Here is a pin cross-reference for you:
Function | DB25 | DB9 |
---|---|---|
Transmit Data (from PC) | 2 | 3 |
Receive Data (to PC) | 3 | 2 |
Request to Send (from PC) | 4 | 7 |
Clear to Send (to PC) | 5 | 8 |
DCE Ready (to PC) | 6 | 6 |
Signal Ground | 7 | 5 |
Data Carrier Detect (to PC) | 8 | 1 |
DTE Ready (from PC) | 20 | 4 |
Ring Indicator (to PC) | 22 | 9 |
If you are sure that you have connected the correct pins (there should be a tiny little number beside the pins), then perhaps you have a component problem. The following shows the typical voltages that you should see in your ELM320, ELM322, or ELM323 circuit - simply compare them to what you measure:
The Example Application for the ELM327 shows a slightly different circuit. Here are typical voltages that you might measure with the ELM327 circuit:
If you have a multimeter available (you should if you're building an electronic circuit) then connect it with the negative lead to circuit common and probe around this circuit. The typical voltages that you would expect (if all connections are correct) are shown in red in the above diagrams. Don't worry if your voltage is a little different as each computer is a little different - it is the relative magnitude and the polarity of the voltage that is important. Any significant differences need to be checked, as the different voltage might be caused by a component problem.
Several people have pointed out that for the ELM320, ELM322, and ELM323, the Rx pin actually sits at a negative voltage. Since voltages less than Vss are not recommended for an IC, people were worried that damage might result. Actually, it is not recommended if there is no means of limiting the current through the input pin (as it could cause a problem known as 'latchup'). In this case a large series resistor limits the current to a safe level, so the -0.5V measured is quite acceptable.
I've connected the RS232 but get random characters from my ELM IC. What should I do now?
Random characters almost certainly mean that ELM device and the terminal software are not set to the same baud rate. All of our OBD products power up and transmit a message like this:
ELM327 v1.3a
>
If your terminal software baud rate is set too low, you will see a shorter message, typically like this:
å°¸
and if your terminal software baud rate is set too high, the message will appear longer than it should, typically like this:
xÄxxÄxxxÄx-ÄxÄÄÄÄÄ--ÄÄÄ-xÄÄx ÄÄÄxx-ÄxxÄxÄÄ
The ELM ICs normally use 9600 baud or 38400 baud, so if you have set your software to one of these, then try the other.
I see the powerup message, but I get nothing when I send commands.
There are two types of commands - internal and OBD. Send an internal command (try AT E1) and make sure you receive an 'OK' in response.
If you do not, there may be a few reasons:
- The fact that you see the powerup message says that the IC is functioning, your baud rate is correct, and the transmit wire from the ELM IC to the PC Rx input is correct.
- The common wire from the ELM circuit to the PC's RS232 port may be incorrect. Check that the two are properly referenced to each other (you must connect common to pin 5 on a 9 pin connector, or to pin 7 on a 25 pin connector)
- Make sure you do not have any handshaking selected. Your PC may be waiting for a signal that the ELM IC is ready to receive data, and this will never happen. No hardware handshaking, no XOn XOff handshaking. Don't worry, almost any PC ever made should be able to handle 9600 baud.
- Your system may not allow you to avoid handshaking entirely. Some RS232 ports (or USB adapters) require signals such as Carrier Detect (DCD) and DCE Ready (DSR) to be asserted before they will function properly. If you have one of these, you will have to add jumpers between some of your RS232 pins. For 25 pin systems, short pins 6, 8, and 20 to each other, and also connect pin 4 to pin 5. If you have a 9 pin connector, short pins 1, 4, and 6 to each other, and then short pin 7 to pin 8.
- Check your wiring again to the ELM IC's receive input. The ELM IC can talk to your PC or PDA, but is not seeing your commands, so something is likely wrong with the components between the PC and the ELM IC. Note that the input is inverted, so if you have deviated from the Example Application, you may have to add an extra inversion to compensate.
I have built the circuit, and am testing it on an Ozen Elektronik ISO 9142 ECU simulator. All I get is 'UNABLE TO CONNECT' - why?
You must have an ELM327 v1.3a or older. When searching, the ELM327 looks to see what inputs are active, if any. If none are active, it tries protocol 5 (KWP fast) first, then looks for others if that fails. It turns out that the Ozen simulator needs about 2 seconds after one of these attempts before it is able to respond to others.
In order to connect to the Ozen simulator, either add time (make PP13 > BC) or use an ELM327 v1.4b IC.
Talking to a Vehicle
What software do I need in order to talk to my ELM IC?
All of our ELM OBD Interpreter ICs that have interfaces 'talk' in plain ASCII. This means that virtually any terminal program can be used with them, and no special software is required (but you may want to add your own, in order to provide a more 'user-friendly' interface).
Here are some examples of terminal programs:
Macintosh
- goSerial by Andreas Mayer is a nice bit of free software. It provides a simple terminal interface, that automatically logs your sessions for you.
- ZTerm by Dave Alverson has been the standard shareware program for years. It's available for Mac OS X, as well as the older systems 8 and 9.
Windows 95, 98, XP
- The older Windows systems have a free terminal program included - "HyperTerminal" by Hilgraeve Inc./Microsoft. It's a good one to start with, if you're trying to do some basic testing.
- Terminal 1.9b by Bray is a great little free program if you can find it. For some reason, it's disappeared off the net recently.
- RealTerm is another great free program that is certainly worth a try.
- VBHexTerm by Chris Schroeder is another great little free program. It allows you to transmit actual binary data which may handy (but not for the ELM interfaces - they only need ASCII).
- Tera Term Pro by T. Teranishi is yet another free program. It hasn't been updated for a while, but should still work fine on many systems.
- If that version of Tera Term seems a little outdated, you may want to try the SourceForge TeraTerm Project. The software is open source, costs nothing, and seems to be kept fairly current - certainly worth a try.
- One other suggestion is for a (free) product by CompuPhase, called Termite. It is easy to set up, and is very fast at finding the COM port for you. It does support plugins, so can be customized if you wish (they give the source code, so you can write your own, too). The "Time Stamp" filter was a little disappointing in that it seemed to intersperse time stamps almost randomly thoughout the ELM chip responses (but could be very useful if it were to time-stamp the beginning of each line that is received). Click here to go to the Termite web page.
Windows Vista
- WGSoft, makers of the popular ScanMaster-ELM software have created a nice little basic terminal - the "COM Port Terminal", and best of all, it's free. Click here to download a copy (it's about 600KB).
- RealTerm is reported to work well with Vista, and it's also a free download.
Windows CE
- Pocket Tera Term by T. Teranishi is yet another free program. We have not tested it yet, so can't say if it works well or not (but like Tera TermPro, it's free).
Palm
- ptelnet by Marcio Migueletto de Andrade is free and works well, if you are doing basic testing. It allows you to define macros for common functions, which is handy.
I'd prefer a graphic interface. Is that type at software available?
Yes, many organizations have created software for the ELM OBD ICs. Some provide it at no cost, while others charge only a moderate fee. See our OBD links page for a list.
Every time I use certain free software, I need to reset my OBD chip before it will accept commands. Why?
You should not have to reset the IC. Some software turns the character echo off, and leaves it that way on exit. Try sending AT E1 to turn the echo back on instead of resetting everything.
The received data keeps overwriting on itself. What is wrong?
Your ELM chip is not generating linefeeds after carriage returns. Either set your ELM chip to provide linefeeds (AT L1) or set your terminal software to automatically add linefeeds after each carriage return (some software calls this 'Append line feeds to incoming line ends').
Can I use my ELM32x software with the ELM327?
In general, no. You may have some success depending on what type of vehicle that you use the IC with, but as soon as you begin talking to a CAN vehicle, most of the older packages will 'break'. Many of the software companies are working hard to update their software though, and should be ready soon.
Terminal programs such as HyperTerm, ZTerm, etc. still work fine with all of our RS232 products - they need no changes to work with the ELM327.
Can I use my ELM323 or ELM327 with VAG-COM software?
No, we do not currently support the VAG interface.
I have a scan tool that is connected to a vehicle, and I wish to monitor the data flow with an ELM. As soon as I connect my ELM circuit in parallel, I begin seeing errors. Why?
One reason might be a wiring problem in your ELM circuit. Assuming that there is none, are you trying to monitor either the ISO9141-2 or the KWP (ISO14230-4) protocols?
If so, you may be placing too big a load on the data bus circuit. These protocols were only designed for one scan tool at a time, each with a 510 ohm resistor inside. By connecting two, you have doubled the loading by effectively connecting a 255 ohm resistor in the circuit.
We advise that if connecting your ELM327 or ELM323 like this, you replace both the 510 ohm resistors in the ELM circuit with 10K ohm resistors. You do not have to modify any of the other circuits (just leave them as they are.)
My ELM323 starts to initialize the bus, then aborts!
If you have set linefeeds off in the ELM323, but have them on in the computer software, you may be inadvertently causing this problem. In this case, every command you send to the ELM323 will be followed by both a carriage return character and then a linefeed character. When the ELM323 receives the carriage return character, it immediately begins executing your command (since linefeeds are off, it doesn't wait for any more characters). When the linefeed character does eventually arrive, it is interpreted as an interrupt (any received character will stop a command in progress) and the ELM323 will abort whatever action was in progress.
Often the display looks like this:
>01 00
BUS INIT: ...
>
The solution is to either turn on the linefeeds in the ELM chip (AT L1), or to turn off the linefeeds that are being generated when your computer sends commands. In HyperTerm, the option is something like "send line ends with line feeds", while in Zterm it is "auto line feed".
Similar problems can occur with the other ELM chips too, if you are not consistent with your settings. When weird things are happening, check your settings to make sure both the ELM chip and your computer/PDA are set the same way.
Understanding OBD
Protocol Details
Where can I obtain lists of vehicle modes and PIDs?
These are described by SAE (Society of Automotive Engineers, Inc.) standards J1979 (E/E Diagnostic Test Modes) and J2190 (Enhanced E/E Diagnostic Test Modes). Copies of these can be purchased from the SAE web site.
What is an In-Frame Response?
They are reply bytes that are sent during a message, usually as an acknowledgement of data received, or as a short reply to a request. They occur during specific time slots within the data frame, so are given the In-Frame name. The ELM320 always sends a single response byte, while the ELM322 and the ELM323 never do, and the ELM327 will send one if the header says that it is required.
OBD Responses
How can I obtain updates at a faster rate?
There is a chance that you may not be able to, as several factors (not just the ELM interface) all work together to set the data rate. Occasionally, the vehicle's ECU is the limiting factor, but it is often the OBD standards that actually limit the maximum polling rate (so that you do not overburden the ECU). The early standards required that scan tools not request information more often than every 100msec.
If you aren't happy with the present data rate, then here are some tips that may help:
- If you are monitoring only one quantity (eg RPM), are you aware that you do not have to keep sending the complete command over and over? Simply sending a 'return' character causes the ELM IC to repeat the last command that it received.
- Have you experimented with your vehicle to see just what 'NO DATA' timeout value is appropriate? Even when data has been received, the ELM IC waits the amount of time set by AT ST before it decides that there is no more data coming (unless you have the newest ELM327, and have the Adaptive Timing enabled). If you know that your ECU always responds in 50 msec, then it doesn't make much sense to always wait the default 200 msec to be sure no more data is coming.
- Have you turned the headers off? If you do not require that information, then why ask the ELM IC to repeatedly send it?
- If you are using a computer program to manipulate the information then display it (as opposed to a terminal program that only displays what it receives), have you turned the linefeeds off with AT L0? This will reduce the number of bytes being sent on the RS232 bus, saving some more time.
- Speaking of saving time, you can triple data flow rates if you use the Packed Data mode of transfer (AT PD) with the ELM320, ELM322 or ELM323. Of course it will be unreadable on a terminal program, but if you have written your own interface program, then why have the ELM IC send three ASCII bytes for every data byte, if you can use the data bytes directly?
- The ELM327 does not support the Packed Data mode, but the latest version does allow space characters to be eliminated from the ECU responses. This will typically save 33% in time to transfer data, and will allow more characters to be buffered for sending, reducing the chance of BUFFER FULLs.
How do I convert the Hex numbers for trouble codes to decimal?
You don't. The responses should be read directly as received, without manipulating. At least this applies to the ones that begin with a '0' or a '1'. For the others, you'll have to refer to the data sheet (as the first digit does double duty in those cases).
Here is an example conversation with one vehicle:
ELM320 v2.0
>01 01
41 01 81 07 65 00
>02 00 00
42 00 00 7E 18 00 00
>03
43 01 33 00 00 00 00
>04
44
>
After asking for the trouble codes (the '03'), a '43' (response from an '03') is received followed by three trouble codes, which are combined into pairs giving 0133 0000 and 0000. The 0133 is what you want, and you read it directly without any need for a hex conversion. The 0000's are just filler bytes and should be ignored.
Note that the '04' that was sent actually cleared the trouble code, and reset the check engine light. This should never be done until the problem that caused the code has been repaired.
Why do I get DATA ERRORs when in the Monitor All mode?
Some vehicles use a single byte header format for a few of their messages, to keep transmission times down and allow for the rapid updating of information. The ELM ICs follow the OBD standards however, and always expect a three byte header, one or more data bytes, and a checksum byte. If a received message does not appear to follow the OBD standard, it will be deemed to be in error, and the DATA ERROR message will be shown. If the headers are off, you may not see any data at all.
If you would like to see the complete message as received, try using the AT H1 command to show the extra bytes. With the headers on, the IC will not try to remove four bytes from it, and if the message is less than four bytes long, it will be displayed properly.
the ELM327
Version History
Do you offer a 'version history' or list of 'release notes' for the ELM327?
No, not a list of every change and fix. We do provide a list of the AT Commands and Programmable Parameters for each version, though (see the next question), and we provide the following outline:
v1.0
- - Supports:
- SAEJ1850 PWM and VPW,
- ISO 9141-2 (10.4 and 9.6 kbps),
- ISO 14230-4 (10.4 and 9.6 kbps)
- as well as ISO 15765-4 CAN (250 and 500 kbps)
- - RS232 baud rates are only 9.6 or 38.4 kbps
v1.0a
- - J1850 VPW timing adjustment for some '99 - '00 GM trucks.
v1.1
- - Introduced Programmable Parameters
- - Added Flow Control commands
v1.2
- - RS232 baud rates are adjustable to 500 kbps
- - Programmable Parameters can be reset with a jumper
- - Introduced Adaptive Timing
- - Added SAE J1939 support (protocol A)
- - Added user defined CAN protocols B and C
- - Modified KWP protocols to allow four byte headers
v1.2a
- - Changed error detection to catch KWP 4 byte headers if no data or checksum
- - Added check to prevent CAN mask corruption on certain Flow Control sends
v1.3
- - Adaptive Timing tuned a little differently
- - Several J1939 improvements
- - New CAN CRA commands to help setting masks and filters
- - New CAN D0/D1 commands for printing of message dlc
- - New CAN RTR command for sending same
- - Added space character control in responses
- - New STOPPED message for user interrupts during searches
- - Introduced LV RESET message for resets from low voltage
- - New @2 and @3 commands for storing of unique identifier
- - Added ability to state the number of responses desired
v1.3a (still available)
- - Added wiring checks for when the J1962 CAN pins are used for other functions
v1.4
- - Added Low Power mode ('sleep' function)
- - Added extended addressing mode for CAN protocols
- - Added 4800 baud ISO 9141 and ISO 14230 support
- - Allow manual control over ISO 9141 and ISO 14230 initiation
- - Provided a single EEPROM byte for user data storage
- - All interrupts now say STOPPED (not just when searching)
- - Many new Programmable Parameters and additions
v1.4a
- There was none
v1.4b (still available)
- - New CSM command to have active or passive CAN monitoring
- - New CRA command to quickly reset changed masks and filters
- - Several SAE J1939 updates
v2.0
- - New Activity Monitor watches OBD pins
- - Wake from Low Power now retains settings
- - AT CRAs accept 'don't care's (X's)
- - New PP's provide extensive ISO/KWP control
- - Increased the RS232 Tx buffer to 512 bytes
- - Brownout reset voltage reduced to 2.8V
v2.1
- - Speed increases
- - Processes 'Response Pending' (7F xx 78) replies
- - CAN searches now measure frequency and require a match
Commands and Responses
What AT commands does each version of the ELM327 support?
The ELM327 has evolved over time. With each update, we have tried to add features that have been requested, and so with each update, the list has grown. The 'Version History' section of the latest data sheet lists the changes, but we also provide them here in a slightly different format.
Here is a table showing the AT commands:
- AT_Command_Table.pdf (PDF version, 57K)
and one with the Programmable Parameters:
- Prog_Parameters.pdf (PDF version, 47K)
How do I use the AT WS command with the ELM327?
The Warm Start command is used exactly like the 'AT Z' command that is used to reset our other ICs. It is considerably faster than the 'AT Z' command, as it bypasses the LED test sequence (it does refresh everything else, however).
I have heard that the 'AT SP 0' command is not recommended. Why?
There is nothing wrong with the 'AT SP 0' command, but there may be a better way to search for protocols if you are creating a software interface.
Telling the ELM327 to use protocol 0 is an easy way to enable automatic protocol searching, when you do not know what protocol to use. Although the ELM327 is very fast (and intelligent) in its searches, you don't want to go through a slow 5 baud initiation if you don't have to.
As a way to improve on the search speed, you might take advantage of the fact that many users will often be needing the same protocol that they used last. Why not try that last-used protocol first, and then allow searching if that protocol doesn't respond?
That is, rather than 'erasing' the last used protocol with an 'AT SP 0' at the start of your routine, first perform an 'AT DP' or 'AT DPN' to see if the ELM327 is set for automatic searching, should the memorized protocol fail to connect. If it is, then do not send an AT SP 0, as a failure to connect (with the last-used protocol) will result in an automatic search anyway. If the 'AT DP' or 'AT DPN' told you it was not in automatic search on fail mode, then still allow the ELM327 to try. Then if it fails to connect, use 'AT SP 0' and repeat the request again.
I have updated to the ELM327 v1.3a, and am suddenly seeing 'LV RESET's. What are these?
The ELM327 monitors the 5V supply for what is known as 'brown-out's, or low voltage conditions. If the voltage should drop below a minimum value, a low voltage reset is initiated to protect against possible random behaviour, and the IC will print the 'LV RESET' message. Prior to version 1.3, the ELM327 still responded to voltage brown-outs with a reset, but you would only see the startup message and not the more descriptive LV RESET message.
For more information, refer to the AN03 - ELM327 Low Voltage Resets Application Note.
Why do I occasionally get BUS ERRORs with the ELM327?
Some of the OBD standards allow for a special pulse to force a 'break' in activity (essentially a reset). While our previous OBD ICs tolerated excessively long pulses, the ELM327 actually measures the length and reports if one is found to be too long. For example, the J1850 VPW standard says that the pulse should be less that 5msec long, but many vehicles produce pulses of several hundred milliseconds in length during an engine start. These long pulses will be reported as a BUS ERROR.
In general, these will not affect the operation of your interface, but it could possibly cause an initiation to be aborted if it occurs at the wrong time, or it could be displayed in the middle of a stream of data from a 'Monitor All' command. If this continues to be a problem for you, consider turning it off using Programmable Parameter #11.
Is there a way to know if a connection is still active?
Occasionally, designers ask if there is an internal state variable, or perhaps an output that we can enable to show if a connection to the ECU is valid or not. They want a more robust system, should a wire come loose, or the ignition be turned off during a session.
The short answer is no. We do not provide a signal such as this, but you can detect the condition yourself. Simply add a few checks in your code:
- - Note when you have made a connection to the ECU. All OBDII protocols must support the 01 00 request, so use that as your first query. If you get a valid response, carry on. If you do not, then maybe you don't have an OBDII system, and want to handle that in some way.
- - Make your queries as you normally would.
- - Look for responses of 'NO DATA' to one of your requests. If you receive a 'NO DATA' and are sure that the ECU should have responded to this request (ie it was responding previously), then there could be two reasons for it. The first is that the ECU may simply have been too busy, and requires more time to answer. The second is that the 'connection' may have been lost.
- At this point, we would advise sending the request again. If you still get a 'NO DATA' response, then send an 01 00 request (you know it worked before, so it should now). If that fails, try it one more time with the timeout set at the maximum (AT ST FF). If there is still no response, then you have lost your connection.
If a connection is lost, you will need to tell the ELM327 to 'close' the current connection, with a Protocol Close command (AT PC). This will ensure that the ELM327 starts from the beginning when the next request is made. This is particularly important for the ISO 9141 and ISO 14230 protocols, as they need a special initiation sequence.
Once the protocol has been closed, it can be re-opened by making a request (do not send ATZ or AT SP0, as many do).
Protocols
How do I use the ELM327 with SAE J1939 CAN? It keeps saying UNABLE TO CONNECT!
The J1939 protocol is not normally part of the automatic search group, unless you have changed the value of PP 07. If you are experimenting, the best way to enable protocol A is to use the Set Protocol command (ie AT SP A). When you are finished, simply restore normal OBD operation with an AT SP 0. Note that J1939 is only available with version 1.2 or newer ICs.
I know that my vehicle uses the ISO 9141 (or ISO 14230) protocol, but the ELM327 always says UNABLE TO CONNECT. What I can do?
We've found that the data signal from some vehicles is at a slightly lower voltage than others. The signal isn't always seen by the ELM327, making many responses appear as errors. To boost the signal slightly, we recommend that you try changing resistor R21 to 33K ohms, if you are currently using 22K ohms:
I know that my vehicle uses the ISO 9141-2 protocol, I've changed R21, but the ELM327 still says UNABLE TO CONNECT. Is there something else that I can do?
There may be. Some ISO 9141 vehicles become confused if they see an attempt at a fast initialization, and then a slow initialization too quickly afterwards. This happens with very few vehicles, but yours might be one of them.
You can add a little delay between the protocol attempts by increasing the value of PP 18 or PP 19 (PP19 is only available on v1.4 or newer ICs). Some experimentation may be required but you are adding delay, so will not do any harm.
From a terminal program, you might try the following commands:
>AT PP 18 SV F4
OK
>AT PP 18 ON
OK
A value of F4 provides a delay of about 1 second on many versions of the ELM327. When we updated the firmware to v2.1, we changed the multiplier to provide longer times for the really difficult cases.
You will only have perform the above steps one time, as it changes the EEPROM settings internally (and they keep their values, even if the power goes off).
Is it possible to use the ELM327 with CAN that is not OBDII?
Yes. The ELM327 is able to be configured for many different types of CAN protocols, with baud rates from 8 to 500 kbps. The CAN physical interface is common across all implementations, so connecting to the data bus should not be a problem if you have used the recommended circuit in the data sheet. (That circuit does not use a terminating resistor, which could cause problems if your network already had two.)
Protocols B and C are already set for default rates of 125Kbps and 50Kbps, respectively, but may be changed easily. This means that If you wish to experiment with a 125Kbps system, you may only need to issue the command AT SP B, and the ELM327 could be all set for you. By default, protocol B will transmit 11 bit IDs and receive both 11 and 29 bit IDs, but you may want to adjust this with PP 2C.
Changing baud rates for protocols B and C requires writing to the Programmable Parameter memory, which is a two step process, requiring that the value be written, and then that the value be enabled. For example, to change protocol C to 83.3Kbps would require the following steps:
>at pp 2f sv 06
OK
>at pp 2f on
OK
From that point on, you could simply use AT SP C, whenever you wanted to connect to an 83.3Kbps CAN system. You need only do the above steps once, as Programmable Parameters are stored in EEPROM (which retains values even with power off).
Other bits
Does the ELM327 support 1-wire CAN?
Not officially, but several people are experimenting with it. Sites such as 'GMLAN HACKER' offer a great deal of advice. Also, search the web for topics such as single wire CAN, 1-wire CAN, SAE J2411, GMLAN or GMW3089.
Does the ELM327 support J2534 Pass-Thru Programming?
No, the ELM327 is only for obtaining information from vehicles and does not support any type of ECU programming.
Are you planning to introduce a USB version of the ELM327 IC?
No. There is a large demand for USB, but there is also a large demand for direct connections to microprocessors, or Bluetooth interfaces, or WiFi interfaces, and also in serial to ethernet connections. RS232 remains a common protocol for all of these, not USB.
Have you tried a USB to RS232 cable, such as the Keyspan model USA-19HS? We find it quite good, and it's usable to 230K baud.
Have you perhaps considered permanently wiring an RS232 to USB converter IC into your circuit? Devices such as the FT232BM by FTDI have a good reputation for applications such as this.
Two other chips that look quite interesting are the CP2102 and the CP2103 from Silicon Laboratories (look under Microcontrollers). These do not require an external crystal, and they even have an internal EEPROM for customizing the interface. See the latest ELM327 datasheet for an example circuit showing how to connect a CP2102 to an ELM327 IC (see Figure 11).
If you are interested in using a Bluetooth interface, have a look at our 'AN04 - ELM327 and Bluetooth' Application Note.
Some OBD Projects
This is where we post information and urls for some of our users sites, so that you can see what others are doing with our OBD products.
Circuit Boards - have you been thinking about making your own?
... Dennis Shutt has, and he's willing to share his work with you. He's created layouts for each of our OBD chips and has saved them in Cadsoft Eagle file format. Anyone that has tried to lay out a board while keeping things tight (and not using too many jumpers) will appreciate his efforts.
Click here to download the latest version of his work (it's a 64K zip file).
Dennis also created a data logger app, originally using Visual Basic, and then in C++. Switching to C means he could make it self contained, and pretty small (it was only 48K), so who knows, maybe it'll even run on a handheld. Here's a small picture of his main screen.
Dennis seems to have dropped support for this lately, but you may still be able to show your appreciation for his circuit board layouts, or would like to provide feedback, by writing him at dennisc99@mchsi.com
Jon GrosJean has been working on some boards too.
He's produced a good looking surface mount board that he's willing to share. Here's a complete package (Gerber files, etc.) that you can download: Click here to download the package (172K zip file).
If you're just curious as to what it looks like, here's a pdf of the board layout: Click here to download the pdf (64K)
Jon says that if you have questions (or praise), he can be reached at: jgrosjean@ieee.org
J1587 Scanner
'Palm Springs Jim' has built a J1587 to Bluetooth interface using our ELM325 J1708 (and J1587) Interpreter chip. His 'J1587 Scanner for Motor Home' blog shares all of the details, and also provides the source code for a Java app that displays the data. A complete project that is certainly worth a look.
LabVIEW Users
... will appreciate the work that Dan Beaven has done. In his words, ELMULATOR is software written in Labwindows/CVI that emulates the base functionality of the ELM OBD-II communications boards formerly made by ScanTool.net. This software is a beta version and no guarantees are made as to its stability. You will need the Labwindows Run Time Engine, available from National Instruments to run it.
Dan offers his software as a free download, as long as it's for non-profit use. Click here to download the zip file (60K).
J1587 Scanner
'Palm Springs Jim' has built a J1587 to Bluetooth interface using our ELM325 J1708 (and J1587) Interpreter chip. His 'J1587 Scanner for Motor Home' blog shares all of the details, and also provides the source code for a Java app that displays the data. A complete project that is certainly worth a look.
Mark Neugebauer
...has been looking into protection for our automotive circuits from ESD, polarity reversals, etc. He has taken our basic 'Example Application' circuit for the ELM323 and added protection for almost anything that could be experienced in a harsh automotive environment. You will find that he has been quite thorough - perhaps you would like to add some of his ideas to your circuit, (not just an ELM323 circuit). For the curious, Mark notes that On Semiconductor's AN843 proved an excellent resource.
Mark has also offered to share some of his designs, provided that you use them for your own personal use and not for profit. If you wish to use them in a commercial project, you can deal directly with Mark. Click the following links to download his latest (v7) schematic, his circuit board top or bottom trace patterns, or the parts placement diagram. For those wondering just how to lay out a board, Mark has even provided a picture of his.
NMEA 2000 Project
We've had a number of people ask if our ELM327 or ELM329 integrated circuits are suitable for use with NMEA 2000 (or N2k) interfaces. They most certainly are, as Owen shows you with his interface. It's described quite well on this web page:
It uses a Bluetooth interface (HC-06) to allow connection to a number of handheld devices. The schematic for what he's done is also included, or may be downloaded here:
OBD for EPOC
Mark Neugebauer has another package to offer for some of the handheld users out there. In his words, he has created some "very simple but efficient OBD software for EPOC handhelds like the Psion Series5 or Osaris". He says that other devices (such as the Nokia Communicator) also run on EPOC, so some people may even be able to talk to their car by telephone!
Mark has put all you need in this 168K zip file. <-click to download
The zip archive contains:
- a screenshot from the EPOC-emulator
- the source code and exec for the OBD software
- the source code and exec for the ELM323 simulator for EPOC
There may be a little work involved to interface your ELM hardware to the Psion/Osaris, but if you've already made your own OBD interface, this shouldn't be a problem.
Mark has done a lot of work here - if you're appreciative, be sure to tell him so.
OBD GPS Logger
Gary Briggs offers some very capable software that is able to save both OBD and GPS data for later viewing (as well as playback through OBDSim). This allows for 3D plots such as the photo at the right (plotted by Google). The software runs on Mac OSX, Linux, and Windows (through cygwin).
There are more examples, and a complete description at Gary's OBD GPS Logger site.
OBD Logger
Jonathan Senkerik has posted some very interesting logger software that he originally developed for the ELM322, but he now reports that it works quite well with the ELM320 and ELM323 circuits too. He's got versions to run under Windows or Perl that would be of interest to many users. Be sure to visit Jon's site for a free download (and of course, if you use his work, drop him a line to show your appreciation).
OBDSim
Looking for an ELM327 simulator? Gary Briggs has created one that supports many of the AT commands, and is also able to generate data based on log files. It's even smart enough to interpolate data in order to provide 'continuous' readings.
There are a number of other features, too. For example, it can be enhanced with plugins, and it can make data from other (non OBDII) systems appear to be OBDII. This last capability could allow ELM327 software to work with older OBDI vehicles, through OBDSim.
Be sure to visit Gary's OBDSim web site for all the information, and a download.
Palm Users
... will appreciate what Dana Peters has done. He's made a slick little program that logs many of your vehicle parameters as you drive. Can read and reset trouble codes, too. Best of all, it's a free download from Dana's web site: http://qcontinuum.org/obdgauge/ It's fun to watch the little green bars scroll across the screen (and stomp on the gas trying to make the 'Calculated load value' run off-screen), but please - keep your eyes on the road!
wOBD Software
The people at obd2crazy.com have been busy building software for our OBD ICs as well. They tell us that their latest beta release (free download) has some very useful features, including configurable polling, logging (with data export), and DTC reading and resetting. Apparently it can also read sequential blocks of data, and has a debugging mode which allows users to type commands, and see results directly. Don't just visit their site (http://www.obd2crazy.com/) for the software though, as there is also a lot of good OBD info there too.