--> DBC File Explained: Signals, Multiplexing & Examples
// blog

DBC File Explained: Signals, Multiplexing & Examples

What a DBC file is, how signals and multiplexing work, and how tools use DBCs to decode CAN messages - with example snippets.

Updated 14 Aug, 2025 ← All posts
DBC File Explained: Signals, Multiplexing & Examples

Need a simple, practical intro to DBC files?

DBC files are used to decode raw CAN bus data. They define which CAN ID contains which signals, where each signal is located in the payload, and how the raw bytes should be converted into physical values such as speed, RPM, temperature, pressure or status.

A DBC file is used to describe CAN messages and signals.

It works like a translation layer between raw CAN frames and values that people can actually use.

Without a DBC file, a CAN frame is mostly just an identifier and a payload of bytes.

With a DBC file, those bytes can be decoded into real values such as vehicle speed, engine RPM, battery temperature, hydraulic pressure, switch states or diagnostic flags.

This article explains what a DBC file is, how the structure works, why it matters in CAN projects and how DBC files can be imported and used in AutoPi Cloud.

What is a DBC File?

A DBC file, or DataBase Container file, is a CAN database format used to define CAN messages and signals.

The format is commonly associated with Vector Informatik GmbH and is widely used in automotive and embedded CAN projects.

In practical terms, a DBC file tells the decoder how to turn raw CAN data into readable values.

When we talk about raw CAN bus data, we are talking about frames made of identifiers and payload bytes.

That data can contain useful information, but it is not obvious by just looking at the raw values.

A frame may include vehicle speed, engine RPM, battery state, sensor status, torque demand or fault information.

But without the signal definition, it is just bytes.

A DBC file describes how those bytes should be interpreted.

It defines the message ID, signal name, start bit, length, byte order, signed or unsigned format, scaling, offset, unit and valid range.

This is what makes the raw CAN data useful for dashboards, logs, diagnostics and backend integrations.

Keep reading if you want to know how to import DBC files into AutoPi Cloud.

Diagram showing a car connected to AutoPi device and DBC file for data analysis.

A simple example is vehicle speed.

The CAN frame may contain a value like 0x1A90.

The DBC file explains which bits belong to the speed signal, whether the value is little-endian or big-endian and how the value should be scaled.

After decoding, the result can become a physical value such as 67.4 km/h.

This is why DBC files are important in CAN data logging.

They turn bus traffic into useful information.

For AutoPi projects, a DBC file can be used to decode CAN traffic from vehicles, machines and equipment before the data is shown in dashboards or sent to another system.

AutoPi TMU CM4
Use DBC files with AutoPi

Import DBC files, decode CAN signals and use the data in dashboards, logs and integrations.

The DBC Structure

A DBC file has a few important parts.

The most important parts are messages, signals, scaling, units, value tables and optional comments.

When you understand these parts, reading a DBC file becomes much more simple.

  1. DBC message: A CAN message definition. It includes the message ID, message name, payload length and sender. It normally contains one or more signals.

    BO_ 500 IO_DEBUG: 4 IO 
    SG_ IO_DEBUG_test_unsigned : 0|8@1+ (1,0) [0|0] "" DBG

  2. Signed signals: Used when a signal can have negative values. This can be needed for values such as steering angle, torque request or temperature.

    A signed signal can be defined by using a signed signal type and an offset where needed.

    BO_ 500 IO_DEBUG: 4 IO
    SG_ IO_DEBUG_test_unsigned : 0|8@1+ (1,0) [0|0] "" DBG
    SG_ IO_DEBUG_test_signed : 8|8@1- (1,-128) [0|0] "" DBG

  3. Fractional signals: Used when the raw value must be scaled to get the real physical value. This is common for speed, temperature, pressure and current.

    A fractional signal uses a factor and sometimes an offset to convert the raw value.

    BO_ 500 IO_DEBUG: 4 IO
    SG_ IO_DEBUG_test_unsigned : 0|8@1+ (1,0) [0|0] "" DBG
    SG_ IO_DEBUG_test_signed : 8|8@1- (1,-128) [0|0] "" DBG
    SG_ IO_DEBUG_test_float1 : 16|8@1+ (0.1,0) [0|0] "" DBG
    SG_ IO_DEBUG_test_float2 : 24|12@1+ (0.01,-20.48) [-20.48|20.47] "" DBG

  4. Enumeration types: Used when a numeric signal should be shown as a readable state. For example, 0 can mean off and 1 can mean on.

    Enumeration values make logs and dashboards easier to read.

    BO_ 500 IO_DEBUG: 4 IO
    SG_ IO_DEBUG_test_enum : 8|8@1+ (1,0) [0|0] "" DBG
    BA_ "FieldType" SG_ 500 IO_DEBUG_test_enum "IO_DEBUG_test_enum";
    VAL_ 500 IO_DEBUG_test_enum 2 "IO_DEBUG_test2_enum_two" 1 "IO_DEBUG_test2_enum_one" ;

  5. Multiplexed message: Used when the same message ID can contain different signal layouts. The mux value decides which signal group should be decoded.

    Multiplexing is useful when several related payload formats share the same CAN ID.

    BO_ 200 SENSOR_SONARS: 8 SENSOR
    SG_ SENSOR_SONARS_mux M : 0|4@1+ (1,0) [0|0] "" DRIVER,IO
    SG_ SENSOR_SONARS_err_count : 4|12@1+ (1,0) [0|0] "" DRIVER,IO
    SG_ SENSOR_SONARS_left m0 : 16|12@1+ (0.1,0) [0|0] "" DRIVER,IO
    SG_ SENSOR_SONARS_middle m0 : 28|12@1+ (0.1,0) [0|0] "" DRIVER,IO
    SG_ SENSOR_SONARS_right m0 : 40|12@1+ (0.1,0) [0|0] "" DRIVER,IO
    SG_ SENSOR_SONARS_rear m0 : 52|12@1+ (0.1,0) [0|0] "" DRIVER,IO
    SG_ SENSOR_SONARS_no_filt_left m1 : 16|12@1+ (0.1,0) [0|0] "" DBG
    SG_ SENSOR_SONARS_no_filt_middle m1 : 28|12@1+ (0.1,0) [0|0] "" DBG
    SG_ SENSOR_SONARS_no_filt_right m1 : 40|12@1+ (0.1,0) [0|0] "" DBG
    SG_ SENSOR_SONARS_no_filt_rear m1 : 52|12@1+ (0.1,0) [0|0] "" DBG

