# 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

| Tool     | What to upload                                                                                                                          |
| -------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| KiCad    | Board (.kicad\_pcb), schematic (.kicad\_sch) or netlist (.net). A project folder with a board is read from the board.                   |
| Eagle    | Schematic and board (.sch and .brd).                                                                                                    |
| EasyEDA  | Standard JSON (netlist export or PCB source), or the Pro netlist export.                                                                |
| Altium   | A 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-2581 | The XML file.                                                                                                                           |
| Others   | IPC-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](https://circuittwin.ai/docs/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.

> **Known gaps**
>
> Only the part that runs the firmware is wired as the microcontroller. Passives, LEDs, crystals and connectors have no twin and stay in the design. Reset, USB and crystal pins are reported as unmapped. A module such as a Raytac MDBT50 hides its crystals from the design files: set the clock in the system if the module carries one. A panel of several boards imports its first board and says so.
