— Developer Tools

Free CAN DBC Viewer

Open a .dbc file to see every CAN message and signal, how each is scaled, and which bits it occupies.

— Samples
Messages 4Signals 10Nodes 3Valid
Live

What is a CAN DBC Viewer?

A DBC file describes the messages on a CAN bus: each identifier, the signals packed into its bytes, and how to turn raw bits into engineering values. This viewer reads one and lays it out so you can check it without CANalyzer or a paid tool.

It reads the parts of Vector’s DBC format that define data: version, nodes, messages, signals with multiplexing, comments, value tables and float signal types. Attribute definitions and other statements are counted and skipped, and the bit layout draws Intel and Motorola signals byte by byte.

Key Features

Every Message Listed

Identifier, length, sender, signal count and comment for each message, with 29-bit extended IDs marked.

Signal Details

Start bit, length, byte order, sign, scale, offset, range, unit, receivers and value tables.

Bit Layout

A grid per message showing which signal owns each payload bit, the quickest way to spot overlaps.

Multiplexing and Floats

Multiplexor and multiplexed signals are labelled, and SIG_VALTYPE_ float signals are recognised.

Stays on Your Computer

The database is parsed in your browser and never uploaded.

Perfect for everyone

  • Automotive and embedded engineers
  • CAN bus reverse engineers
  • Students learning vehicle networks

How to Use the CAN DBC Viewer

Open the database and switch between three views.

1

Open the DBC

Use Open .dbc file or paste the text. Files exported by CANdb++, Kvaser and cantools all work.

2

Read the Summary

Check the version, the nodes and the message list with identifiers and senders.

3

Inspect Signals

Signals shows how every signal is packed and scaled, with its value table.

4

Check the Layout

Bit layout shows each message as a grid, so gaps and overlaps stand out.

Worked Examples

DBC Snippets, Read

Each row is part of a DBC file and each answer is this viewer’s output in the mode on the chip. Work out the byte order before you reveal it.

REF_001Summary of a small database

“VERSION "1.4" BU_: ECU ABS BO_ 256 EngineData: 8 ECU SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8031.875] "rpm" ABS SG_ CoolantTemp : 16|8@1+ (1,-40) [-40|215] "degC" ABS”

REF_002Signals with a value table

“BO_ 256 EngineData: 8 ECU SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8031.875] "rpm" ABS SG_ CoolantTemp : 16|8@1+ (1,-40) [-40|215] "degC" ABS VAL_ 256 CoolantTemp 0 "Sensor fault" 255 "Not available" ;”

REF_003A Motorola signal

“BO_ 512 WheelSpeed: 8 ABS SG_ VehicleSpeed : 7|16@0+ (0.01,0) [0|655.35] "km/h" ECU”

REF_004Bit layout of a Motorola signal

“BO_ 512 WheelSpeed: 8 ABS SG_ VehicleSpeed : 7|16@0+ (0.01,0) [0|655.35] "km/h" ECU”

REF_005An extended 29-bit identifier

“BO_ 2566844926 Odometer: 8 BCM SG_ TotalDistance : 0|32@1+ (0.125,0) [0|526385151.875] "km" ECU”

REF_006Multiplexed signals

“BO_ 768 DoorStatus: 2 BCM SG_ Page M : 0|4@1+ (1,0) [0|15] "" ECU SG_ FrontLeftOpen m0 : 8|1@1+ (1,0) [0|1] "" ECU SG_ RearLeftOpen m1 : 8|1@1+ (1,0) [0|1] "" ECU”

REF_007A 32-bit float signal

“BO_ 1024 Battery: 8 BMS SG_ PackVoltage : 0|32@1- (1,0) [0|1000] "V" ECU SIG_VALTYPE_ 1024 PackVoltage : 1;”

REF_008A signal missing its range

“BO_ 256 EngineData: 8 ECU SG_ EngineSpeed : 0|16@1+ (0.125,0) "rpm" ABS”

REF_009A signal with no message

“ SG_ EngineSpeed : 0|16@1+ (0.125,0) [0|8031.875] "rpm" ABS”

REF_010No messages at all

“VERSION "1.4" BU_: ECU ABS”

DBC Syntax

The Lines in a DBC File

A DBC file is plain text made of keyword lines. These ten define the data this viewer reads.

01 / VERSION

VERSION

An optional version string at the top, often left empty by tools.

“Is VERSION required?”

02 / BU

BU_

The list of nodes, the ECUs that send and receive messages.

“What does BU_ list?”

03 / BO

BO_

A message: decimal identifier, name, length in bytes and sending node.

“Is the identifier decimal or hex?”

04 / EXTENDED

Extended IDs

A 29-bit identifier is written with bit 31 set, so 0x18FEF1FE appears as 2566844926.

“Which bit marks an extended ID?”

05 / SG

SG_

A signal: start bit, length, byte order, sign, (factor,offset), [min|max], unit and receivers.

“What does @1 mean?”

06 / BYTE

Byte Order

@1 is Intel (little-endian), @0 is Motorola (big-endian), whose start bit is the most significant.