Here is a DBC file example:

VERSION ""

NS_ :
BA_
BA_DEF_
BA_DEF_DEF_
BA_DEF_DEF_REL_
BA_DEF_REL_
BA_DEF_SGTYPE_
BA_REL_
BA_SGTYPE_
BO_TX_BU_
BU_BO_REL_
BU_EV_REL_
BU_SG_REL_
CAT_
CAT_DEF_
CM_
ENVVAR_DATA_
EV_DATA_
FILTER
NS_DESC_
SGTYPE_
SGTYPE_VAL_
SG_MUL_VAL_
SIGTYPE_VALTYPE_
SIG_GROUP_
SIG_TYPE_REF_
SIG_VALTYPE_
VAL_
VAL_TABLE_

BS_:

BU_: DBG DRIVER IO MOTOR SENSOR

BO_ 100 DRIVER_HEARTBEAT: 1 DRIVER
SG_ DRIVER_HEARTBEAT_cmd : 0|8@1+ (1,0) [0|0] "" SENSOR,MOTOR

BO_ 500 IO_DEBUG: 4 IO
SG_ IO_DEBUG_test_unsigned : 0|8@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_test_enum : 8|8@1+ (1,0) [0|0] "" DBG
SG_ IO_DEBUG_test_signed : 16|8@1- (1,0) [0|0] "" DBG
SG_ IO_DEBUG_test_float : 24|8@1+ (0.5,0) [0|0] "" DBG

BO_ 101 MOTOR_CMD: 1 DRIVER
SG_ MOTOR_CMD_steer : 0|4@1- (1,-5) [-5|5] "" MOTOR
SG_ MOTOR_CMD_drive : 4|4@1+ (1,0) [0|9] "" MOTOR

BO_ 400 MOTOR_STATUS: 3 MOTOR
SG_ MOTOR_STATUS_wheel_error : 0|1@1+ (1,0) [0|0] "" DRIVER,IO
SG_ MOTOR_STATUS_speed_kph : 8|16@1+ (0.001,0) [0|0] "kph" DRIVER,IO

BO_ 200 SENSOR_SONARS: 8 SENSOR
SG_ SENSOR_SONARS_mux M : 0|4@1+ (1,0) [0|0] "" DRIVER,IO
SG_ SENSOR_SONARS_err_count : 4|12@1+ (1,0) [0|0] "" DRIVER,IO
SG_ SENSOR_SONARS_left m0 : 16|12@1+ (0.1,0) [0|0] "" DRIVER,IO
SG_ SENSOR_SONARS_middle m0 : 28|12@1+ (0.1,0) [0|0] "" DRIVER,IO
SG_ SENSOR_SONARS_right m0 : 40|12@1+ (0.1,0) [0|0] "" DRIVER,IO
SG_ SENSOR_SONARS_rear m0 : 52|12@1+ (0.1,0) [0|0] "" DRIVER,IO
SG_ SENSOR_SONARS_no_filt_left m1 : 16|12@1+ (0.1,0) [0|0] "" DBG
SG_ SENSOR_SONARS_no_filt_middle m1 : 28|12@1+ (0.1,0) [0|0] "" DBG
SG_ SENSOR_SONARS_no_filt_right m1 : 40|12@1+ (0.1,0) [0|0] "" DBG
SG_ SENSOR_SONARS_no_filt_rear m1 : 52|12@1+ (0.1,0) [0|0] "" DBG

CM_ BU_ DRIVER "The driver controller driving the car";
CM_ BU_ MOTOR "The motor controller of the car";
CM_ BU_ SENSOR "The sensor controller of the car";
CM_ BO_ 100 "Sync message used to synchronize the controllers";

BA_DEF_ "BusType" STRING ;
BA_DEF_ BO_ "GenMsgCycleTime" INT 0 0;
BA_DEF_ SG_ "FieldType" STRING ;

BA_DEF_DEF_ "BusType" "CAN";
BA_DEF_DEF_ "FieldType" "";
BA_DEF_DEF_ "GenMsgCycleTime" 0;

BA_ "GenMsgCycleTime" BO_ 100 1000;
BA_ "GenMsgCycleTime" BO_ 500 100;
BA_ "GenMsgCycleTime" BO_ 101 100;
BA_ "GenMsgCycleTime" BO_ 400 100;
BA_ "GenMsgCycleTime" BO_ 200 100;
BA_ "FieldType" SG_ 100 DRIVER_HEARTBEAT_cmd "DRIVER_HEARTBEAT_cmd";
BA_ "FieldType" SG_ 500 IO_DEBUG_test_enum "IO_DEBUG_test_enum";

VAL_ 100 DRIVER_HEARTBEAT_cmd 2 "DRIVER_HEARTBEAT_cmd_REBOOT" 1 "DRIVER_HEARTBEAT_cmd_SYNC" 0
"DRIVER_HEARTBEAT_cmd_NOOP" ;
VAL_ 500 IO_DEBUG_test_enum 2 "IO_DEBUG_test2_enum_two" 1 "IO_DEBUG_test2_enum_one" ;

The description field in DBC files

In DBC files, most attention is normally on signal definitions, scaling and attributes.

But the description field is also useful.

It gives space to document what a signal is used for, where it comes from and how it should be understood.

This is important when several engineers, customers or systems work with the same DBC file.

A good description can reduce confusion and make the DBC easier to maintain.

It can explain the signal purpose, expected range, operating condition or special notes that are not clear from the raw scaling alone.

A segment of a DBC file with a description field can look like this:

VERSION "1.0"

NS_:
  NS_DESC_
  NS_SIG_
  NS_VAL_

BS_:

BU_: ECU1 ECU2

BO_ 1 Message_1: 8 ECU1
 SG_ Signal_1 : 0|8@1+ (1,0) [0|255] "" ECU2
 SG_ Signal_2 : 8|8@1+ (1,0) [0|255] "" ECU2

 CM_ SG_ 1 Signal_1 "This signal is used for temperature reading in Fahrenheit."
 CM_ SG_ 1 Signal_2 "This signal represents the fuel level as a percentage."

VAL_ 1 Signal_1 0 "Low" 255 "High";
VAL_ 1 Signal_2 0 "Empty" 100 "Full";
AutoPi TMU CM4
Decode vehicle CAN data

Use DBC files to turn CAN frames into values that can be logged, shown and used in your project.

Why DBCs matter in real projects

DBC files are important because they connect raw CAN traffic with useful engineering data.

In many projects, the problem is not only collecting CAN frames.

The real problem is understanding what the frames mean and using the data in a system.

Common use cases include:

  • Vehicle diagnostics: DBC files help technicians and engineers decode CAN data faster and use it for troubleshooting.
  • Fleet management and J1939: J1939 DBC data can be used for heavy-duty fleet signals such as engine speed, fuel rate, engine hours and fault information.
  • Performance tuning with OBD2 data: DBC files can help decode vehicle values used for testing, calibration and performance analysis.
  • Predictive maintenance: Decoded CAN signals can show trends that help plan service before a fault becomes downtime.
  • Safety and ADAS: DBC definitions can help interpret sensor and controller data from safety-related systems.
  • Agriculture and industrial automation: DBC files are also useful in machines and industrial systems where CAN is used outside passenger cars.

In short, DBC files make CAN data easier to use.

They are a practical part of diagnostics, logging, development, fleet management and machine monitoring.

DBC File Guide Video

Step-by-step guide to importing DBC files

AutoPi Cloud can import DBC files so decoded CAN signals can be used in the platform.

The flow below shows the basic process.

  1. Start the process: Register or log in to the AutoPi demo environment.
a screenshot of the autopi demo login page
  1. Open the OBD Library: After login, go to the fleet management overview. In the left sidebar, under Device Management, select OBD Library.
a screenshot of the autopi demo fleet management overview page
  1. Click import: In the OBD Library, click the Import button to start the file import process.
a screenshot of the autopi obd library page
  1. Select import file: In the pop-up window, choose Import File.
a screenshot of the autopi dbc file import
  1. Choose the DBC file: Browse your computer and select the DBC file you want to import.
a screenshot of the autopi demo choosing dbc file
  1. Upload the file: After selecting the file, click Upload and wait until the file is imported.
a screenshot of the autopi demo uploading dbc file
  1. Check the imported DBC file: After import, the DBC file is available in AutoPi Cloud. You can view the file and edit CAN message definitions where needed.
a screenshot of the autopi demo imported dbc file
a screenshot of the autopi demo editing dbc file

For more details about managing DBC files in AutoPi Cloud, see the Car Explorer Library documentation.

This is useful when DBC files are part of a fleet management, CAN logging or vehicle data project.

Concluding thoughts

DBC files are one of the most useful parts of a CAN data workflow.

They bridge the gap between raw CAN frames and readable vehicle or machine data.

A good DBC file makes it possible to decode signals, build dashboards, generate reports, detect problems and send useful values to other systems.

For simple testing, a DBC file can help an engineer understand what is happening on the bus.

For fleet and industrial projects, it can become part of the full data pipeline from vehicle to cloud.

With AutoPi Cloud and AutoPi devices, DBC files can be used to decode CAN data and make it available for diagnostics, monitoring, development and integrations.

The AutoPi System

Decode CAN frames with AutoPi

Use DBC files to turn raw CAN data into useful signals
Hardware

Ready to ship. Start logging today.

All devices ship with AutoPi Cloud included - no subscription fee. Choose the platform that fits your protocol requirements and deployment scale.

Image of AutoPi Devices
CAN-FD Pro In stock · ships tomorrow

Dual CAN-FD data logger

High-throughput raw frame capture on two independent CAN-FD channels. On-device DBC decoding, ASAM MDF4 output, J1939 native support and hardware-encrypted data signing - all on a Raspberry Pi CM4.

2× CAN-FD · >3,000 fps/channel · 5 Mbps
4 GB LPDDR4 · 32 GB eMMC + USB expansion
NXP SE051 · Tailscale SSH · Docker · S3 sync
12–35 V DC · J1939 · OBD-II · 4G/LTE + GPS
€599  |  2× CAN-FD  |  ~4,000 sps  |  4 GB RAM
Mini In stock · ships tomorrow

Fleet telematics & OBD-II

Plug-and-play OBD-II and EV parameter logging at fleet scale. GPS tracking, wide OEM parameter support and built-in 4G/LTE - no external hardware or configuration needed.

OBD-II / K-Line · EV parameters · GPS tracking
4G/LTE Cat 1 · BLE · internal antennas
−40°C to +85°C · CE/UKCA/E-Mark/RoHS
10–30 V DC · compact · fleet-ready out of box
€129  |  OBD-II / K-Line  |  4G/LTE Cat 1
TMU CM4 In stock · ships tomorrow

Edge compute platform

Raspberry Pi CM4-based telematics unit for custom software stacks. Run Docker containers, Python services and CAN-FD logging on the same device - managed remotely via AutoPi Cloud.

BCM2711 CM4 · 1 GB LPDDR4 · 8 GB eMMC
2× CAN-FD · Docker · Python · SocketCAN
NXP SE051 · Tailscale · WiFi · BT 5.0 · GPS
12–35 V DC · 4G/LTE Cat 4 · IP67 option
€235  |  2× CAN-FD  |  100 sps  |  CM4
// related

More posts you'll like

View all →
Build a Raspberry Pi Touchscreen Car Computer (Step-by-Step)
Raspberry Pi DIY

Build a Raspberry Pi Touchscreen Car Computer (Step-by-Step)

Assemble a Pi-based carputer with touchscreen, power, mounting and software setup. Parts list, wiring tips and configuration for a reliable in-car sys ...

J1939 Explained (2025): PGNs, SPNs & Heavy-Duty Diagnostics
Guides

J1939 Explained (2025): PGNs, SPNs & Heavy-Duty Diagnostics

Learn J1939 basics‚ PGNs, SPNs, addressing and tools for heavy-duty trucks and machinery. Examples and troubleshooting tips included.

CAN Bus Explained (2025): Frames, Arbitration & Tools
Guides

CAN Bus Explained (2025): Frames, Arbitration & Tools

Understand identifiers, arbitration, error handling and analyzers used in automotive systems. Practical examples and diagrams.

// contact

Still have questions?

Get in touch with us - we're ready to answer any and all questions.

// send a message
We'll get back to you shortly

* Mandatory fields

Contact our engineers ↑