Skip to the content
PCBKitNew board
4 layers70 × 54.5 mmInt debugger, the printed circuit board in 3D

Int debugger

TUDSSL/DIPS

This is the official public repository for DIPS: Debugger for Intermittently-Powered Systems. The repository consists of all components that make DIPS: - Hardware - Debugger Firmware - Emulator Firmware - Emulator Host…

Size
70 × 54.5 mm
Copper layers
4
Thickness
1.6 mm
Parts
224
Nets
175
Pads
773
Tracks, vias
1,702, 382
Pours
6
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
16 Oct 2022
Updated
27 Jun 2023

Overview

Int debugger is an open-source printed circuit board by TUDSSL, from the TUDSSL/DIPS repository on GitHub. It is a 4-layer board of 70 × 54.5 mm with 224 parts on 175 nets, routed with 1,702 tracks and 382 vias.

It is built around the STM32F103RET6, STM32F373CCT6 and OPA192IDBV, with the INA186A1IDDF, 74LVC2T45DC and TS5A23159DGSR among its other parts. Its parts include 74 capacitors, 68 resistors, 21 ICs, 8 connectors and 5 diodes. It belongs with the interfaces and adapters boards and the STM32 boards of this library.

Main components

12

README

README.md

DIPS

This is the official public repository for DIPS: Debugger for Intermittently-Powered Systems. The repository consists of all components that make DIPS:

Project Overview

Rationale

Intermittently-Powered or Battery-Free systems are low-powered embedded systems that experience frequent power failures. In recent years intermittently-powered systems have been explored excessively by the research community, but there was no good way of debugging these systems. DIPS aims to address this challenge.

Debugging Intermittently-Powered Systems

Common debuggers, like the J-link, are perfect for debugging continuously-powered systems but will lose connection on a power failure when debugging intermittently-powered systems, making it useless for debugging battery-free systems. On top of that, intermittently-powered systems come with their own set of challenges by introducing new architectures like checkpointing. DIPS allows for continuous debugging despite power failures by reconnecting automatically and restoring the debugging state (Breakpoints) to the device under test. Scripts supplement the functionality of DIPS, allowing for automated tests of memory and peripheral consistency.

Features:

DIPS integrates a fully featured emulator with close integration with an onboard hardware debugger. It can power devices under test through various modes and features current measurement capability. A key feature is the ability to pause emulation during debugger interaction, such as breakpoints. The emulator supports the following modes:

  • Constant Voltage
  • Sawtooth
  • Square
  • Triangle
  • Virtual Buck-Boost (Allows for replaying energy harvesting traces to the device under test)
  • Passive mode (Only takes over powering the device when prompted during debugging, requires passive debugging mode mon passive_mode enable)

The hardware debugger supports, through the associated console application, supports the following features:

  • energy_guards energy-neutral code sections where the emulator pauses
  • energy_breakpoints that only trigger if the voltage is lower than the specified threshold
  • dips_mem_check memory state consistency verification script, configured in dips_testing.json
  • dips_peripheral_check peripheral state consistency verification script, configured in dips_testing.json
  • Printing (DIPS_PRINTF), asserts (DIPS_ASSERT) and manually attaching (DIPS_ATTACH) through a simple C interface
  • Passive operation (wait_connect) where the debugger only connects when prompted through a pin.

Hardware

Hardware Debugger

The hardware design of the debugger centers around a STM32F103RET MCU (A) and is based on the Black Magic Debug Probe. It is able to communicate with the energy emulator through SPI. The MCU interfaces with the DUT through SWD/JTAG or SBW (E), I/O interrupt pins and acts as a UART-USB bridge (D). To translate the signals to the DUT voltage, first, the DUT voltage is buffered using a low input bias current buffer amplifier OPA192. Next, all the interfaces with the DUT are level shifted by level translators (C) using the buffered DUT voltage. The debugger connects to the PC with USB (B).

Energy Emulator

Central to the energy emulator is the low-noise TPS7A87 (I) linear regulator. The regulator generates the adjustable supply rail to the DUT (J). Power consumption by the DUT is measured by two INA186 current sense amplifiers (H). The first amplifier with a 5.6 Ω sense resistor measures large currents without imposing a high burden voltage. The second amplifier with a 1000 Ω sense resistor measures low currents and is able to be bypassed at large currents preventing high burden voltages. Two analog switches allow for quickly disabling the output and discharging the output through a 47 Ω resistor. The emulator is controlled by a STM32F373 MCU (G). With its on-board DAC DIPS is able to adjust the linear regulator and samples the output voltage and the output of the current sense amplifiers (each using one of its dedicated on-board Sigma Delta ADCs). The energy emulator connects to the PC with USB (F)

