CLI for Nordic Power Profiler Kit II — measures sub-uA to 600mA at 100ksps.
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
curl -sSL https://raw.githubusercontent.com/matterizelabs/nrf-ppk2-cli/main/install.sh | bash -s -- remove
| 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.
ppk2 list
ppk2 list --json
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
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
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 |
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
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>/.
ppk2 firmware info
Outputs firmware version and calibration status:
firmware: PCA63100 v1.2.4-db16a94 (calibrated)
ppk2 recover
ppk2 recover --serial F057566F0FD6
ppk2 recover --json
Lists orphaned autosave files from crashed/disconnected sessions.
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 = 30Env var overrides: PPK2_VOLTAGE, PPK2_MODE, PPK2_AUTOSAVE_DIR, PPK2_PORT.
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
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.