Skip to the content
PCBKitNew board
2 layers78.8 × 36.6 mmIRIS-868, the printed circuit board in 3D

IRIS-868 is a custom embedded RF platform based on the STM32F303RET6 microcontroller and Semtech LLCC68 sub-GHz transceiver, designed for 868 MHz ISM-band wireless communication.

Size
78.8 × 36.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
53
Nets
71
Pads
245
Tracks, vias
565, 327
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
15 Aug 2026
Updated
6 Nov 2026

Overview

IRIS-868 is an open-source printed circuit board by StringLess80, from the StringLess80/IRIS-868 repository on GitHub. It is a 2-layer board of 78.8 × 36.6 mm with 53 parts on 71 nets, routed with 565 tracks and 327 vias.

It is built around the STM32F303RET6, E22-900M22S and W25Q128JVSIQ, with the AP2112K-3.3 and USBLC6-2SC6 among its other parts. Its parts include 22 capacitors, 13 resistors, 7 connectors, 5 ICs and 2 switches. It belongs with the radio and wireless boards and the STM32 boards of this library.

Main components

5

README

README.md

📡 IRIS-868

Custom embedded RF platform for the 868 MHz ISM band

IRIS-868 is a custom embedded RF platform based on the STM32F303RET6 microcontroller and an Ebyte E22-900M22S (Semtech SX1262) sub-GHz LoRa module, designed for 868 MHz ISM-band wireless communication and data logging.


Status KiCad MCU Band

PCB Radio Flash Interface Release Last commit Repo size Stars


IRIS-868


⚡ At a glance

🧠 MCUSTM32F303RET6 · Cortex-M4F @ 72 MHz · 512 KB flash · 64 + 16 KB RAM
📻 RadioEbyte E22-900M22S · SX1262 · +22 dBm · LoRa / (G)FSK
💾 StorageWinbond W25Q128JV · 128 Mbit (16 MiB) SPI NOR flash for data logging
🔌 PowerUSB micro-B → AP2112K-3.3 LDO, filtered analog and RF rails, VBUS voltage monitoring on the ADC
🧩 Expansion2 × 12-pin edge headers · I²C header for 128×64 OLED · 5-pin SWD with NRST · BOOT0 jumper · user button
📐 Board2-layer FR4 · 78.8 × 36.6 mm · green mask, white silk · components on both sides
🛠️ ToolingKiCad 10, footprints and symbols embedded in the project files

[!WARNING] Revision B is design-complete but has not been bring-up tested. Fabrication files are released as-is. No firmware is included in this repository yet.

📑 Table of contents

🆕 What's new in revision B

AreaRevision ARevision B
ExpansionMost GPIOs unroutedTwo 1×12 edge headers (J5, J7) bring out power, reset, BOOT0, USART1 and 13 GPIOs
Debug4-pin SWD, no NRST5-pin SWD with NRST — "connect under reset" now works
Storage—16 MiB W25Q128JV SPI flash on SPI3 (bottom side)
User inputReset button onlyAdditional user button on PC13 with RC debounce
Monitoring—VBUS divider (47 kΩ / 15 kΩ) on PC0 for USB voltage measurement
USBD+ pull-up fixed to +3.3 VD+ pull-up driven by PB8 — firmware-controlled attach/detach
RadioE220-900M22S (LLCC68)E22-900M22S (SX1262), same MCU connections
BootBOOT0 floats with no jumper100 kΩ pull-down (R13), boots from flash with no jumper
Board74.2 × 32.0 mm, single-sided assembly78.8 × 36.6 mm, bottom-side SMD parts and headers

A design review before release added these changes:

  • RF feed: the antenna trace no longer runs under the module, and J6 moved to suit (see RF chain).
  • Decoupling: C10 now sits next to the NRST pin, and C8 next to the VDDA pin.
  • Clean-up: the unused test pad under IC1 was removed.
  • Fabrication: design constraints follow JLCPCB's limits, with a green mask so the solder dams between LQFP pins can be kept.