“Which order starts at the MSB?”

07 / MULTIPLEXING

Multiplexing

M marks the multiplexor, and m0, m1 and so on mark signals present only for that value.

“What does m2 mean?”

08 / CM

CM_

A comment on the file, a node, a message or a signal, which may span lines.

“Can a comment span several lines?”

09 / VAL

VAL_

A value table naming raw values, such as 0 "Off" 1 "On".

“What does VAL_ map?”

10 / SIGVALTYPE

SIG_VALTYPE_

Marks a signal as IEEE float (1) or double (2) instead of an integer.

“What does value 2 mean?”

Intel Versus Motorola Byte Order

Byte order causes more DBC confusion than anything else. These points explain how each one counts bits, which is exactly what the Bit layout view draws.

Bit Numbering

Bits are numbered 0 to 63 across the payload: byte 0 holds bits 0 to 7, byte 1 holds 8 to 15, with bit 0 as each byte’s least significant bit.

Intel Signals

The start bit is the least significant bit, and the signal grows upward through higher bits and later bytes.

Motorola Signals

The start bit is the most significant bit. The signal runs down to bit 0 of that byte, then continues at bit 7 of the next byte.

The Sawtooth

Because of that jump, Motorola bit sequences look like a sawtooth: 7 down to 0, then 15 down to 8.

Other Conventions

Some tools number Motorola start bits by their least significant bit instead. Vector’s convention, used here, is the MSB.

Checking a Signal

If a decoded value looks byte-swapped, the byte order is almost always set the wrong way round in the DBC.

DBC Pitfalls

Common mistakes when writing or reading CAN databases.

Tip 01

Wrong Byte Order

A 16-bit value of 0x1A2C read as 0x2C1A is a byte-order mistake, not a scaling one.

Tip 02

Overlapping Signals

Two signals claiming the same bits corrupt each other. The layout grid shows overlaps immediately.

Tip 03

Signed Versus Unsigned

Temperatures and torques are often signed. Forgetting the minus sign turns -1 into 255 or 65535.

Tip 04

Offsets Applied Twice

Some tools apply the offset in the DBC and again in code. Decide where scaling happens once.

Tip 05

Extended ID Confusion

The same number with and without bit 31 is a different message. Check the extended flag.

Tip 06

Ranges That Lie

The [min|max] range is documentation only. Decoders don’t clamp values to it.

Tip 07

Hidden Attributes

Cycle times and send types live in BA_ attributes, which this viewer counts but doesn’t list.

Tools That Read and Write DBC Files

DBC is a Vector format, but the files move between many tools. These are the ones you are most likely to export from or load into after checking a database here.

Vector CANdb++

The original editor that ships with CANalyzer and CANoe. Most DBC files in the industry were written or last saved by it.

cantools

A Python library and command line that loads DBC, KCD and ARXML, decodes frames, and can generate C code for signal packing.

python-can

Reads and writes CAN logs from SocketCAN and USB adapters. Paired with cantools it decodes live traffic with a DBC.

SavvyCAN

An open source desktop tool for capturing, graphing and reverse engineering traffic, with DBC loading built in.

opendbc

A public collection of community DBC files for passenger cars, built for driver-assistance projects and useful as a reference.

Kvaser Database Editor

A free editor from Kvaser for creating and changing DBC files without a Vector licence.

Attributes the Viewer Skips

BA_DEF_ and BA_ lines attach extra properties to the database, nodes, messages and signals. The viewer counts them in the summary and leaves them out of the listing, so here is what the common ones mean when you open the file in a text editor.

Tip 01

GenMsgCycleTime

How often a periodic message is sent, in milliseconds. A value of 100 means the frame should appear ten times a second.

Tip 02

GenMsgSendType

Whether a message is cyclic, sent on change, or sent only when requested. Gateways and test benches read this to schedule traffic.

Tip 03

GenSigStartValue

The raw value a signal holds before its first real update, used by simulators that send the message before the ECU has data.

Tip 04

BusType

Marks the database as classic CAN or CAN FD. Tools use it to pick frame lengths and bit timing.

Tip 05

VFrameFormat

Says whether each message is a standard, extended or FD frame, which can override how the identifier is read.

Tip 06

ProtocolType

Set to J1939 in heavy-vehicle databases, where identifiers carry a PGN, priority and source address instead of a plain ID.

Tip 07

NmStationAddress

A node’s network management address, used by AUTOSAR and OSEK network management messages.

When to Open a DBC File

Whenever you need to know what a CAN database actually says.

Reviewing a Supplier Database

Check a DBC from a supplier for missing comments, overlaps and odd scaling before integrating it.

Writing Decoder Code

Read start bits, lengths and byte order exactly before writing firmware or a logger parser.

Reverse Engineering

Compare a community DBC against captured traffic to confirm which bits move.

Teaching CAN

Show students how signals pack into bytes and how factor and offset make physical values.

Diffing Versions

Open two versions side by side to see which messages and signals changed.

Frequently Asked Questions