Can an ELM327 Read CAN Bus Data? Explained Simply 

Quick Answer

Yes, an ELM327 can read CAN bus data, but usually only the part the car offers through OBD2. A normal app asks for standard values such as RPM, speed and coolant temperature, and the car answers over CAN. Reading every raw CAN message is possible in a limited way, but it needs a terminal app, the right commands, and a car that exposes that traffic on the diagnostic port.

That short answer hides an important split. “CAN bus data” can mean the tidy answers a car gives when asked a standard OBD2 question, or the constant stream of messages modules send each other while the car runs. An ELM327 handles the first job well. The second is where its limits show.

What “Reading CAN Bus Data” Actually Means

CAN bus is the wiring and message system control modules use to talk to each other. The engine, transmission, ABS and body modules can share one network, sending short messages identified by a CAN ID. Each message carries up to eight bytes, and their meaning is defined by the carmaker, not by the OBD2 standard.

OBD2 sits on top of that network in many modern cars. When an app asks for RPM, it sends a standard request, usually Mode 01 PID 0C, and the engine controller answers. The ELM327 translates that request into CAN frames and the reply back into text. That is CAN bus data, but in a filtered, question-and-answer form.

Raw CAN data is the unfiltered traffic itself: messages sent many times per second whether anyone asks or not. Reading it means listening, not asking. A “yes” for one meaning does not guarantee a “yes” for the other.

Our guide to how CAN bus works with OBD2 explains the network side in more detail, including why the diagnostic port sees only part of what happens inside the car.

Yes, in the Normal OBD2 Way

 Phone app showing RPM and coolant temperature from an ELM327 over CAN bus

For most cars built after 2008 in the United States, CAN is the OBD2 protocol in use. It is formally ISO 15765-4, and it normally runs at 500 kbit/s with 11-bit IDs, although 29-bit IDs and 250 kbit/s variants also exist. The ELM327 supports those CAN variants, along with the older J1850, ISO 9141-2 and KWP2000 protocols, so it can switch to CAN when the car uses it.

Physically, CAN reaches the diagnostic port on pins 6 and 14, CAN High and CAN Low. When the adapter plugs in, the ELM327 and the car agree on the protocol, usually automatically. The app then sends standard PIDs, and the car answers with live values such as RPM, speed, coolant temperature, throttle position, fuel trims and fault codes.

That exchange is modest in speed. The CAN bus itself is fast, but the ELM327 adds serial and app overhead, so a typical setup polls a handful of PIDs per second. That is usually enough for a dashboard or a basic diagnosis, but values may update in turn rather than together when many are logged at once.

The protocol detail is covered in our guide to what ISO 15765 is in OBD2, which explains the 11-bit and 29-bit forms and the 250 and 500 kbit/s speeds.

Type of CAN data Can an ELM327 read it? What decides it
Standard OBD2 PIDs Yes, normally Car supports the PID; app asks for it
Emissions fault codes Yes, normally Mode 03; powertrain codes
Raw CAN frames Partly, with limits Monitor mode, filters, buffer size
Other modules and buses Often no Gateway, separate buses, security
Manufacturer-specific data Sometimes App database; custom PIDs; access rules

What About Raw CAN Traffic?

Yes, an ELM327 can listen to raw CAN traffic, but it is not a full CAN sniffer. The ELM327 datasheet from ELM Electronics documents monitor commands, including Monitor All, which puts the chip into a listening mode and prints the CAN messages it receives. In that mode the adapter stops answering standard PID requests and simply reports what passes on the bus.

For a quiet bus it can work. In practice, a busy car sends hundreds or thousands of frames per second, and the ELM327 has a small receive buffer and a slow serial link. When traffic outruns the buffer, messages are dropped and output becomes garbled.

Filters help. The ELM327 supports CAN ID filters and masks, so it can pass only messages from a chosen ID and ignore the rest. That turns a flood into a readable stream for one signal at a time, but the ID mapping is usually manufacturer-specific and undocumented. Clone adapters add another variable: many claim a later firmware version than they run, and some mishandle monitor and filter commands.

Tip

Start with standard PIDs before trying raw monitoring. If RPM, speed and coolant temperature already read correctly, the CAN link works. Raw listening is a next step for a specific unknown signal, not the first check.

How to Read CAN Data With an ELM327

nfographic of ELM327 AT commands ATZ ATE0 ATSP6 ATH1 ATMA for CAN data

For standard data, the process is the one most apps already handle. Plug the adapter into the OBD2 port, turn the ignition on, pair it, and open an app such as Torque or Car Scanner. The app sends the protocol setup, asks for the PIDs it needs, and displays the answers. No manual CAN command is needed.

For raw or custom CAN work, a terminal app gives more control. The usual sequence is: reset the adapter, turn echo off for cleaner output, set the CAN protocol, turn headers on so each reply shows its CAN ID, then send the request or enter monitor mode. In the ELM327 command set, ATZ resets, ATE0 turns echo off, ATSP6 selects ISO 15765-4 CAN at 500 kbit/s with 11-bit IDs, ATH1 turns headers on, and ATMA starts Monitor All. Sending any character normally stops monitoring.

