Skip to the content
PCBKitNew board
2 layers21 × 14.4 mmHub imu, the printed circuit board in 3D

USB IMU for camera rigs: BNO055 module (STM32F042) and an FE1.1S hub carrier with JST-GH camera ports. KiCad 9.

Size
21 × 14.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
19
Nets
36
Pads
89
Tracks, vias
130, 24
Pours
5
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
16 Oct 2026
Updated
21 Oct 2026

Overview

Hub imu is an open-source printed circuit board by ckemere, from the ckemere/usb-imu repository on GitHub, published under the CERN-OHL-P-2.0 licence. It is a 2-layer board of 21 × 14.4 mm with 19 parts on 36 nets, routed with 130 tracks and 24 vias.

It is built around the STM32F042F6P6, BNO055 and XC6206P332MR. Its parts include 8 capacitors, 5 resistors, 3 ICs, 2 connectors and 1 diode. It belongs with the sensors and measurement boards and the STM32 boards of this library.

Main components

3

README

hub_imu/README.md

hub_imu: USB IMU module for FE1.1S USB 2.0 hubs

A small 2-layer module that stacks onto a USB 2.0 hub board built around the Terminus FE1.1S hub IC, such as these hubs on Amazon. It plugs into one of the hub's downstream ports through a 0.1" 1x4 header and appears on the host as a USB device that bridges to a Bosch BNO055 9-axis IMU over I2C.

  • Board: 21.0 x 14.4 mm, 2 layers, 1.6 mm FR4, 1 oz copper (JLCPCB standard rules)
  • Tools: KiCad 9.0
TopBottom
3D render, top3D render, bottom

The renders come from KiCad's 3D viewer. The J1 and J2 headers are marked do-not-populate (hand-soldered), so they don't appear.

Photos

Assembled moduleNext to an FE1.1S hubStacked onto the hub
Assembled hub_imu modulehub_imu module beside an FE1.1S hub boardhub_imu module soldered onto the hub

Contents

FileWhat it is
hub_imu.kicad_pro / .kicad_sch / .kicad_pcbKiCad project, schematic, layout
hub_imu.kicad_druCustom design rules (see below)
stage1.svg ... stage5.svgLayout renders (F.Cu, B.Cu, F.SilkS, Edge.Cuts) after placement, power, USB, signals, pours
drc_stage1.rpt ... drc_stage5.rptDRC report after each stage (drc_stage5.rpt is the final one)
production/hub_imu.zipGerbers and drill files for JLCPCB (from the Fabrication Toolkit plugin)
images/3D renders and photos used in this README

Circuit

RefPartJLCPCB # (basic)Role
U1STM32F042F6P6 (TSSOP-20)- (not basic)Crystal-less USB FS device, USB-to-I2C bridge
U2BNO055 (LGA-28)- (not basic)9-axis IMU, I2C mode (PS0 = PS1 = GND), address 0x28 (COM3 = GND)
U3XC6206P332MR (SOT-23-3)C54465 V to 3.3 V LDO, 200 mA (pins: 1 VSS, 2 VOUT, 3 VIN), the only heat source
J11x4 2.54 mm header- (hand-solder)Connection to the hub
J22x3 1.27 mm header- (hand-solder)SWD programming/debug
D1Red LED, 0603 (KT-0603R)C2286Status LED on PA3
R51k 0402C11702LED resistor (~1.3 mA)
R3, R44.7k 0402C25900I2C pull-ups
R1, R210k 0402C25744BOOT0 pull-down, BNO055 nRESET pull-up
C11 uF 0402, 25 V X5RC52923LDO input (+5V)
C24.7 uF 0402, 10 V X5RC23733LDO output (+3V3)
C3-C8100 nF 0402, 16 V X7RC1525NRST filter; decoupling (U1 VDD, U1 VDDA, U2 VDD, U2 VDDIO, U2 CAP)