🖼️ Gallery

FrontBack

📄 Full schematic: docs/schematics/IRIS-868.pdf

🏗️ System architecture

mermaid
flowchart LR
    USB["USB micro-B<br/>J2"] -->|VBUS 5 V| LDO["AP2112K-3.3<br/>600 mA LDO"]
    USB -.->|"D+ / D-"| ESD["USBLC6-2SC6<br/>ESD"]
    ESD -.-> MCU
    USB -->|"VBUS ÷ 4.13"| VMON["V_MON<br/>PC0 / ADC"]
    VMON --> MCU

    LDO --> RAIL(("3.3 V"))
    RAIL -->|"FB1 120 Ω"| VDDA["+3.3VA"]
    RAIL -->|"FB2 120 Ω"| VRF["VRF"]
    RAIL --> MCU
    VDDA --> MCU
    VRF --> MOD

    MCU["STM32F303RET6<br/>Cortex-M4F @ 72 MHz"]
    MCU <-->|"SPI1 · NSS · BUSY · DIO1 · NRST"| MOD["E22-900M22S<br/>SX1262 · +22 dBm"]
    MCU -->|"RXEN / TXEN"| MOD
    MOD -->|ANT| SMA["SMA edge<br/>J6"]

    MCU <-->|"SPI3 · CS"| FLASH["W25Q128JV<br/>16 MiB flash"]
    MCU <-->|"I²C1"| OLED["128×64 OLED<br/>header"]
    MCU <-->|"SWD + NRST"| DBG["ST-Link<br/>J3"]
    MCU <-->|"GPIO · USART1"| HDR["Edge headers<br/>J5 / J7"]
    BTN["User button<br/>PC13"] --> MCU

📁 Repository layout

text
IRIS-868/
├── CHANGELOG.md               Release history
├── hardware/
│   ├── kicad/                 KiCad 10 project (schematic, PCB, design rules)
│   │   └── libs/              Source symbols, footprints, 3D models
│   └── gerbers/
│       ├── rev.A/             Gerber and Excellon files, revision A
│       └── rev.B/             Gerber and Excellon files, revision B
├── production/BOM/            Interactive BOM for assembly
└── docs/
    ├── schematics/            Schematic PDF
    ├── images/                Board renders by revision
    └── datasheets/            Component reference documents

The schematic uses four top-level sheets, a KiCad 10 feature: MCU, crystal, reset, VBUS monitor and edge headers (IRIS-868.kicad_sch), power and USB (pwr.kicad_sch), the radio (rf.kicad_sch), and connectors, flash and the user button (interfaces.kicad_sch).

🔧 Hardware overview

Power

USB VBUS feeds an AP2112K-3.3 LDO (SOT-23-5, 600 mA) that generates the single 3.3 V system rail. Three domains branch from it:

RailSourceDecouplingPurpose
+3.3VLDO output10 µF + 7 × 100 nF + 2 × 1 µFMCU digital, I/O, flash, headers
+3.3VAvia FB1 (120 Ω ferrite)1 µF + 10 nFSTM32 VDDA / analog reference
VRFvia FB2 (120 Ω ferrite)22 µF + 1 µF + 2 × 100 nFRF module supply

The ferrite beads isolate the analog and RF domains from digital switching noise on the main rail, and C7 and C8 sit next to the VDDA pin. The 22 µF bulk capacitor on VRF supplies the current burst drawn by the module during transmission.

VBUS and +3.3 V are both available on header J5, so the board can supply a small carrier or add-on board.

VBUS monitoring

A 47 kΩ / 15 kΩ divider (R6 / R7) scales VBUS onto V_MON (PC0, ADC12_IN6), filtered by C20 (100 nF). The divider ratio is 15 / 62, so 5.0 V on VBUS reads as about 1.21 V, and firmware recovers VBUS as V_MON × 4.133. The divider draws roughly 80 µA from VBUS, and its ~11 kΩ source impedance combined with C20 gives a stable input for the ADC sample-and-hold.

