# Decode a CAN bus with your DBC

# Decode a CAN bus with your DBC

Read a live CAN bus or a `candump` log, and turn each frame into named
signals with units, using your `.dbc` file.

## Before you start

- Your `.dbc` file, on the machine running Phloem.
- For a live bus: a Linux machine on the bus, and its interface name, usually
  `can0`.
- For a recording: the `candump` log file.

## Steps

1. Open **Connectors**, search for `can`, and press **Install**.
2. Open **Inputs**, press **Add input**, and choose **can**.
3. Fill the fields:

   | Field | Example |
   |---|---|
   | **Source** | **candump log**, or **Live bus (SocketCAN)** (Linux only) |
   | **Log** | `/data/candump-2026-09-10.log` — for a log |
   | **Interface** | `can0` — for a live bus |
   | **DBC** | `/data/robot.dbc` |

   For a live CAN FD bus, tick **CAN FD**. For a log, **Speed** sets the
   replay pace (`0` reads as fast as possible) and **Loop** replays it
   continuously.
4. The **Signals** table lists every signal in your DBC, with how often each
   appeared. All are ticked. Untick the ones you don't want.
5. To keep frames the DBC does not name, tick **Keep raw frames**.
6. Press **Add & start**.

## Check it worked

On **Inputs**, the row counts samples. On **Live**, each signal shows as
`/can/<message>/<signal>`, named and scaled as your DBC says.

> **Tip:** Already recording raw frames on `/can/<id>`? Decode them later in
> a rule on **Pipelines**: add a **Parse DBC** step and press **Upload .dbc**.

- [Pipelines](https://phloem.ai/docs/inputs/pipelines/): Shape channels as they arrive
- [Name channels and units](https://phloem.ai/docs/inputs/channels/): Name a signal, set its unit
- [Verify that your data is arriving](https://phloem.ai/docs/guides/verify-data/): Read an input's row when nothing shows
