PPK2 - Linux Arch

Hello community,

I have been using my PowerProfilerKit2 successfully under Windows10 for several years now.

Currently I migrate my main system to Linux and would like to use my PPK2 under linux as well. I am relatively experienced in linux, but I am not a pro for sure.

First things first:
I am using the nRF Connect App v5.2.0 and my PPK2 has the firmware version 4.3.1 and it has worked flawlessly under Windows10.

Linux:
I am using a freshly installed CashyOS, which is based on arch:

❯ uname -a
Linux PC 6.16.1-1-cachyos #1 SMP PREEMPT_DYNAMIC Sun, 17 Aug 2025 09:16:32 +0000 x86_64 GNU/Linux

❯ lsusb | grep PPK
Bus 001 Device 005: ID 1915:c00a Nordic Semiconductor ASA PPK2

I have installed JLink to "/opt/SEGGER/JLink/" and added it to the $PATH. I have read that the exact path ist very important, but this should be fine. With different paths there had been different errors before. I installed V8.62 of JLink: https://www.segger.com/downloads/jlink/ using the 64-bit TGZ Archive 

❯ /opt/SEGGER/JLink/JLinkExe -version
SEGGER J-Link Commander V8.62 (Compiled Aug 20 2025 11:14:38)
DLL version V8.62, compiled Aug 20 2025 11:13:35

Unknown command line option -version.

❯ echo $PATH
/opt/SEGGER/JLink /usr/local/sbin /usr/local/bin /usr/bin /usr/lib/jvm/default/bin /usr/bin/site_perl /usr/bin/vendor_perl /usr/bin/core_perl

I have added two rules to "/etc/udev/rules.d/". On the one hand this for the ppk:

❯ cat /etc/udev/rules.d/99-usb.rules 
SUBSYSTEM=="usb", ATTR{idVendor}=="1915", ATTR{idProduct}=="c00a" MODE="0666", GROUP="dialout"

On the other hand the the 99-jlink.rules file from the Jlink-tgz-archive.

❯ ls /etc/udev/rules.d/ | grep 99
.rw-r--r-- 21k root 23 Aug 14:19 99-jlink.rules
.rw-r--r--  95 root 23 Aug 15:22 99-usb.rules

My problem is that I am able to see the PPK2 in the power-profiler-software, but when I connect to it, it says "Connecting ..." forever.

This is the verbose log of the Power Profiler:

09:59:38.434	Initialising the bundled nrfutil device
09:59:38.485	Required component nrf-udev is not detected. Install it from https://github.com/NordicSemiconductor/nrf-udev and restart the application
09:59:38.641	Using the bundled core version for nrfutil device: 8.0.0
09:59:38.694	Getting serial port options from the persistent store for C13FB81D56E9.pc-nrfconnect-ppk
09:59:38.695	Device connected with the serial number C13FB81D56E9
09:59:38.725	Using nrfutil-device version: 2.10.2
09:59:38.725	Using nrf-device-lib version: 0.17.71
09:59:38.725	Using nrf-probe version: 0.38.0
09:59:38.725	Using JLink version: JLink_V8.62
09:59:38.726	Your version of SEGGER J-Link (8.62) is newer than the one this app was tested with (8.18). The tested version is not required, and your J-Link version will most likely work fine. If you get issues related to J-Link with your devices, use the tested version.
09:59:50.126	Selecting device with the serial number C13FB81D56E9
09:59:50.269	Selected device with the serial number C13FB81D56E9
09:59:50.270	Connected to the device with the serial number C13FB81D56E9 and family: Unknown

Unfortunately there is no real error related to the connection.

There is just one error in the log, which is related to the nrf-udev. I thought this is false-positive and should be fixed by my usb-udev-rule. But Iam not sure.

Is anyone able to use the ppk2 in a similar setup?
Did someone have problems like this and was able to solve them?
Should I downgrade the JLink installation to 8.18?

Greetings from germany and best regards
Washee

  • Well... I think I solved it by myself.

    I had a closer look to the linked nrf-udev github repo: https://github.com/NordicSemiconductor/nrf-udev/tree/main/nrf-udev_1.0.1-all/lib/udev/rules.d

    And replaced my "99-usb.rules" from /etc/udev/rules.d/ with those two:

    # 71-nrf.rules
    ACTION!="add", SUBSYSTEM!="usb_device", GOTO="nrf_rules_end"
    
    # Set /dev/bus/usb/*/* as read-write for all users (0666) for Nordic Semiconductor devices
    SUBSYSTEM=="usb", ATTRS{idVendor}=="1915", MODE="0666"
    
    # Flag USB CDC ACM devices, handled later in 99-mm-nrf-blacklist.rules
    # Set USB CDC ACM devnodes as read-write for all users
    KERNEL=="ttyACM[0-9]*", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1915", MODE="0666", ENV{NRF_CDC_ACM}="1"
    
    LABEL="nrf_rules_end"

    # 99-modemmmanager-acm-fix.rules
    # Previously flagged nRF USB CDC ACM devices shall be ignored by ModemManager
    ENV{NRF_CDC_ACM}=="1", ENV{ID_MM_CANDIDATE}="0", ENV{ID_MM_DEVICE_IGNORE}="1"

    This solved my problem!

    Everything seems to work like a charm.

    This case may help other folks, who struggle setting their ppk2 up in linux.

    - the path for jlink is super important "/opt/SEGGER/JLink/"

    - the correct /etc/udev/rules.d/-rules are important

Related