RF chain

The E22-900M22S connects to the MCU over SPI1 plus four control lines. RXEN and TXEN drive the module's internal RF switch and must be managed by firmware around every transmit/receive transition. The antenna net (ANT) leaves the module's stamp-hole RF pad away from the module body and reaches the SMA edge connector as a 7.4 mm, 1.0 mm-wide coplanar trace on F.Cu, over an unbroken ground plane on B.Cu. A project design rule sets a 0.15 mm gap to the surrounding copper, which gives a calculated impedance of about 50 Ω with a 1.51 mm dielectric and εr 4.5. GND vias flank the feed.

Data-logging flash

A Winbond W25Q128JVSIQ (SOIC-8, 208 mil) on the bottom side provides 16 MiB of non-volatile storage on SPI3 (PC10 / PC11 / PC12) with chip select on PD2. The CS line has a 10 kΩ pull-up (R8) so the flash stays deselected while the MCU is in reset. /WP and /HOLD are tied high through R9 and R10, so the device operates in standard single-bit SPI mode; dual/quad I/O is not available on this revision. C21 decouples the flash locally.

User input and reset

ButtonNetCircuit
SW1 (RST)NRST (pin 7)Pulls NRST low. 100 nF (C10) sits next to the pin on the bottom side. NRST is also on the SWD header and J5
SW2 (PC13)PC13 (pin 2)Active-low. 10 kΩ pull-up (R11), 10 kΩ series (R12), 100 nF (C22) to GND — about 1 ms fall / 2 ms rise debounce

USB

The USB D+ 1.5 kΩ pull-up (R2) is connected to PB8 rather than to +3.3 V. Firmware must drive PB8 high to signal device attach to the host, and can drive it low to force a clean disconnect/re-enumeration without unplugging the cable.

Interfaces

ConnectorTypePinout
J2 USBmicro-BUSB FS device on PA11/PA12, D+ pull-up switched by PB8, ESD-protected
J3 SWD1×5 @ 2.54 mmGND · NRST · SWCLK · SWDIO · +3.3V
J1 (BOOT0)1×3 @ 2.54 mmGND · BOOT0 · +3.3V — no jumper or 1–2 = flash, 2–3 = bootloader
J4 (OLED)1×4 @ 2.54 mmGND · +3.3V · SCL · SDA (1.5 kΩ pull-ups on board)
J51×12 @ 2.54 mm, bottom-mountedPower, reset, BOOT0, USART1, GPIO — see below
J71×12 @ 2.54 mm, bottom-mountedGPIO — see below
J6 SMAedge-mountAntenna

Edge headers

J5 and J7 run along the long edges of the board with a row-to-row spacing of 31.75 mm (1.25 in). The header bodies are mounted on the bottom side, so the board can be plugged into a carrier with the components facing up. Pin 1 of each header is at the USB end.

PinJ5J7
1GNDPB9
2+3.3VGND
3VBUS (5 V)PB0
4NRSTPB1
5BOOT0PC4
6PA9 (USART1_TX)PC5
7PA10 (USART1_RX)PC6
8GNDPC7
9PB4PC8
10PB5GND
11PB6not connected
12PB8 ⚠️ USB D+ pull-upnot connected

📌 Pin assignment

STM32F303RET6 ↔ E22-900M22S

STM32 pinSignalModule pinDirectionFunction
PA5SPI1_SCK18 (SCK)→SPI clock
PA6SPI1_MISO16 (MISO)←SPI data out
PA7SPI1_MOSI17 (MOSI)→SPI data in
PA4NSS19 (NSS)→Chip select, active low
PA3NRST15 (NRST)→Module reset, active low
PA2BUSY14 (BUSY)←Transceiver busy status
PA8DIO113 (DIO1)←Primary interrupt line
PB10RXEN6 (RXEN)→RF switch, receive enable
PB11TXEN7 (TXEN)→RF switch, transmit enable

