Skip to content

About

Headless CLI for Nordic Power Profiler Kit II -- Long Running Power Measurements - Agents Enabled

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

ppk2

CLI for Nordic Power Profiler Kit II — measures sub-uA to 600mA at 100ksps.

Install

curl -sSL https://raw.githubusercontent.com/matterizelabs/nrf-ppk2-cli/main/install.sh | bash

Install a specific version:

curl -sSL https://raw.githubusercontent.com/matterizelabs/nrf-ppk2-cli/main/install.sh | bash -s -- v0.2.0

Default install path is $HOME/.local/bin. Override with INSTALL_DIR:

curl -sSL https://raw.githubusercontent.com/matterizelabs/nrf-ppk2-cli/main/install.sh | INSTALL_DIR=/usr/local/bin bash

Remove

curl -sSL https://raw.githubusercontent.com/matterizelabs/nrf-ppk2-cli/main/install.sh | bash -s -- remove

Global flags

Flag Description
-p, --port Serial port path (e.g. /dev/ttyACM0)
-s, --serial Device serial number (auto-discovers port)
--json Output machine-readable JSON

If neither --port nor --serial given, uses first PPK2 found.

Usage

List devices

ppk2 list
ppk2 list --json

Device setup

ppk2 mode source       # DUT powered by PPK2
ppk2 mode ampere       # DUT powered externally
ppk2 voltage 3300      # Set VDD to 3.3V (800–5000mV)
ppk2 power on          # Enable DUT power
ppk2 power off         # Disable DUT power

Measure

ppk2 measure                           # Run until Ctrl+C (live stats on stderr)
ppk2 measure --duration 5              # 5 seconds, full 100ksps
ppk2 measure --duration 10 --save out.ppk2
ppk2 measure --duration 5 --json       # JSON summary only (no live output)
ppk2 measure --rate 1000               # Downsample to 1ksps
ppk2 measure --rate 100 --save slow.ppk2
Flag Description
-d, --duration Seconds to measure (omitted = run until Ctrl+C)
--save Save to .ppk2 file
-r, --rate Downsample to N samples/sec (default: 100000). Rates not dividing 100000 evenly are rounded to nearest divisor
--json JSON summary instead of text

Live status updates in-place every 500ms:

2.5s  avg 41.9uA  138.4uW

Text summary:

duration 5.0s  samples 500000  avg 42.3uA  charge 0.059uAh  power 140uW

Trigger (analog threshold)

Capture spikes with pre/post-trigger buffering at full 100ksps:

ppk2 trigger --threshold 5000 --edge rising
ppk2 trigger --threshold 1000 --edge falling --pre-trigger 200 --post-trigger 500
ppk2 trigger --threshold 100 --edge both --save spike.ppk2
Flag Description
-t, --threshold Current threshold in uA
-e, --edge rising, falling, both (default: rising)
--pre-trigger Milliseconds before trigger (default: 100)
--post-trigger Milliseconds after trigger (default: 1000)
--save Save captured window to .ppk2 file

File operations

ppk2 info capture.ppk2
ppk2 info capture.ppk2 --json
ppk2 report *.ppk2
ppk2 report *.ppk2 --json
ppk2 convert capture.ppk2                    # → capture.csv
ppk2 convert capture.ppk2 --output out.csv

Daemon

Long-running background measurement. Forks to background, communicates via Unix socket:

ppk2 daemon start                    # Background, prints socket path + PID
ppk2 daemon status                   # Realtime stats (JSON)
ppk2 daemon stop                     # Stop and finalize autosave
ppk2 daemon stop --save out.ppk2     # Stop with named .ppk2 file
ppk2 daemon start --rate 100         # Background daemon at 100sps

Socket at ~/.local/state/ppk2/<serial>/daemon.sock. Autosave writes .ppk2 files to ~/.local/share/ppk2/autosave/<serial>/.

Firmware

ppk2 firmware info

Outputs firmware version and calibration status:

firmware: PCA63100 v1.2.4-db16a94 (calibrated)

Recover

ppk2 recover
ppk2 recover --serial F057566F0FD6
ppk2 recover --json

Lists orphaned autosave files from crashed/disconnected sessions.

Config

Optional. Run ppk2 config init to create ~/.config/ppk2/config.toml. Defaults used if no file exists. View with ppk2 config show.

[defaults]
mode = "source"
voltage_mv = 3300

[behavior]
auto_power = "session"   # on during measure, off after (default)
# auto_power = "never"   # manual power control
# auto_power = "always"  # keep power on

[autosave]
enabled = true
interval_s = 30

Env var overrides: PPK2_VOLTAGE, PPK2_MODE, PPK2_AUTOSAVE_DIR, PPK2_PORT.

Example workflows

Measure BLE sleep current at 100sps for long session:

ppk2 mode source
ppk2 voltage 3000
ppk2 power on
ppk2 measure --rate 100 --duration 300 --save sleep.ppk2
ppk2 info sleep.ppk2

Capture TX current spike:

ppk2 mode source
ppk2 voltage 3300
ppk2 power on
ppk2 trigger --threshold 15000 --pre-trigger 50 --post-trigger 200 --save tx.ppk2
ppk2 convert tx.ppk2 --output tx.csv

Long-term background logging:

ppk2 daemon start --rate 10
# ... hours/days pass ...
ppk2 daemon status
ppk2 daemon stop --save long_run.ppk2

Development

nix develop
cargo build --release
cargo test
cargo clippy -- -D warnings

HIL tests (tests/hil.rs) require a physical PPK2: cargo test -- --test-threads=1.

About

Headless CLI for Nordic Power Profiler Kit II -- Long Running Power Measurements - Agents Enabled

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages