Skip to the content
2 layers26 × 13.6 mmCFDC embedded, the printed circuit board in 3D

Embedded code and PCB for CAN FD to USB converter

Size
26 × 13.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
36
Nets
57
Pads
153
Tracks, vias
298, 20
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
27 May 2020
Updated
18 May 2026

Overview

CFDC embedded is an open-source printed circuit board by ucandevices, from the ucandevices/CFDC_embedded repository on GitHub, published under the LGPL-3.0 licence. It is a 2-layer board of 26 × 13.6 mm with 36 parts on 57 nets, routed with 298 tracks and 20 vias.

It is built around the USBLC6-2SC6 and PESD2CAN. Its parts include 11 capacitors, 4 ICs, 4 connectors, 2 resistors and 2 diodes. It belongs with the interfaces and adapters boards and the STM32 boards of this library.

Main components

2

README

README.md

USB CAN FD Converter (CFUC)

Buy on Tindie Buy on Lectronz Product page

Open source USB ↔ CAN FD bridge. ISO CAN FD and classic CAN to USB virtual COM port — no proprietary drivers on Windows, Linux or macOS. Python-can plugin included.

USB CAN FD Converter (CFUC) - dongle photo

The CAN FD USB Converter (CFUC) is a small open-source USB dongle built around an STM32G431 (CAN FD-capable MCU) and an MCP2542FD transceiver. It exposes both classic CAN (up to 1 Mbit/s) and ISO CAN FD (data phase up to 5 Mbit/s) to a PC over a USB CDC virtual COM port, and ships with a python-can plugin so it slots into existing CAN tooling out of the box.

This repo is the embedded firmware and hardware. For the host-side python-can plugin and example scripts see tools/.

A commercial CAN FD adapter typically costs hundreds of euros. This one is around $22 on Tindie.