Module pin 8 (DIO2) is left unconnected in revision B.

STM32F303RET6 ↔ W25Q128JV

STM32 pinSignalFlash pinDirection
PC10SPI3_SCK6 (CLK)→
PC11SPI3_MISO2 (DO)←
PC12SPI3_MOSI5 (DI)→
PD2FLASH_CS1 (/CS)→
Other pin assignments
STM32 pinFunction
PA11 / PA12USB D− / D+
PB8USB D+ pull-up control (also on J5 pin 12)
PA13 / PA14SWDIO / SWCLK
PA15I²C1 SCL (AF4)
PB7I²C1 SDA (AF4)
PC0V_MON — VBUS voltage divider (ADC)
PC13User button, active low
PF0 / PF116 MHz crystal (OSC_IN / OSC_OUT)
NRST (pin 7)Reset button + 100 nF, SWD header, J5
BOOT0 (pin 60)J1 via 10 kΩ (R1), 100 kΩ pull-down (R13), J5 (direct)
PA9, PA10, PB4–PB6J5
PB0, PB1, PB9, PC4–PC8J7

The remaining GPIOs — PA0, PA1, PB2, PB3, PB12–PB15, PC1–PC3, PC9, PC14, PC15 — are not routed in revision B.

📐 Board specification

ParameterValue
Dimensions78.8 × 36.6 mm, 2 mm corner radius
Layers2 (F.Cu / B.Cu), GND pour on both
Stackup1.6 mm FR4, 35 µm copper, εr 4.5
FinishHASL, green solder mask, white silkscreen
Vias327, 0.6 mm with 0.3 mm drill, tented
Minimum rulesTrack 0.15 mm, clearance 0.2 mm, annular ring 0.13 mm, hole-to-hole 0.5 mm, copper-to-edge 0.2 mm
AssemblyDouble-sided (U4, R8–R10, R13, C10, C21 and header bodies on the bottom)
Special rules0.15 mm clearance on the ANT coplanar feedline

🧾 Bill of materials

Full BOM — 53 components
RefQtyValuePackageNotes
U11STM32F303RET6LQFP-640.5 mm pitch
U21AP2112K-3.3SOT-23-5600 mA LDO
U31USBLC6-2SC6SOT-23-6USB ESD protection
U41W25Q128JVSIQSOIC-8 5.3 × 5.3 mm128 Mbit SPI flash, bottom side
IC11E22-900M22SEbyte SMD moduleSX1262, +22 dBm
Y1116 MHz3225-4pinCL ≈ 10 pF, ≤20 ppm recommended
C1–C5, C10, C16, C17, C19, C2110100 nF040216 V X7R — C10 and C21 on bottom side
C20, C222100 nF080516 V X7R — V_MON filter, PC13 debounce
C8, C9, C14, C1541 µF040216 V X5R/X7R
C1311 µF040225 V — sits on the 5 V VBUS rail
C6110 µF060316 V X5R
C18122 µF080516 V X5R, RF bulk
C7110 nF040216 V X7R, VDDA filter
C11, C12212 pF040250 V C0G/NP0 ±5%, crystal load
R1110 kΩ0402BOOT0 series
R211.5 kΩ0402USB D+ pull-up (to PB8)
R311.5 kΩ0402Power LED series
R4, R521.5 kΩ0402I²C pull-ups
R6147 kΩ0402VBUS divider, top — 1% recommended
R7115 kΩ0402VBUS divider, bottom — 1% recommended
R8, R9, R10310 kΩ0402Flash /CS, /WP, /HOLD pull-ups, bottom side
R11, R12210 kΩ0402PC13 button pull-up / series
R131100 kΩ0402BOOT0 pull-down, bottom side
FB1, FB22120 Ω @ 100 MHz0402Analog / RF rail filtering, rated ≥ 500 mA
D11Red LED0603Power indicator
SW1, SW22Tactile switch6 mm THT4-pin, 4.5 × 6.5 mm, marked RST and PC13
J11Pin header 1×32.54 mmBOOT0 select, marked BOOT0
J21USB micro-BWürth 629105150521
J31Pin header 1×52.54 mmSWD + NRST
J41Pin header 1×42.54 mmI²C / OLED, marked OLED
J5, J72Pin header 1×122.54 mmEdge headers, bottom side
J61SMA edge-mountRF Solutions CON-SMA-EDGE-S

