CANedge MF4 decoders overview

The MF4 decoders, take a set of input-files[1] (containing encoded records), a set of DBC database-files (containing decoding rules), and produce a set of output-files (containing decoded signals).

Additional information common for all decoders can be found here:

The specific decoders can be found in the menu to the left.

Command line interface

All MF4 decoders are designed as command-line-interface (CLI) tools. Each decoder can output a list of supported arguments by supplying the --help argument. Below is an example of a help text.

--help                                   display this help and exit
-v, --version                            display tool version and exit
--verbosity=<n>                          verbosity of logging messages
--non-interactive                        does not print any progress output
-d, --delete-converted                   deletes files after conversion if specified
-X, --no-append-root                     do not add "_out" when converting folders
-b, --buffer=<n>                         buffer size in bytes. 0 disables and -1 takes entire file
-p, --password-file=<file>               where to find device passwords for encrypted files
--concat                                 concatenate output when possible (default)
--no-concat                              do not concatenate output
--pgn-src-merge                          merge PGN source addresses
--no-pgn-src-merge                       do not merge PGN source addresses (default)
--pgn-dst-merge                          merge PGN destination addresses (default)
--no-pgn-dst-merge                       do not merge PGN destination addresses
--dbdump                                 dump DBs as json (in working dir)
--no-dbdump                              do not dump DBs as json (default)
--dbc-can1=<file>                        path to DBC file (CAN CHN 1)
--dbc-can2=<file>                        path to DBC file (CAN CHN 2)
--dbc-can9=<file>                        path to DBC file (CAN CHN 9)
--dbc-lin1=<file>                        path to DBC file (LIN CHN 1)
--dbc-lin2=<file>                        path to DBC file (LIN CHN 2)
-O, --output-directory=<file>            where to place the converted files
-i, --input-files=<file(s)/folder(s)>    list of input files/folders, must have common root


The --dbc-* input arguments can be repeated to assign multiple DBC-files to one interface/channel. When multiple DBC-files are assigned to the same interface/channel, it is the responsibility of the user to avoid ID-collisions.

J1939 PGN behavior

Bus IDs using (J1939) PGN format, contain node-source and (potentially) node-destination addresses. The decoders can be configured how to handle these addresses using below input arguments:

  • PGN source address:
    • --pgn-src-merge: All source addresses are merged to generate one output

    • --no-pgn-src-merge: Each source-address generates a separate output

  • PGN destination address:
    • --pgn-dst-merge: All destination addresses are merged to generate one output

    • --no-pgn-dst-merge: Each destination-address generates a separate output

Tips & tricks

Below follows a collection of tips and tricks on how to use the decoders.

Alternative way of providing DBC-files

If no DBC-file paths are provided via the --dbc-* input arguments, the decoder searches the working directory[2] for DBC-files matching the following pattern: ^(can|lin)[1-9]-(\S*)\.dbc$


  • CAN channel 1: can1-obd.dbc

  • CAN channel 2: can2-canmod-gnss.dbc

  • CAN channel 9: can9-internal.dbc

  • LIN channel 1: lin1-truck.dbc

  • CAN channel 1: can1-obd.dbc, can1-j1939.dbc (two DBC-files associated with CAN channel 1)

Alternative way of providing password-file

If no password-file path is provided via -p / --password-file input argument, the decoder searches the working directory[2] for a file named passwords.json.

For more information on the password file see Information on encrypted input-files.

Drag-and-drop (Windows only)

When dropping files/folders on an executable on Windows, the executable is executed with the full paths of the dropped elements appended as the final input arguments. The decoders take the input files (-i / --input-files) as the final argument(s). Organizing the input arguments this way enables support for drag-and-drop decoding of single file/folder or multiple files/folders using the default decoder settings.

When using drag-and-drop, DBC-files should be provided as explained here: Alternative way of providing DBC-files.

Dragging and dropping the input directory AABBCCDD onto the executable effectively executes the decoder with:

mdf2csv_decode.exe [FULL-PATH]/AABBCCDD

It is possible to use drag-and-drop with custom arguments. This can be done by creating a Windows shortcut to the executable and adding the custom arguments to the shortcut target. E.g. a shortcut can be created to always output files to a specific directory and to not append the _out prefix with:

"C:\decoder\mdf2csv_decode.exe" -X -O "C:\decoder\static_output_dir"

Reduce output-size

Specific messages or signals can be ignored in the output using the custom DBC-attributes described here:


If specific messages are irrelevant, consider applying filters directly on the CANedge device

Output concatenation

When the --concat option is enabled (default), the decoders attempt to concatenate output-files (as explained in detail here: Output concatenation). Concatenation of output-files can in some cases greatly reduce the number of output-files, which in turn can reduce post-processing time significantly.


When running the decoders for one input-file at a time, it becomes impossible to concatenate output-files. Consider re-running decoders on a full set of input files to optimize concatenation.

Database dump to json

The --dbdump input argument can be used to dump the internal interpretation of the loaded databases as json files. This can be useful for troubleshooting.

Limit on open files

The decoders potentially generate a large number of output files. During decoding, multiple files can be open at the same time. In extreme cases (with huge databases), the system limit of open file handles (for a specific process) can be reached - preventing the decoders from creating new files.

On Linux, the limit of allowed open files can be set with ulimit -n, e.g.:

Change max allowed open files from 1024 to 2048
$ ulimit -n
$ ulimit -n 2048
$ ulimit -n


If ulimit -n <value> returns Operation not permitted, then the requested new limit is too high