Design files

In the hardware folder both the KICAD design files are provided together with a PDF schematic and gerbers.

Getting Started

This repository has all information to build your own DIPS. Below we describe building and executing the complete repository of DIPS, including hardware, debugger software, emulator software and both emulator and console applications.

Building the Debugger Firmware

The hardware debugger firmware is based on the Black Magic Probe and can be found in the /int-debugger-firmware folder

Build Process

After cloning the repository one can compile the firmware in two ways, first is by running it as a PlatformIO project or by building it from scratch using the provided cmake files running the following section:

text
$ cd int-debugger-firmware
$ pio run

After building, you can upload the firmware to the MCU using your favourite flashing method whilst powering the platform using USB.

Last Tested Software Versions

This software was build successfully with these software versions:

  • CMake version 3.26.3
  • arm-none-eabi-gcc version 13.1.0
  • arm-none-eabi-newlib version 4.3.0.20230120
  • arm-none-eabi-binutils version 2.40
  • PlatformIO version 6.1.7

The Emulator Firmware

The emulator firmware is located in the /int-debugger-emulator folder

Build Process

After cloning the repository the emulator can be compiled and build by running the enclosed cmake commands:

text
$ cd int-debugger-emulator
$ mkdir build
$ cd build
$ cmake ..
$ make

After building, you can upload the firmware to the MCU using your favourite flashing method whilst powering the platform using USB.

Note on the Emulator Firmware

The firmware is based upon the FreeRTOS framework, allowing real-time switching of tasks required for the emulator.

Last Tested Software Versions

This software was build successfully with these software versions:

  • CMake version 3.26.3
  • arm-none-eabi-gcc version 13.1.0
  • arm-none-eabi-newlib version 4.3.0.20230120
  • arm-none-eabi-binutils version 2.40
  • Protobuf version 21.12

Building the Emulator Host Software

The next part of software runs on the host PC and is used for communicating with the hardware emulator. The sofware can be found in the /int-debugger-emulator-host folder.

Build Process

After cloning the repository the emulator host application can be compiled and build by running the following commands:

text
$ cd int-debugger-emulator-host
$ cmake .
$ make
Last Tested Software Versions

This software was build successfully with these software versions:

  • QT version 5.15.9
  • HighFive commit 00dad7172c
  • Protobuf version 21.12
  • HDF5 version 1.14.1

The DIPS Console Software

The next part of software also runs on the host PC and is used as a GDB wrapper, allowing the added features of DIPS. The sofware can be found in the /int-debugger-console folder.

Setup

Since the DIPS console is a python executable, there is no need for compilation. Install the python libraries mentioned in the requirements.txt file and you should be good to go.

Last Tested Software Versions

This software was build successfully with these software versions:

  • Python version 3.11.3
  • Python-pyGDBmi version 0.11.0.0
  • Python-pyserial version 3.5
  • Python-prompt_toolkit version 3.0.38
  • Python-cmsis_svd version 0.4
Execute DIPS Console Application

The DIPS console application can be started by calling the python3 main.py, if you have an elf-file binary, you can load this by adding this as extra parameter python3 main.py firmware.elf. Other GDB parameters and queries from the command line are avaliable as well.

Connecting to DIPS

If you have your DIPS connected over USB you can connect to the hardware by running the connect command. The console will automatically search for a DIPS serial connection, establish this connection and connect to the attached device under test. Now one can start debugging intermittenlty-powered systems with DIPS, just like debugging regular powered embedded systems. Manual connection to DIPS is also possible by running the following sequence:

text
(gdb) tar ext /dev/ttyACM0
(gdb) mon s
(gdb) attach 1
Sample session

After connecting to the DIPS and the device under test, regular arm-none-eabi-gdb commands are availble for use:

text
> python3 main.py example.elf
...<GDB Copyright message>
(gdb) connect
Remote debugging using /dev/ttyACM0
Target voltage: 3.00V
Available Targets:
No. Att Driver
 1      STM32F40x M3/M4
Attaching to program: <code_folder>/example.elf, Remote target
0x800007c in main ()
(gdb) load
Loading section .text, size 0x5868 lma 0x8000000
Loading section .data, size 0x9e0 lma 0x8005868
Loading section .rodata, size 0x254 lma 0x8006248
Start address 0x800007c, load size 25756
Transfer rate: 31 KB/sec, 919 bytes/write.
(gdb) b main
(gdb) c
Breakpoint 1 at 0x80000e8: file <code_folder>/main.c, line 20.
(gdb)