For assembly, open the interactive BOM after downloading it.

[!TIP] Capacitor voltage ratings account for MLCC DC bias derating — class II ceramics lose a large fraction of their nominal capacitance near their rated voltage, so ratings are specified at roughly 4–5× the working voltage. A 2.54 mm jumper shunt on J1 is needed only to enter the bootloader, and it isn't part of the PCB BOM.

🚀 Getting started

1 · Fabricate the board

Fabrication files for revision B are in hardware/gerbers/rev.B/, as Gerber and Excellon drill files. A ready-to-upload zip is attached to the v2.0.0 release.

  • Process: standard 2-layer, 1.6 mm FR4, 1 oz copper, HASL or ENIG, green mask
  • No controlled impedance is specified
  • Revision B has SMD parts on both sides. If using assembly service, request double-sided assembly or have the bottom-side parts (U4, R8–R10, R13, C10, C21) left unpopulated and fit them by hand
  • Suggested hand-assembly order: bottom-side SMD parts first, then the STM32 (drag solder, then inspect with flux and a loupe), then the remaining ICs, then passives, then the module, then through-hole parts last — edge headers J5/J7 go in from the bottom
2 · Open the design

The project requires KiCad 10 or later, because it uses multiple top-level sheets. Symbols and footprints are embedded in the project files, so it opens without any library setup. Sources for the non-standard parts (E22 module, SMA edge connector) and the 3D models are under hardware/kicad/libs/. DRC reports one library warning on J6, because its source library is not registered in the project.

bash
git clone https://github.com/StringLess80/IRIS-868.git
cd IRIS-868
kicad hardware/kicad/IRIS-868.kicad_pro
3 · Program it

Via SWD (recommended) — connect an ST-Link or any CMSIS-DAP probe to J3, including the NRST line. Because NRST is on the header, "connect under reset" works, so a board with firmware that disables SWD or enters low-power mode early can still be recovered from the debugger.

bash
st-flash --reset write firmware.bin 0x08000000

Via UART bootloader — connect a 3.3 V USB-serial adapter to J5 (PA9 = MCU TX, PA10 = MCU RX, GND), fit the J1 jumper on pins 2–3 and reset:

bash
stm32flash -w firmware.bin -v -g 0x0 /dev/ttyUSB0

Via USB DFU — the ROM bootloader does not drive PB8, so the D+ pull-up is inactive and the host will not see the device. Tie J5 pin 12 (PB8) to J5 pin 2 (+3.3V) for the duration of the DFU session, fit the J1 jumper on pins 2–3, reset, then:

bash
dfu-util -a 0 -s 0x08000000:leave -D firmware.bin

[!CAUTION] Remove the PB8 link before running application firmware — if firmware drives PB8 low while it is tied to +3.3 V, the pin is shorted.

Remove the jumper, or move it to pins 1–2, and reset to run from flash.

📦 Releases

VersionHardwareStatus
v2.0.0Revision BReleased for fabrication, not bring-up tested
v1.0.0Revision ASuperseded

The major version changes with each PCB revision. Minor and patch versions cover compatible changes to the BOM, documentation or fabrication outputs. See the changelog for details.


Made with KiCad 🛠️

