Import a board design

Bring your PCB design in and get a system you can run firmware on: the microcontroller, every part that has a twin, and the wires between them as your design’s nets say.

What an import gives you

The import reads which part sits on which net, as your files state it. Parts with a twin become parts of the system, wired to the microcontroller pins your design connects them to. Every part and net of the design, supplies and passives included, is kept with the system so nothing is lost.

It does not claim that the design works, that a net carries the signal its name suggests, or anything about analog behavior, power-up order or timing. A part without a twin is listed with the reason, never replaced by a guess.

Formats

ToolWhat to upload
KiCadBoard (.kicad_pcb), schematic (.kicad_sch) or netlist (.net). A project folder with a board is read from the board.
EagleSchematic and board (.sch and .brd).
EasyEDAStandard JSON (netlist export or PCB source), or the Pro netlist export.
AltiumA Protel netlist, wire list or BOM CSV. Altium’s own .SchDoc and .PcbDoc files are not read: export one of these, or IPC-2581 or ODB++.
ODB++A folder, .zip, .tar or .tgz.
IPC-2581The XML file.
OthersIPC-D-356 with a BOM CSV, EDIF 2 0 0, and a bill of materials as CSV.

Choose the project folder without its fabrication outputs, or drop an archive of it. Uploads are limited to 64 MB, and a design to 4,096 parts and 16,384 nets.

In the app

  1. Open a project and choose Import a PCB (it is also on the systems list).
  2. Choose the project folder, or drop an archive or the design files. The page reads the design and shows the microcontroller, the parts resolved to a twin, and the parts that still need one.
  3. For each integrated circuit without a twin, upload its datasheet. Its twin is built from the document, then the design is read again. You can also tick Also ask for a twin build of each part without a twin.
  4. Choose Create the system, then Open the system and run firmware on it as on any other system.

A design without a microcontroller (a sensor breakout, for example) asks for a host microcontroller by part number, such as STM32F767ZI, and puts the design’s parts on it.

From the terminal

terminal
ct board import ./my-board                         # local: writes the board, its report and its design
ct board import ./my-board --server --dry-run      # hosted: report only, store nothing
ct board import ./my-board --server --project <ID> --generate

--assign U2=ESP32C3 states a reference’s part number when the design gives none or a different spelling, --skip leaves references out, and --host-mcu names the microcontroller for a design without one. Exit codes: 0 a system was made, 1 the design was read but no system could be made, 2 invalid input, 3 platform error. See the ct CLI.

Importing a design again

Import the same design after changing it and the stored system is updated, not replaced. The design decides what it states: the parts that have twins, their wires, the microcontroller, crystals and labelled pins. Everything you set by hand stays:

  • the names you gave parts, and the system’s name;
  • consoles, CAN buses and pin labels, while the microcontroller is the same part;
  • clock settings the design does not state;
  • each part’s settings and chosen I2C address, while the part number is the same;
  • card positions, wire colors, and parts you added by hand with their wires.

The import page lists what was kept and what left the system, with the reason: a part the design no longer has, a wire it no longer draws, or a console on a microcontroller that changed.