Features

  • ISO CAN FD and classic CAN (selectable per channel)
  • Arbitration phase up to 1 Mbit/s, data phase up to 5 Mbit/s
  • USB CDC Virtual COM Port — no driver on Linux / macOS / Windows 10+
  • python-can plugin included under tools/
  • Two CAN FD firmware flavors:
    • Native uCAN firmware (this repo, firmware/)
    • gs_usb / budgetcan compatible firmware under gsusb_firmware/budgetcan_fw/ — enumerates as a standard gs_usb device on Linux (works directly with SocketCAN's gs_usb kernel driver)
  • USB DFU bootloader for in-field firmware updates
  • Open hardware (KiCad sources under pcb/)

Where to buy

WhereRegionLink
TindieWorldwidehttps://www.tindie.com/stores/lll7/
LectronzEUhttps://lectronz.com/stores/ucandevices
EltyPoland / EUhttps://elty.pl/
KamamiPoland / EUhttps://kamami.pl/

Quickstart

gs_usb firmware (recommended on Linux)

Flash the gsusb_firmware/budgetcan_fw/ build and the device appears as a native SocketCAN interface:

bash
sudo ip link set can0 up type can bitrate 500000 dbitrate 2000000 fd on
candump can0

Native firmware (python-can)

python
import can
bus = can.Bus(interface='cfuc', channel='/dev/ttyACM0', bitrate=500000)
for msg in bus:
    print(msg)

The python-can plugin lives in tools/ along with example scripts.


Repository layout

DirectoryContents
firmware/Native CFUC firmware for STM32G431 (CubeMX project CDC_libUSB_basic.ioc, Makefile build).
gsusb_firmware/budgetcan_fw/Alternative gs_usb / budgetcan firmware — enumerates as a standard gs_usb device on Linux.
pcb/Open hardware KiCad project for the CFUC board.
tools/python-can plugin, host-side helpers, examples and the uCAN_CAN_Viewer GUI.
doc/Datasheets for the STM32G431, MCP2542FD transceiver, USB ESD protection.

For per-folder detail see:


Build (native firmware)

The firmware is built with arm-none-eabi-gcc and a hand-written Makefile:

bash
cd firmware
make -j4

Output: firmware/build/CDC_libUSB_basic.elf.

Flash

SWD (ST-Link)

bash
STM32_Programmer_CLI -c port=SWD freq=4000 -w firmware/build/CDC_libUSB_basic.elf -v -hardRst

USB DFU

Trigger DFU from a running device (send boot\r over the virtual COM port), then:

bash
STM32_Programmer_CLI -c port=USB1 -w firmware/build/CDC_libUSB_basic.elf -v -hardRst

See tools/CFUC_Upload.sh for a one-shot flashing script.


FAQ

What is the cheapest open source USB CAN FD adapter? The uCanDevices CAN FD USB Converter (CFUC) is around $22 and is fully open source — STM32G431 firmware in this repo, KiCad hardware sources in pcb/, python-can plugin in tools/. Commercial CAN FD adapters typically start at several hundred euros.

Does it support ISO CAN FD or only non-ISO? ISO CAN FD. The MCP2542FD transceiver and the STM32G431's FDCAN peripheral both support the ISO CAN FD specification (the one used in current automotive ECUs).

Does it work with python-can? Yes — a python-can plugin is included under tools/. The device is also available as a gs_usb device using the alternate firmware under gsusb_firmware/, which is supported by python-can's built-in gs_usb interface and by Linux SocketCAN directly.

Can it work with Linux SocketCAN natively? Yes — flash the gs_usb firmware from gsusb_firmware/budgetcan_fw/. The device then enumerates as a can0 SocketCAN interface and works with candump, cansend, cangw and other can-utils, as well as anything that talks SocketCAN.

What bit rates are supported? Up to 1 Mbit/s arbitration phase, up to 5 Mbit/s data phase (CAN FD bit rate switching). Classic CAN frames are also supported on the same channel.

Is a driver required? No driver on Linux or macOS. On Windows 10+ the device enumerates as a virtual COM port using the built-in CDC class driver.


Related projects

Links

License

See LICENSE.

Parts

36
QtyValueFootprintReferences
9TestPointMeasurement_Points:Measurement_Point_Round-SMD-Pad_SmallTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9
5100nCapacitors_SMD:C_0603C2, C3, C6, C9, C11
31uCapacitors_SMD:C_0603C1, C4, C10
210uCapacitors_SMD:C_0603C7, C8
2SolderJumper_2_Openucan_custom:mini_GS2JP1, JP2
1120Resistors_SMD:R_0603R2
11kResistors_SMD:R_0603R3
14,7uCapacitors_SMD:C_0603C12
1BLM18TG601TN1DResistors_SMD:R_0603L1
1Conn_01x02_FemalePin_Header_Straight_1x02_Pitch2.54mmJ5
1Conn_01x04_MalePin_Headers:Pin_Header_Straight_2x02_Pitch1.27mmJ4
1LEDLEDs:LED_0603D2
1MCP1700-3302E_SOT23TO_SOT_Packages_SMD:SOT-23U1
1MCP2542FDxMFHousings_DFN_QFN:DFN-8-1EP_3x3mm_Pitch0.65mmU2
1PESD2CANTO_SOT_Packages_SMD:SOT-23D1
1STM32G431CBUxHousings_DFN_QFN:QFN-48-1EP_7x7mm_Pitch0.5mmU4
1Screw_Terminal_01x03/3,5TerminalBlocks_Phoenix:TerminalBlock_Phoenix_PT-3.5mm_3polJ2
1SolderJumper_2_OpenConnectors:GS2JP3
1USBLC6-2SC6TO_SOT_Packages_SMD:SOT-23-6U3
1USBMCS1B5Wucan_custom:USBMCS1B5WJ1

Similar boards

  • 2 layers80 × 60 mmKNX2HovalGateway, the printed circuit board in 3D

    KNX2HovalGateway

    Blizzard26/OAM-KNX2HovalGateway

    OpenKNX Application to connect KNX Bus to Hoval TopTronic Bus

    41 parts1
  • 4 layers50 × 50 mmHSCanT, the printed circuit board in 3D

    HSCanT

    cherry-embedded/HSCanT-hardware

    HSCanT is a USB to 4-channel CAN FD tool designed based on the HPM5321 chip.

    130 parts52Apache-2.0
  • 4 layers55 × 35 mmCarrier, the printed circuit board in 3D

    Carrier

    jonsole/toyotune

    Daughter-board for reprogramming 1990's Toyota ECUs

    30 parts8GPL-3.0
  • 2 layers52 × 109 mmGlasgow can, the printed circuit board in 3D

    Glasgow can

    attie/glasgow-can

    CAN Interface addon for Glasgow

    46 parts6BSD-3-Clause
  • 4 layers50 × 50 mmBusted umbrella, the printed circuit board in 3D

    Busted umbrella

    useless-branch/busted-umbrella

    USB to CAN FD

    45 parts2Apache-2.0
  • 2 layers29 × 26.5 mmCAN Shield, the printed circuit board in 3D

    CAN Shield

    X1L3F/ESP32-CAN-Shield

    Can Shield for the ESP32-S3

    15 parts2
  • 6 layers56.7 × 54.7 mmBetter md80, the printed circuit board in 3D

    Better md80

    darshp848/bldc-controller-60v

    60 V, 20 A / 80 A peak BLDC motor controller that fits the MD80 v3.0 mounting. KiCad 10, 6 layers.

    144 parts1

Questions

How big is the CFDC embedded PCB?

It measures 26 × 13.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the CFDC embedded use?

36 parts, built around the USBLC6-2SC6 and PESD2CAN. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the CFDC embedded KiCad files?

From the ucandevices/CFDC_embedded repository on GitHub, at the commit this page was made from: the board is pcb/main/main.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the CFDC embedded design in my own project?

Its repository publishes it under the LGPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).