Every assembled part has a JLCPCB Part # field in the schematic and PCB, taken from JLCPCB's basic parts library. U1, U2, J1 and J2 have the field left blank: the ICs aren't basic parts, and the headers are fitted by hand.

J1 - hub connector (0.1" pitch)

PinSignal
1+5V (VBUS)
2USB D-
3USB D+
4GND

This pin order has been checked against the hub's downstream-port header.

J2 - SWD (2x3, 1.27 mm)

PinSignalPinSignal
1+3V32BOOT0
3SWDIO4SWCLK
5NRST6GND

This is a custom pinout, not a standard ARM SWD connector, so an adapter or cable is needed.

Firmware notes (STM32F042F6P6)

FunctionPin
USB D- / D+PA11 / PA12 on pins 17/18. Set SYSCFG_CFGR1.PA11_PA12_RMP, or USB will not enumerate (these pins default to PA9/PA10).
I2C1 SDA / SCLPF0 / PF1 (AF1)
BNO055 INTPA5 (pin 11), EXTI
BNO055 nRESETPA6 (pin 12), drive low to reset (10k pull-up on board)
Status LEDPA3 (pin 9), active high, ~1.3 mA (red 0603 LED + 1k)
SWDPA13 / PA14

Use the internal HSI48 clock with CRS synced to USB SOF. There is no crystal, and the BNO055's 32 kHz crystal pins are left open (internal clock).

Layout notes

  • All components are on the top side.
  • The bottom layer is a GND plane that also carries +3V3 distribution. Signals are on top, apart from four short jumpers: SDA under SCL, and BOOT0 / SWDIO to J2's through-hole pins.
  • The USB D+/D- pair is 0.25 mm wide with a 0.2 mm gap, has no vias, and is length-matched (0 mm skew). Solid ground runs underneath it (bottom-layer track/via keepout USB_BCu_keepout).
  • There are no bottom-layer tracks or vias under the IMU (U2_BCu_keepout), and no top copper inside U2's pad ring (U2_FCu_interior).
  • Every decoupling cap is within 2 mm of the pin it serves and has an adjacent GND via.

Custom design rules (hub_imu.kicad_dru)

  • 0.2 mm minimum track and clearance; vias 0.6 mm pad / 0.3 mm drill.
  • +5V / +3V3 tracks are 0.4 mm, necking to 0.25 mm only inside U2's courtyard (its pads are 0.254 mm wide).
  • USB tracks are exactly 0.25 mm.
  • No bottom-layer tracks or vias intersecting U2's courtyard.
  • R1 and U1 GND pads may have one thermal spoke; both also have a direct track to a GND via.

Verification status

The final DRC (drc_stage5.rpt) shows 0 errors and 0 unconnected pads. The remaining items are lib_footprint_mismatch warnings on the 0402, SOT-23-3 and LGA footprints. They come from KiCad re-save rounding on rotated footprints, not from real geometry changes.

ERC reports only lib_symbol_issues, because the hubimu symbols are embedded in the schematic rather than installed as a library.

BNO055 datasheet check

Checked against Bosch BST-BNO055-DS000-18 (rev 1.8, Oct 2021); page numbers are the datasheet's own:

  • Reserved pins: Table 5-1 (p. 106) marks PIN1, 12, 13, 15, 16, 21-24 and BL_IND (10) as "Do not connect". All are unconnected here.
  • Protocol/address pins: PS1, PS0, COM2 and COM3 are tied to GND for I2C at 0x28 (Tables 4-4/4-5, p. 99; PS pins must not float).
  • XIN32/XOUT32: left open for the internal clock (sec. 5.5.2, p. 111; internal clock tolerance up to ±3%).
  • CAP (9): Fig. 9 (p. 107) shows 120 nF. C8 is 100 nF because there is no 120 nF JLCPCB basic part, and the figure's values are "typical example" only (footnote 9, p. 110).
  • nBOOT_LOAD_PIN (4): Fig. 9 shows an optional 10k pull-up. Here it is tied directly to +3V3, so the part always boots the application (sec. 3.10, p. 51). The BNO055's own firmware cannot be updated on this board.

Design decisions

  • MCU decoupling is 100 nF each on VDD and VDDA, plus 4.7 uF at the LDO output on the same short +3V3 net. ST's usual guidance also suggests 1 uF + 10 nF on VDDA. This was judged unnecessary here: the supply traces are short, and the ADC is not used for anything precision-critical.

There are no open items.

License

The hardware design is licensed under the CERN Open Hardware Licence v2, Permissive (CERN-OHL-P-2.0).

Parts

19
QtyValueFootprintReferences
6100nFCapacitor_SMD:C_0402_1005MetricC3, C4, C5, C6, C7, C8
210kResistor_SMD:R_0402_1005MetricR1, R2
24.7kResistor_SMD:R_0402_1005MetricR3, R4
11kResistor_SMD:R_0402_1005MetricR5
11uFCapacitor_SMD:C_0402_1005MetricC1
14.7uFCapacitor_SMD:C_0402_1005MetricC2
1BNO055Package_LGA:LGA-28_5.2x3.8mm_P0.5mmU2
1RedLED_SMD:LED_0603_1608MetricD1
1STM32F042F6P6Package_SO:TSSOP-20_4.4x6.5mm_P0.65mmU1
1SWD 2x3 P1.27Connector_PinHeader_1.27mm:PinHeader_2x03_P1.27mm_VerticalJ2
1USB 1x4 P2.54Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ1
1XC6206P332MRPackage_TO_SOT_SMD:SOT-23-3U3

Questions

How big is the Hub imu PCB?

It measures 21 × 14.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Hub imu use?

19 parts, built around the STM32F042F6P6, BNO055 and XC6206P332MR. 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 Hub imu KiCad files?

From the ckemere/usb-imu repository on GitHub, at the commit this page was made from: the board is hub_imu/hub_imu.kicad_pcb and its schematic hub_cam/hub_cam.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Hub imu design in my own project?

Its repository publishes it under the CERN-OHL-P-2.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).