A custom request uses the same idea without monitor mode. Set the header with ATSH, then send the mode and PID as hex, for example 010C for RPM. The reply arrives as hex and is converted with the standard PID formula.

How the adapter and the app divide that work is explained in our guide to how an ELM327 communicates with a car, which covers the serial side, the protocol choice and the request-and-reply pattern.

Before spending time on raw frames, check the adapter with our guide on how to test an ELM327 adapter: version reply, protocol detection, and a known PID such as RPM.

Warning

Do not send write, clear or test commands to a CAN ID you do not understand. Reading is low risk, but a wrong write can clear codes, trigger a warning, or change a module state. Stick to read-only requests until the ID and its effect are known.

Why Your App Shows Only Some Data

Seeing RPM but not transmission temperature, battery data or a body-module value does not usually mean the CAN bus is broken. It usually means that value is not offered through the standard OBD2 path the app is using.

First, many cars have more than one CAN bus, and the diagnostic port may connect to only one through a gateway. The gateway forwards standard OBD2 requests and blocks other traffic, so a signal on a separate comfort, chassis or hybrid bus may never reach the port.

Second, manufacturers define their own PIDs and message layouts. An app can only display a manufacturer-specific value if it knows the request, the reply format and the conversion formula. Some apps carry large custom-PID databases; others carry only the standard set.

Third, newer cars add security. A module may require a diagnostic session or authentication before it answers, and some messages are encrypted. An ELM327 can send the request, but the car can still refuse it.

Finally, the app matters as much as the hardware. Two apps using the same adapter can show different values because one asks for more PIDs or handles multi-frame replies better. The values an app can normally show are covered in our guide to what OBD2 live data can show.

ELM327 or a Dedicated CAN Tool?

ELM327 adapter and dedicated CAN tool on a workbench for comparison

Choose by the job, not by the label. For reading codes, checking live PIDs, watching fuel trims or confirming a repair, an ELM327 with a good app is enough, and it is cheap, portable and easy to use.

A dedicated CAN tool earns its place when the job is raw traffic: logging every frame, filtering by ID at full bus speed, or working across several buses at once. Those tools use a proper CAN controller and a fast link, with software built to capture streams without dropping messages. They cost more and need more setup, so they suit reverse-engineering or deep fault-finding rather than a quick check.

As a rule: if the question can be phrased as a standard PID or a fault code, use the ELM327. If the question is “what message carries this signal?”, a dedicated CAN interface will save time and missed frames.

Related Product

ELM327 OBD2 Scanner

A CAN-capable ELM327 adapter is the simplest way to start reading standard OBD2 data over CAN, including live PIDs and fault codes.

Check on Amazon

As an Amazon Associate, we earn from qualifying purchases.

Frequently Asked Questions

Can an ELM327 read all CAN bus messages?

No. It can listen with Monitor All, but its small buffer and slow serial link mean it drops messages on a busy bus. Filters narrow the stream to chosen IDs, but it is not a full-speed CAN capture.

Does an ELM327 need CAN to work?

No, it supports older protocols too, including J1850, ISO 9141-2 and KWP2000. CAN is the protocol most modern cars use for OBD2, so the adapter normally selects it automatically, but an older car may use a different protocol and still work.

Why does my ELM327 show NO DATA on a CAN car?

NO DATA usually means the car did not answer that request. Common causes are the ignition not being fully on, the wrong protocol, an unsupported PID, or a gateway blocking the request. Setting the protocol manually to ATSP6 and trying RPM helps separate a link problem from an unsupported PID.

Can I use an ELM327 to send CAN messages?

Yes, in a limited way. It can send a CAN frame by setting the header and sending the bytes, which is how custom PID requests work. It is not a reliable tool for high-speed or safety-critical sending, and a wrong write command can change a module state, so read-only use is the safer starting point.

Can an ELM327 read ABS or airbag data over CAN?

Usually not with a generic app. Those modules often need manufacturer-specific requests, a different diagnostic session, or access through a gateway the OBD2 port does not expose. The CAN link may be present, but the data is not offered through the standard path the app is using.

Is a cheap ELM327 clone good enough for CAN data?

Often yes for standard PIDs and codes, but clones vary. Some report a false firmware version or mishandle monitor and filter commands, which matters most for raw CAN work. For basic live data, a clone that passes the RPM check is usually usable.

Conclusion

An ELM327 can read CAN bus data, and for most owners that means standard OBD2 values delivered over CAN: RPM, speed, temperatures, fuel trims and fault codes. Raw listening is also possible, but it is limited by buffer size, serial speed and gateway filtering. Start with the standard data, and only move to raw monitoring for a specific signal. When the job needs every frame at full speed, use a dedicated CAN tool.