Skip to the content
PCBKitNew board
4 layers16 × 16 mmWakeMod, the printed circuit board in 3D

WakeMod: An Open-Source Wake-up Transceiver Module

Size
16 × 16 mm
Copper layers
4
Thickness
1.06 mm
Parts
33
Nets
51
Pads
185
Tracks, vias
279, 120
Pours
5
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
4 May 2025
Updated
10 Dec 2025

Overview

WakeMod is an open-source printed circuit board by ETH-PBL, from the ETH-PBL/WakeMod repository on GitHub. It is a 4-layer board of 16 × 16 mm with 33 parts on 51 nets, routed with 279 tracks and 120 vias.

It is built around the STM32U031K8U6, MAX41462GUB+ and B39871B3744H110, with the LQW03AW11NJ00D, ECS-160-8-36CKM-TR and LQP03HQ22NH02D among its other parts. Its parts include 18 capacitors, 5 ICs, 4 inductors, 2 resistors and 2 connectors. It belongs with the radio and wireless boards and the STM32 boards of this library.

Main components

10

README

README.md

WakeMod: An Open-Source Wake-up Transceiver Module

WakeMod is an open-source, ultra-low-power wake-up transceiver module designed for the 868 MHz ISM band, facilitating easy integration of Wake-up Radio (WuR) capabilities into existing and new IoT systems. It aims to significantly reduce idle power consumption while ensuring low-latency event responsiveness, crucial for battery-powered, long-term deployments.

An in-depth analysis of the hardware can be found here: IEEE IWASI / arXiv:2505.21529 (preprint)

Large-scale IoT applications, such as asset tracking and remote sensing, demand multi-year battery lifetimes to minimize maintenance and operational costs. Traditional wireless protocols often employ duty cycling, introducing a tradeoff between latency and idle consumption -- both unsuitable for event-driven and ultra-low power systems. A promising approach to address these issues is the integration of always-on Wake-up Receivers (WuRs). They provide asynchronous, ultra-low power communication to overcome these constraints. This paper presents WakeMod, an open-source wake-up transceiver module for the 868 MHz ISM band. Designed for easy integration and ultra-low power consumption, it leverages the -75 dBm sensitive FH101RF WuR. WakeMod achieves a low idle power consumption of 6.9 µW while maintaining responsiveness with a sensitivity of -72.6 dBm. Reception of a wake-up call is possible from up to 130 m of distance with a -2.1 dBi antenna, consuming 17.7 µJ with a latency below 54.3 ms. WakeMod's capabilities have further been demonstrated in an e-ink price tag application, achieving 7.17 µW idle consumption and enabling an estimated 8-year battery life with daily updates on a standard CR2032 coin cell. WakeMod offers a practical solution for energy-constrained, long-term IoT deployments, requiring low-latency, and on-demand communication.

If you use WakeMod in an academic or industrial context, please cite the following publication:

bibtex
@inproceedings{schultess25_wakem,
  author         = {Lukas Schulthess and Silvano Cortesi and Michele Magno},
  title          = {Wakemod: a 6.9uw Wake-Up Radio Module With -72.6dbm Sensitivity for On-Demand Iot},
  year           = 2025,
  month          = 7,
  pages          = {1-6},
  booktitle      = {2025 10th International Workshop on Advances in Sensors and Interfaces (IWASI)},
  doi            = {10.1109/iwasi66786.2025.11122000},
  url            = {http://dx.doi.org/10.1109/IWASI66786.2025.11122000},
}

Features

  • Combines Wake-up Radio (WuR) Receiver and OOK Transmitter functionality.
  • Ultra-low power operation:
    • Module idle consumption: 6.9 µW
    • WuR sensitivity: -72.6 dBm
  • Onboard low-power STMicroelectronics STM32U031 MCU for control and I2C communication.
  • Frauenhofer FH101RF Wake-up Radio receiver (868.35 MHz).
  • Maxim Integrated MAX41462 OOK transmitter (868.35 MHz).
  • Analog Devices ADG918 RF switch for single antenna operation.
  • Standard I2C interface for communication with a host system.
  • Compact RFM69x-compatible footprint (16mm x 16mm).
  • Deep sleep mode controlled by SYS_SDN pin.
  • Interrupt output (SYS_IRQ) to signal received Wake-up Calls to the host.
  • Supports 6-byte custom payload transmission and reception.

Hardware

  • Main Components:
    • MCU: STMicroelectronics STM32U031
    • WuR Receiver: Fraunhofer IIS FH101RF
    • OOK Transmitter: Analog Devices MAX41462
    • RF Switch: Analog Devices ADG918
  • Footprint: RFM69HW compatible (16mm x 16mm)
  • Operating Frequency: 868.35 MHz

Pinout

Pin NameTypeDescription
VDDPowerPower Supply Voltage
GNDGroundGround Connection
SDAI/OI2C Data Line
SCLInputI2C Clock Line
SYS_SDNInputSystem Shutdown / Module Enable. Active Low. High for deep sleep.
SYS_IRQOutputInterrupt Request to Host. Active High. Signals a Wake-up event occurred.
ANTRFAntenna connection

Note: While the footprint matches RFM69, the interface is I2C, not SPI. All other pins are currently unused.

Firmware

The firmware architecture of the WakeMod module is optimized for ultra-low power consumption, keeping the STM32U031 MCU in shutdown mode as much as possible. Critical data is retained in backup registers during shutdown.

The MCU wakes up based on three primary sources:

  1. System Reset: The MCU transitions immediately back to shutdown to minimize power consumption.
  2. WuR IRQ: Upon a wake-up triggered by the FH101RF (e.g., address match), the module clears the interrupt, retrieves the interrupt source and up to 6 bytes of payload data from the WuR. This information is stored in the MCU's backup registers. The host MCU's SYS_IRQ pin is then asserted, and the module returns to shutdown.
  3. SYS_SDN Pin: If the SYS_SDN pin transitions to low, the MCU wakes up and prepares its I2C slave interface to receive commands from the host. When SYS_SDN returns high, the module re-enters shutdown.

WakeMod as a Module: Detailed Usage

Power States

  • Active Mode: When SYS_SDN is held LOW. The module is operational and ready to accept I2C commands.
  • Deep Sleep Mode: When SYS_SDN is HIGH. The module enters its lowest power state (STM32U031 in shutdown, peripherals off). I2C communication is disabled. The FH101RF Wake-up Radio remains functional and listening. To wake the module for I2C communication, bring SYS_SDN LOW. Allow a short time for the module to initialize before sending I2C commands.

Interrupt Handling (SYS_IRQ)

  • The SYS_IRQ pin becomes active (HIGH) when the FH101RF detects a valid Wake-up condition (e.g., matching address, pattern received) and the internal STM32U031 has processed this event.
  • The host system should detect this interrupt (e.g., on a rising edge).
  • After detecting the interrupt, the host should query the module using the IRQ Reason command (0x03) via I2C to determine the cause and retrieve any associated data.
  • Reading the IRQ Reason register de-asserts the SYS_IRQ pin. Reading it multiple times will return the same last IRQ reason until a new WuR event occurs.

Communication Protocol (I2C)

  • Interface: I2C Slave
  • Slave Address: 0x2E (7-bit address)
  • Speed: Max 10 kHz
  • Control: I2C communication is only possible when the SYS_SDN pin is LOW.
I2C Commands Overview

The WakeMod module supports four main commands initiated by the host MCU:

  1. WhoAmI (0x00): Reads a static device identifier. Used to verify communication.
  2. SetupWuR (0x01): Configures the FH101RF Wake-up Radio. This includes setting the 16-bit wake-up address, data rates (low and fast), and IRQ source mask. This command triggers a full calibration of the FH101RF.
  3. SendWuC (0x02): Transmits a Wake-up Call (WuC) using the MAX41462 OOK transmitter. This includes the target 16-bit wake-up address, data rates, and an optional 6-byte data payload. The internal STM32U031 uses SPI for accurate timing of the preamble and address/payload transmission to the MAX41462.
  4. IRQReason (0x03): Retrieves the reason for the last wake-up event (from the FH101RF) and any received payload data. This data is read from the STM32U031's backup registers.
I2C Transaction Structure
  • Write Operations (Host to WakeMod):

    • Used for SetupWuR (0x01) and SendWuC (0x02).
    • The host initiates an I2C WRITE transaction to the slave address (0x2E).
    • The host sends a total of 12 bytes in a single transaction:
      1. The 1-byte Command (e.g., 0x01 for SetupWuR).
      2. Followed by 11 data bytes (Bytes 0-10 as defined in the table below).
    • Example (SendWuC): START | (0x2E << 1) | W | ACK | <CMD_BYTE (0x02)> | ACK | <Data Byte 0> | ACK | ... | <Data Byte 10> | ACK | STOP
  • Read Operations (Host from WakeMod):

    • Used for WhoAmI (0x00) and IRQ Reason (0x03).
    • A combined I2C write-then-read sequence is used:
      1. Write Address Phase: Host initiates an I2C WRITE transaction to 0x2E. Send only 1 byte: the Command Byte (e.g., 0x00 for WhoAmI).
      2. Read Data Phase: Host initiates an I2C READ transaction to 0x2E. Read exactly 8 bytes of data from the module (Bytes 0-7 as defined in the table below).
    • Example (WhoAmI):
      • START | (0x2E << 1) | W | ACK | <CMD_BYTE (0x00)> | ACK | REP_START | (0x2E << 1) | R | ACK | <Read Byte 0> | ACK | ... | <Read Byte 7> | NACK | STOP
I2C Command Byte Layout
Command / RegisterValueTypeByte 0Byte 1Byte 2Byte 3Byte 4Byte 5Byte 6Byte 7Byte 8Byte 9Byte 10
WhoAmI0x00Read0x42 (ID MSB)0x42 (ID LSB)0x00 (Padding)0x00 (Padding)0x00 (Padding)0x00 (Padding)0x00 (Padding)0x00 (Padding)N/AN/AN/A
SetupWuR0x01WriteWake-up Addr [15:8]Wake-up Addr [7:0]Low Data Rate (enum)Fast Data Rate (enum)IRQ Source MaskReserved 0x00Reserved 0x00Reserved 0x00Reserved 0x00Reserved 0x00Reserved 0x00
SendWuC0x02WriteWake-up Addr [15:8]Wake-up Addr [7:0]Low Data Rate (enum)Fast Data Rate (enum)Send Add. Data Flag (LSb)Add. Data [0]Add. Data [1]Add. Data [2]Add. Data [3]Add. Data [4]Add. Data [5]
IRQ Reason0x03ReadIRQ Source FlagsRecv Add. Data Flag (LSb)Received Data [0]Received Data [1]Received Data [2]Received Data [3]Received Data [4]Received Data [5]N/AN/AN/A

Table Key:

  • Value: The byte sent by the host to select the command/register.
  • Type: Indicates if the operation is a Read from or Write to the module from the host's perspective.
  • Bytes 0-10 (Write): Data payload sent by the host after the Command Byte for write operations. Total 11 data bytes.
  • Bytes 0-7 (Read): Data payload returned by the module during the read phase of a read operation. Total 8 data bytes.
  • Wake-up Addr [15:8]: Most Significant Byte (MSB) of the 16-bit Wake-up Address.
  • Wake-up Addr [7:0]: Least Significant Byte (LSB) of the 16-bit Wake-up Address.
  • Data Rate (enum): See phy_speed Enum Values table below.
  • IRQ Source Mask/Flags: See IRQ Source Bits table below. Bitmask used in SetupWuR (Byte 4) to enable specific FH101RF interrupt sources, or flags indicating occurred interrupts in IRQ Reason (Byte 0).
  • Send Add. Data Flag (LSb): Least Significant Bit of Byte 4 for SendWuC. 1 = Additional Data in Bytes 5-10 (Add. Data [0-5]) is valid and should be sent. 0 = Additional Data is ignored (but bytes 5-10 must still be sent, typically as 0x00).
  • Recv Add. Data Flag (LSb): Least Significant Bit of Byte 1 for IRQ Reason. 1 = Received Data in Bytes 2-7 (Received Data [0-5]) is valid. 0 = No valid received data (Bytes 2-7 may be undefined).
  • Add. Data [0-5] / Received Data [0-5]: The 6-byte additional data payload for transmission or reception.
  • Reserved / Padding: These bytes must be included in the I2C transaction but their value is typically ignored or should be 0x00. They ensure the fixed transaction length.
  • N/A: Not applicable for that transaction type (Reads return 8 data bytes, Writes expect 11 data bytes following the command byte).
Data Definitions
phy_speed Enum Values (as per OLDREADME.md I2C values)

These values are used in the SetupWuR and SendWuC commands for the Low/Fast Data Rate bytes.

Value (for I2C)Speed (bps)
0x021024
0x032048
0x044096
0x058192
0x0616384
0x0732768

Note: For OOK transmission via MAX41462, data rates below 1024 bps (e.g., 256, 512 bps) do not work due to the MAX41462's auto-shutdown functionality. The FH101RF itself supports these lower rates for reception.

IRQ Source Bits (Byte 4 in SetupWuR / Byte 0 in IRQ Reason)

This byte indicates the cause of the interrupt (IRQ Reason) or configures which FH101RF events can cause an interrupt (SetupWuR). Multiple bits can be set. These bits correspond to the FH101RF's interrupt sources.

BitDescriptionNotes (Primarily for FH101RF internal events)
7Cyclic Timer AlarmCyclic timer target reached.
6RTC Timer AlarmOne of the 4 RTC timers reached its target.
5ID Match & LDRValid ID received, followed by transition to LDR mode.
4ID Match & FIFO FilledValid ID received, followed by FIFO being filled.
3Correlation Pattern MatchOOK data matches selected correlation sequence.
2FIFO Buffer FilledFIFO filled to configured length (e.g. 6 bytes for payload).
1FIFO OverflowMore data received than FIFO capacity.
0ID MatchReceived Fast Data Packet matches configured 16-bit ID.

Basic Usage Flow

  1. Power On & Enable: Ensure VDD and GND are connected. Pull SYS_SDN LOW to enable the module. Wait briefly for startup if it was in deep sleep.
  2. (Optional) Verify Communication: Perform a WhoAmI (0x00) read sequence. Check for 0x4242 in the first two bytes.
  3. Configure Receiver: Perform a SetupWuR (0x01) write sequence with:
    • Your desired 16-bit Wake-up Address.
    • The Low Data Rate and Fast Data Rate (see phy_speed enum).
    • The IRQ Source Mask to enable interrupts for relevant events (e.g., bit 0 for ID Match, bit 4 for ID Match & FIFO Filled if expecting payload).
  4. Enter Low Power (Host): The host can now enter its own low-power mode, monitoring the SYS_IRQ pin. The WakeMod is now listening. Make sure SYS_SDN is pulled high for WakeMod to enter low-power state.
  5. Handle Interrupt from WakeMod: When SYS_IRQ goes HIGH:
    • The host wakes up.
    • Perform an IRQ Reason (0x03) read sequence (possibly short delay needed before readout).
    • Parse Byte 0 (IRQ Source Flags) to understand why the interrupt occurred.
    • Check Byte 1 (Recv Add. Data Flag). If its LSB is 1, the 6 bytes of Received Data (Bytes 2-7) are valid. Process this data.
    • The read operation of IRQ Reason clears the SYS_IRQ pin on the WakeMod.
  6. (Optional) Transmit a Wake-up Call: If the host needs to wake another device:
    • Ensure SYS_SDN is LOW.
    • Perform a SendWuC (0x02) write sequence with:
      • The target device's 16-bit Wake-up Address.
      • Low Data Rate and Fast Data Rate.
      • Send Add. Data Flag (set LSB of Byte 4 to 1 if sending payload).
      • The 6-byte Add. Data payload (Bytes 5-10) if applicable.
  7. Enter Deep Sleep (WakeMod): When I2C communication is not needed for extended periods, set SYS_SDN HIGH to put the WakeMod into its lowest power deep sleep mode. The WuR (FH101RF) remains active.

Folder Structure

  • fw/Core/Src: Contains the main source files for the STM32U031 firmware, including main.c, i2c_slave.c (I2C command handling), utils.c (helper functions), and HAL drivers.
  • fw/Core/Inc: Contains the corresponding header files, including main.h, utils.h (definitions, enums).
  • Other folders (Drivers, Middlewares, etc.) contain STM32CubeMX generated files and libraries.

License

See the LICENSE file of the firmware respective hardware for details.

Parts

33
QtyValueFootprintReferences
6100nFCapacitor_SMD:C_0402_1005MetricC2, C8, C11, C15, C16, C17
410μFCapacitor_SMD:C_0402_1005MetricC3, C7, C12, C18
416pFCapacitor_SMD:C_0402_1005MetricC9, C10, C13, C14
10OhmResistor_SMD:R_0201_0603MetricR1
1100pFCapacitor_SMD:C_0201_0603MetricC4
111nHInductor_SMD:L_0201_0603MetricL3
116MHzOscillator:Oscillator_SMD_SeikoEpson_SG210-4Pin_2.5x2.0mmY2
12.2kOhmResistor_SMD:R_0402_1005MetricR2
122nHInductor_SMD:L_0201_0603MetricL1
12pFCapacitor_SMD:C_0201_0603MetricC1
13.3pFCapacitor_SMD:C_0201_0603MetricC6
130nHInductor_SMD:L_0201_0603MetricL2
132.768kHzsc-crystal:ECS_ECX-12RY1
14.7pFCapacitor_SMD:C_0201_0603MetricC5
15.6nHInductor_SMD:L_0201_0603MetricL4
1ADG918BCPZPackage_CSP:LFCSP-8-1EP_3x3mm_P0.5mm_EP1.45x1.74mmU1
1B39871B3744H110sc-ic:QUALCOMM_B3744U2
1FH101RFsc-ic:RFICIENT_QFN-16U3
1MAX41462sc-ic:MAXIM_MINI-SO-10U4
1RFM22_MODULEsc-connector:RFM22_MODULEJ2
1STM32U031K8U6Package_DFN_QFN:QFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mmU5
1SWDsc-connector:TAGCONNECT_TC2030-MCP-NLJ1

Questions

How big is the WakeMod PCB?

It measures 16 × 16 mm and has 4 copper layers, 1.06 mm thick.

What parts does the WakeMod use?

33 parts, built around the STM32U031K8U6, MAX41462GUB+, B39871B3744H110 and LQW03AW11NJ00D. 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 WakeMod KiCad files?

From the ETH-PBL/WakeMod repository on GitHub, at the commit this page was made from: the board is hw/wake-mod.kicad_pcb and its schematic hw/connector.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the WakeMod design in my own project?

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

Similar boards

  • 2 layers35 × 24 mmCommonSense, the printed circuit board in 3D

    CommonSense

    antsouchlos/commonsense-hw

    A BLE-based PCB for measuring humidity and temperature

    37 partsMIT
  • 6 layers55 × 69.8 mmPocketMate, the printed circuit board in 3D

    PocketMate

    anand2532/PocketMate

    A personal AI device for everyday life

    155 parts
  • 4 layers25.4 × 43.2 mmHum hw, the printed circuit board in 3D

    Hum hw

    tactical-snacks/hum_hw

    Hour Utilization Monitor using accelerometer and RTC to track run time

    30 partsMIT
  • 4 layers100 × 75 mmTrollerv2, the printed circuit board in 3D

    Trollerv2

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    33 parts990GPL-3.0
  • 4 layers113.3 × 23.5 mmTinyriser, the printed circuit board in 3D

    Tinyriser

    a-little-wifi/Tinyriser

    Cooler/cuter riser for Lenovo 8th/9th gen Tiny5 PCs

    33 parts170CERN-OHL-S-2.0
  • 4 layers180 × 235 mmJLCPCB, the printed circuit board in 3D

    JLCPCB

    Cimos/kicad-druid

    KiCad custom design rules (.kicad_dru) matching JLCPCB and PCBWay manufacturing capabilities

    33 parts49MIT
  • 4 layers99.4 × 34.5 mmA600 ACCEL RAM, the printed circuit board in 3D

    A600 ACCEL RAM

    PR77/A600_ACCEL_RAM

    Amiga 600 Accelerator And RAM Expansion

    33 parts35GPL-3.0
  • 4 layers39 × 40 mmKicad keybridge v2, the printed circuit board in 3D

    Kicad keybridge v2

    abdalrahimnaser/keybridge-pcb

    USB adapter board for Home Assistant

    33 parts28