Parts

53
QtyValueFootprintReferences
10100 nFCapacitor_SMD:C_0402_1005MetricC1, C2, C3, C4, C5, C10, C16, C17, C19, C21
51 uFCapacitor_SMD:C_0402_1005MetricC8, C9, C13, C14, C15
510kResistor_SMD:R_0402_1005MetricR8, R9, R10, R11, R12
41k5Resistor_SMD:R_0402_1005MetricR2, R3, R4, R5
2100 nFCapacitor_SMD:C_0805_2012MetricC20, C22
212 pFCapacitor_SMD:C_0402_1005MetricC11, C12
2120 RInductor_SMD:L_0402_1005MetricFB1, FB2
2Conn_01x12_PinConnector_PinHeader_2.54mm:PinHeader_1x12_P2.54mm_VerticalJ5, J7
110 kResistor_SMD:R_0402_1005MetricR1
110 nFCapacitor_SMD:C_0402_1005MetricC7
110 uFCapacitor_SMD:C_0603_1608MetricC6
1100kResistor_SMD:R_0402_1005MetricR13
1128x64 OLEDConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ4
115kResistor_SMD:R_0402_1005MetricR7
116 MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
122 uFCapacitor_SMD:C_0805_2012MetricC18
147kResistor_SMD:R_0402_1005MetricR6
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U2
1BTNButton_Switch_THT:SW_PUSH_6mmSW2
1E22-900M22SE22-900M22S:E22-900M22SIC1
1PRGConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ1
1REDLED_SMD:LED_0603_1608MetricD1
1RSTButton_Switch_THT:SW_PUSH_6mmSW1
1SMACON-SMA-EDGE-S:RFSOLUTIONS_CON-SMA-EDGE-SJ6
1STM32F303RET6Package_QFP:LQFP-64_10x10mm_P0.5mmU1
1SWDConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ3
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U3
1USB_B_MicroConnector_USB:USB_Micro-B_Wuerth_629105150521J2
1W25Q128JVSIQPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU4

Questions

How big is the IRIS-868 PCB?

It measures 78.8 × 36.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the IRIS-868 use?

53 parts, built around the STM32F303RET6, E22-900M22S, W25Q128JVSIQ and AP2112K-3.3. 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 IRIS-868 KiCad files?

From the StringLess80/IRIS-868 repository on GitHub, at the commit this page was made from: the board is hardware/kicad/IRIS-868.kicad_pcb and its schematic hardware/kicad/IRIS-868.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the IRIS-868 design in my own project?

Its repository states no licence, so its author keeps all rights: ask StringLess80 before reusing the design.

Similar boards

  • 2 layers139 × 113 mmHc radio, the printed circuit board in 3D

    Hc radio

    ras-rap/hc-radio

    131 partsMIT
  • 2 layers65 × 56 mmReticulum hat, the printed circuit board in 3D

    Reticulum hat

    gmlewis/asic-reticulum

    SpinalHDL implementation of ASIC hardware for go-reticulum

    16 parts
  • 4 layers75 × 75 mmWeatherstation, the printed circuit board in 3D

    Weatherstation

    Stylt1/lora-weather-station-pcb

    Custom PCB for sensor node

    65 partsGPL-3.0
  • 2 layers94 × 72 mmHome sense meteostation, the printed circuit board in 3D

    Home sense meteostation

    trabem/home_sense_meteostation

    Репозиторій автономної battery-powered метеостанції на ESP32-C3-WROOM-02. Містить firmware (ESP-IDF / FreeRTOS), KiCad-проєкти двох плат і матеріали фінальної презентації.

    93 parts
  • 4 layers80 × 50 mmOzone telecom, the printed circuit board in 3D

    Ozone telecom

    DashiellRussell/UNSW_Rocketry_Senior_Flight_Computer

    KiCad project for the senior flight computer used by UNSW Rocketry.

    118 parts