Similar boards

  • 2 layers15.9 × 25 mmIMU, the printed circuit board in 3D

    IMU

    abstractfoundry/lumicube-boards

    PCB and firmware design files for some of the LumiCube components

    26 parts
  • 4 layers60.8 × 61.3 mmOS3M Mouse, the printed circuit board in 3D

    OS3M Mouse

    spoter368/os3m-hardware

    All the hardware needed to build your own OS3M Mouse!

    51 parts399
  • 2 layers120.4 × 100.4 mmRelaymux, the printed circuit board in 3D

    Relaymux

    PetteriAimonen/relaymux

    Hardware and firmware for a USB connected relay box

    59 parts18BSD-2-Clause
  • 2 layers100 × 73.3 mmPride Badge, the printed circuit board in 3D

    Pride Badge

    aziraphale/pride-badge-v1

    🌈⚡Pride badge PCB with LEDs, STM32, and 3D printed diffuser+case!

    136 parts
  • 2 layers20 × 38.5 mmArm tiny pcb, the printed circuit board in 3D

    Arm tiny pcb

    Chicken-Fried/STM32-NanoCortex

    Ultra-compact USB-C development board powered by STM32F042 (ARM Cortex-M0) with native DFU, ceramic-only LDO power stage & CaveRover branding.

    29 partsCERN-OHL-S-2.0
  • 2 layers135 × 21 mmUsbc pd airsoft module, the printed circuit board in 3D

    Usbc pd airsoft module

    Fluffik214/airsoft-battery-module

    This is a USB-C PD charger and cell monitor for a 3S LiPo that lives in an airsoft stock tube. It has one USB-C port.

    98 parts
  • 2 layers38.3 × 26.8 mmAeroBlinker, the printed circuit board in 3D

    AeroBlinker

    toyJig/AeroBlinker

    Custom PCB w/ KiCAD that reads Receiver Signals to control light flash patterns - Aeronautics Team

    42 parts