How to Cite This Work

The results of this project have been published in a peer-reviewed academic publication (from which all technical figures in this file originate). Details of the publication are as follows.

To cite this publication please use the following BiBTeX entry.

text
@inproceedings{dewinkel:sensys:2022:dips,
 author = {de Winkel, Jasper and Hoefnagel, Tom and Blokland, Boris and Pawe\l{}czak, Przemys\l{}aw},
 title = {{DIPS}: Debug Intermittently-Powered Systems Like Any Embedded System},
 booktitle = {Proc. SenSys},
 year = {2022},
 address = {Boston, MA, USA},
 date = nov # " 6--9",
 publisher = {ACM},
 url = {https://doi.org/10.1145/3560905.3568543}
}

Acknowledgments

This research project was supported by Netherlands Organisation for Scientific Research, partly funded by the Dutch Ministry of Economic Affairs and Climate Policy, through TTW Perspective program ZERO (P15-01) within Project P1.

Copyright

Copyright (C) 2022 TU Delft Embedded Systems Group/Sustainable Systems Laboratory.

MIT Licence or otherwise specified. See license file for details.

Parts

224
QtyValueFootprintReferences
33100nFCapacitor_SMD:C_0603_1608MetricC1, C2, C3, C4, C10, C11, C12, C17, C19, C20, C21, C22, C23, C38, C41, C43 +17
1810kResistor_SMD:R_0603_1608MetricR5, R14, R15, R17, R18, R30, R43, R45, R48, R49, R50, R51, R52, R53, R66, R67 +2
18TestPointTestPoint:TestPoint_Keystone_5000-5004_MiniatureTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP10, TP11, TP12, TP13, TP15, TP16, TP17, TP18, TP24 +2
130Resistor_SMD:R_0603_1608MetricR6, R8, R31, R34, R36, R37, R41, R44, R46, R47, R54, R57, R60
1110nFCapacitor_SMD:C_0603_1608MetricC28, C29, C34, C35, C44, C50, C51, C63, C64, C65, C66
11S2761-46Rjaspers_footprints:S2761-46RTP14, TP19, TP20, TP21, TP22, TP23, TP25, TP26, TP27, TP28, TP29
1022uFCapacitor_SMD:C_0603_1608MetricC18, C25, C26, C30, C31, C32, C33, C36, C37, C48
81uFCapacitor_SMD:C_0603_1608MetricC13, C16, C42, C49, C52, C54, C62, C72
8DNPCapacitor_SMD:C_0603_1608MetricC39, C40, C58, C59, C60, C61, C67, C70
61MResistor_SMD:R_0603_1608MetricR55, R56, R58, R59, R63, R64
574LVC2T45DCPackage_SO:VSSOP-8_2.3x2mm_P0.5mmU1, U2, U3, U4, U5
410.7KResistor_SMD:R_0603_1608MetricR20, R22, R26, R28
410pFCapacitor_SMD:C_0603_1608MetricC14, C15, C24, C27
422Resistor_SMD:R_0603_1608MetricR11, R12, R23, R24
4Jumper_NC_Smalljaspers_footprints:SolderJumper-small-ncJP2, JP3, JP4, JP5
4MountingHoleMountingHole:MountingHole_2.2mm_M2_DIN965_Pad_TopBottomH1, H2, H3, H4
34k7Resistor_SMD:R_0603_1608MetricR13, R16, R29
3DNPResistor_SMD:R_0603_1608MetricR3, R7, R25
3SW_PushButton_Switch_SMD:SW_SPST_B3U-1000PSW1, SW2, SW3
3TS5A23159DGSPackage_SO:VSSOP-10_3x3mm_P0.5mmU6, U16, U21
2100Resistor_SMD:R_0603_1608MetricR1, R2
2100Resistor_SMD:R_Array_Convex_4x1206RN1, RN2
215kResistor_SMD:R_0603_1608MetricR33, R62
21k5Resistor_SMD:R_0603_1608MetricR10, R39
233.2KResistor_SMD:R_0603_1608MetricR19, R21
247Resistor_SMD:R_1206_3216MetricR42, R65
28MHZjaspers_footprints:Crystal_SMD_Abracon_ABM3B-4Pin_5.0x3.2mmY1, Y2
2DNP 30kResistor_SMD:R_0603_1608MetricR32, R61
2INA186A1DDPackage_TO_SOT_SMD:SOT-23-8U14, U17
2SWD_10jaspers_footprints:ftsh-105-01-f-dv-kJ3, J6
2TPS7A87jaspers_footprints:Texas-WQFN-20U10, U12
2USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U9, U13
2USB_B_Microjaspers_footprints:USB_Micro-B_Molex-105017-0001J4, J5
112Resistor_SMD:R_0603_1608MetricR4
118kResistor_SMD:R_0603_1608MetricR40
11kResistor_SMD:R_0603_1608MetricR35
12k2Resistor_SMD:R_Array_Convex_4x1206RN3
136kResistor_SMD:R_0603_1608MetricR27
15.6Resistor_SMD:R_0603_1608MetricR38
1501953-0407jaspers_footprints:Molex_Pico-Clasp_501953-0407_1x04-1MP_P1.00mm_HorizontalJ2
1501953-0507jaspers_footprints:Molex_Pico-Clasp_501953-0507_1x05-1MP_P1.00mm_HorizontalJ7
1DMG1012TPackage_TO_SOT_SMD:SOT-523Q1
1D_SchottkyDiode_SMD:D_SOD-323FD5
1GREENLED_SMD:LED_0603_1608MetricD1
1Jumper_NO_Smalljaspers_footprints:SolderJumper-small-no-150umJP1
1MAX6070Package_TO_SOT_SMD:SOT-23-6U18
1MCP6V82Package_SO:MSOP-8_3x3mm_P0.65mmU20
1OPA192xDBVPackage_TO_SOT_SMD:SOT-23-5U7
1ORANGELED_SMD:LED_0603_1608MetricD3
1REDLED_SMD:LED_0603_1608MetricD2
1RF_Shield_One_PieceRF_Shielding:Laird_Technologies_BMI-S-209-F_29.36x18.50mmJ8
1STM32F103RETxPackage_QFP:LQFP-64_10x10mm_P0.5mmU8
1STM32F373CCTxPackage_QFP:LQFP-48_7x7mm_P0.5mmU11
1SWD_10jaspers_footprints:FTSH-105-01-F-D-RA-KJ1
1SolderJumper_3_Bridged12Jumper:SolderJumper-3_P1.3mm_Bridged12_Pad1.0x1.5mmJP6
1TS5A3159ADBVRPackage_TO_SOT_SMD:SOT-23-6U15
1TUD_LOGOjaspers_footprints:DELFT_LOGO2U19
1YELLOWLED_SMD:LED_0603_1608MetricD4

Questions

How big is the Int debugger PCB?

It measures 70 × 54.5 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Int debugger use?

224 parts, built around the STM32F103RET6, STM32F373CCT6, OPA192IDBV and INA186A1IDDF. 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 Int debugger KiCad files?

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

Can I use the Int debugger design in my own project?

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

Similar boards

  • 4 layers64 × 115 mmAmp board, the printed circuit board in 3D

    Amp board

    splogdes/Audio-Engine-A5-Input-Stage

    198 parts
  • 4 layers79.2 × 152.4 mm401 VCO, the printed circuit board in 3D

    401 VCO

    sgreene30/Synthesis-Projects

    144 parts
  • 6 layers76.5 × 339.8 mmFmc host, the printed circuit board in 3D

    Fmc host

    open-ephys/onix-fmc-host

    FMC board to acquire from ONIX headstages and breakout boards

    320 parts5
  • 4 layers40 × 40 mmHiFiDAC, the printed circuit board in 3D

    HiFiDAC

    BlockWorker/ModularAudio

    Compact, modular, versatile, hi-fi audio system concept.

    105 parts2
  • 6 layers86.3 × 91.9 mmEps re project, the printed circuit board in 3D

    Eps re project

    spacelab-ufsc/eps-re-hardware

    Hardware project of the EPS-RE module

    372 parts2CERN-OHL-S-2.0
  • 4 layers54.6 × 54.6 mmECP5, the printed circuit board in 3D

    ECP5

    gildobjanschi/ECP5_BGA381_RISCV

    ECP5 FPGA with 8MB PSRAM and extension header

    115 parts1MIT
  • 4 layers54.6 × 54.6 mmECP5, the printed circuit board in 3D

    ECP5

    gildobjanschi/ECP5_BGA381_RISCV_EXT

    Extension board for ECP5_BGA381_RISCV

    78 parts1MIT