Using CPC SPI on Linux Border Router#

This document refers to a setup build using:

  • BRD4271A as the Silicon Labs Radio Board

  • BRD8016A as the Silicon Labs Raspberry Pi Adapter Board

  • A Raspberry Pi as the host

Border RouterBorder Router

Note: Pin mapping will need to be adapted to any custom hardware.

RCP SPI Connections#

SPI signals need to be allocated to pins connected to the host via the Radio Board connectors and the BRD8016A Raspberry Pi connector shown below.

xG25 Software Configuration#

SPI signal

sl_cpc_drv_secondary_spi_eusart_exp_config.h

RCP values

xG25 GPIO

IRQ

SL_CPC_DRV_SPI_EXP_IRQ_PORT / SL_CPC_DRV_SPI_EXP_IRQ_PIN

SL_GPIO_PORT_A / 5

EFR32_PA5

CS

SL_CPC_DRV_SPI_EXP_CS_PORT / SL_CPC_DRV_SPI_EXP_CS_PIN

SL_GPIO_PORT_B / 4

EFR32_PB4

(MISO)CIPO/RX

SL_CPC_DRV_SPI_EXP_CIPO_PORT / SL_CPC_DRV_SPI_EXP_CIPO_PIN

SL_GPIO_PORT_C / 1

EFR32_PC1

(MOSI)COPI/TX

SL_CPC_DRV_SPI_EXP_COPI_PORT / SL_CPC_DRV_SPI_EXP_COPI_PIN

SL_GPIO_PORT_C / 0

EFR32_PC0

SCLK

SL_CPC_DRV_SPI_EXP_SCLK_PORT / SL_CPC_DRV_SPI_EXP_SCLK_PIN

SL_GPIO_PORT_C / 2

EFR32_PC2

xG25 Pins#

SPI signal

xG25 GPIO

xG25 Pin

WSTK signal

IRQ

EFR32_PA5

34

WSTK_P4

CS

EFR32_PB4

24

WSTK_P7

(MISO)CIPO/RX

EFR32_PC1

2

WSTK_P3

(MOSI)COPI/TX

EFR32_PC0

1

WSTK_P1

SCLK

EFR32_PC2

3

WSTK_P5

BRD4271A Pins#

SPI signal

BRD4271A signal

Radio Board Pin

IRQ

WSTK_P4

P201_7

CS

WSTK_P7

P201_10

(MISO)CIPO/RX

WSTK_P3

P201_6

(MOSI)COPI/TX

WSTK_P1

P201_4

SCLK

WSTK_P5

P201_8

BRD8016A Pins#

SPI signal

Radio Board Pin

BRD8016A signals

RPi GPIO

IRQ

P201_7

RADIO_P4

RPI_GPIO22

CS

P201_10

RADIO_P7

RPI_GPIO8

(MISO)CIPO/RX

P201_6

RADIO_P3

RPI_GPIO9

(MOSI)COPI/TX

P201_4

RADIO_P1

RPI_GPIO10

SCLK

P201_8

RADIO_P5

RPI_GPIO11

Raspberry Header Pins#

SPI signal

RPi GPIO

RPi Header pin

RPi SPI signal

IRQ

RPI_GPIO22

15

CS

RPI_GPIO8

24

RPI_SPI_CS

(MISO)CIPO/RX

RPI_GPIO9

21

RPI_SPI_MISO

(MOSI)COPI/TX

RPI_GPIO10

19

RPI_SPI_MOSI

SCLK

RPI_GPIO11

23

RPI_SPI_SCLK

Raspberry Software Settings#

SPI signal

RPi SPI signal

RPi Software settings

RPi Value

IRQ

cpcd.conf spi_rx_irq_gpio

22

CS

RPI_SPI_CS

device tree spi0_cs_pins[0]

0x08

(MISO)CIPO/RX

RPI_SPI_MISO

device tree spi0_pins[0]

0x09

(MOSI)COPI/TX

RPI_SPI_MOSI

device tree spi0_pins[1]

0x0a

SCLK

RPI_SPI_SCLK

device tree spi0_pins[2]

0x0b

RCP Project#

CPC Addition to Wi-SUN RCP Project#

Add Wi-SUN / Application / Wi-SUN RCP / Wi-SUN Border Router RCP - CPC Interface.

By default, this component uses UART. Follow the steps below to add CPC to your Wi-SUN project.

  1. Install the Services / Co-Processor Communication / Secondary Device / Driver / CPC Secondary - SPI: Recommended SPI interface.

    CPC SPICPC SPI

    This creates the default exp CPC instance under Services / Co-Processor Communication / Secondary Device / Driver / CPC Secondary - SPI (EUSART) / exp.

    CPC SPICPC SPI

  2. Click Configure to check the SPI pin configuration, making sure it matches the RCP SPI connections for BRD4271A/BRD8016A/RPi hardware.

    CPC SPICPC SPI

  3. Press the Pin Tool button and filter on 'SPI' to get a pin view of SPI signals.

    CPC SPICPC SPI

  4. Build your CPC project.

  5. Flash it on the RCP, clearing the flash before flashing (to get rid of any remaining NVM data).

  6. Insert the RCP Radio Board on the BRD8016A Adapter Board.

  7. Make sure that the expansion board switch is set to the High Power (LDO) mode.

  8. Insert the BRD8016A on the Raspberry Pi header.

Border Router#

Note: As from 23Q4/GSDK V4.3.2, the CPC component in the GSDK will use the CPC Protocol v5, so the cpcd installation on the Border Router also needs to use this version.

First of all CPC needs to be able to communicate with the RCP, independently from wsbrd.

To achieve this, cpcd needs to be compiled with the CPC Protocol v5, as follows:

Removing previous cpcd / libcpc Installs#

sudo rm -rf /usr/local/lib/arm-linux-gnueabihf/*

Installing cpcd with Protocol V6#

git clone https://github.com/SiliconLabs/cpc_daemon.git cpc_daemon
cd cpc_daemon/
cat CMakeLists.txt | head
mkdir build
cd build/
cmake ../
make
sudo make install
sudo ldconfig

Checking cpcd Protocol Version#

$ cat ~/cpc_daemon*/CMakeLists.txt | grep CPC_PROTOCOL_VERSION
set(CPC_PROTOCOL_VERSION "6")

Checking cpcd / libcpc Installs#

$ ls -al /usr/local/lib/arm-linux-gnueabihf/
total 188
drwxr-xr-x 3 root root  4096 Jul  9 11:35 .
drwxr-xr-x 6 root root  4096 Apr 18  2024 ..
lrwxrwxrwx 1 root root    11 Apr 19  2024 libcpc.so -> libcpc.so.3
lrwxrwxrwx 1 root root    17 Jul  9 11:35 libcpc.so.3 -> libcpc.so.4.7.0.0
-rw-r--r-- 1 root root 87776 Jun  7  2024 libcpc.so.4.4.2.0
-rw-r--r-- 1 root root 88160 Jul  9 11:34 libcpc.so.4.7.0.0
drwxr-xr-x 2 root root  4096 Jul  9 11:35 pkgconfig
 $ cpcd --version
4.7.0.0
GIT commit: 4ff183d9d1ec888812bff3c3562e4961594e5bb5
GIT branch: refs/heads/main

Enabling SPI via the Device Tree#

In /boot/config.txt, comment the UART line and add the SPI overlay as follows:

[all]
## Disable WiFi and Bluetooth, both potentially using UART
dtoverlay=disable-bt
dtoverlay=disable-wifi

# Disable UART
#enable_uart=1

# Enable SPI for CPC host/RCP communication
dtoverlay=spi0-1cs

# Generate a reset on GIPO 23, keep the level high after reset
gpio=23=op,dh

Note: A reboot is required after modifying /boot/config.txt.

  • Reboot the Raspberry Pi

cpcd SPI configuration file#

(only active lines are shown)

The default configuration file is /usr/local/etc/cpcd.conf. To use another, use the --conf option.

$ cat /usr/local/etc/cpcd.conf | grep -v ^$ | grep -v ^#
instance_name: cpcd_0
bus_type: SPI
spi_device_file: /dev/spidev0.0
spi_rx_irq_gpio_chip: gpiochip0
spi_rx_irq_gpio: 22
spi_device_bitrate: 1000000
bootloader_recovery_pins_enabled: false
bootloader_wake_gpio_chip: gpiochip0
bootloader_wake_gpio: 24
bootloader_reset_gpio_chip: gpiochip0
bootloader_reset_gpio: 23
stdout_trace: false
trace_to_file: false
traces_folder: /tmp/
enable_frame_trace: false
rlimit_nofile: 2000
disable_encryption: true
binding_key_file: ~/.cpcd/binding.key

wsbrd Configuration File for CPC#

The changes are similar for UART and SPI mode, since the bus mode is selected in the cpcd configuration file (shown here with traces enabled).

$ cat ~/wsbrd.conf | grep -v ^$ | grep -v ^#
user = wsbrd
group = wsbrd
cpc_instance = cpcd_0
ipv6_prefix = fd12:3456::/64
network_name = Linux_spi_EU_33_5
domain = EU
chan_plan_id = 33
phy_mode_id = 5
phy_operating_modes = auto
key = /home/pi/wisun-br-linux/examples/br_key.pem
certificate = /home/pi/wisun-br-linux/examples/br_cert.pem
authority = /home/pi/wisun-br-linux/examples/ca_cert.pem
color_output = no
pcap_file = /tmp/dump.pcapng
trace = hif

The only line relevant to using CPC is (on top of commenting out UART-related lines):

cpc_instance = cpcd_0

Setup Cross-Check#

Using the BRD8016A Wireless Expansion board: you will need to mount the expansion board on the Raspberry Pi and make sure that the expansion board switch is set to the high power mode.

$ cat /etc/wsbrd.conf | grep cpc_instance
cpc_instance = cpcd_0
$ cat /usr/local/etc/cpcd.conf | grep instance_name
instance_name: cpcd_0

SPI Signals Allocation Checks#

Raspberry Pi Device Tree Check#

dtc -I fs /sys/firmware/devicetree/base

gives (abstracts) spi0 information (comment lines added for clarity):

                        spi0_pins {
                                brcm,function = <0x04>;
                                phandle = <0x0e>;
                                #            MISO MOSI SCLK
                                brcm,pins = <0x09 0x0a 0x0b>;
                        };
                        spi0_cs_pins {
                                brcm,function = <0x01>;
                                phandle = <0x0f>;
                                #            CS0
                                brcm,pins = <0x08>;
                        };

Raspberry Pi GPIOs Check#

These are controlled by the device tree.

Note: Remember that changes to the device tree require a reboot to be taken into account

cat /sys/kernel/debug/gpio | grep SPI

 gpio-7   (SPI_CE1_N           )
 gpio-8   (SPI_CE0_N           |spi0 CS0            ) out hi ACTIVE LOW
 gpio-9   (SPI_MISO            )
 gpio-10  (SPI_MOSI            )
 gpio-11  (SPI_SCLK            )
 gpio-43  (SPIFLASH_CE_N       )

Communication Checks#

cpcd/RCP communication (without wsbrd)#

Note: A reboot is required after modifying /boot/config.txt, so reboot if you haven't done so yet.

cpcd manual start#

Use ps -C cpcd to make sure no cpcd process is running. Use sudo kill <cpcd PID> to kill it if it's running.

A full log (with traces enabled) is provided below.

Click to expand and view the full log
 $ sudo cpcd --conf /usr/local/etc/cpcd.conf
WARNING in function 'main' in file /home/pi/cpc_daemon/main.c at line #68 : Running CPCd as 'root' is not recommended. Proceed at your own risk.
[2025-07-09T13:10:44.177112Z] Info : [CPCd v4.7.0.0] [Library API v3] [RCP Protocol v6]
[2025-07-09T13:10:44.177422Z] Info : Git commit: 4ff183d9d1ec888812bff3c3562e4961594e5bb5 / branch: refs/heads/main
[2025-07-09T13:10:44.177487Z] WARNING : In function 'main' in file /home/pi/cpc_daemon/main.c at line #68 : Running CPCd as 'root' is not recommended. Proceed at your own risk.
[2025-07-09T13:10:44.177578Z] Info : Reading cli arguments
[2025-07-09T13:10:44.177657Z] Info : cpcd --conf /usr/local/etc/cpcd.conf
[2025-07-09T13:10:44.178256Z] Info : Reading configuration
[2025-07-09T13:10:44.178275Z] Info :   file_path = /usr/local/etc/cpcd.conf
[2025-07-09T13:10:44.178291Z] Info :   instance_name = cpcd_0
[2025-07-09T13:10:44.178305Z] Info :   socket_folder = /dev/shm
[2025-07-09T13:10:44.178319Z] Info :   operation_mode = MODE_NORMAL
[2025-07-09T13:10:44.178333Z] Info :   use_encryption = false
[2025-07-09T13:10:44.178347Z] Info :   binding_key_file = /root/.cpcd/binding.key
[2025-07-09T13:10:44.178362Z] Info :   stdout_tracing = true
[2025-07-09T13:10:44.178375Z] Info :   file_tracing = false
[2025-07-09T13:10:44.178389Z] Info :   lttng_tracing = false
[2025-07-09T13:10:44.178402Z] Info :   enable_frame_trace = true
[2025-07-09T13:10:44.178416Z] Info :   traces_folder = /tmp
[2025-07-09T13:10:44.178430Z] Info :   bus = SPI
[2025-07-09T13:10:44.178445Z] Info :   spi_file = /dev/spidev0.0
[2025-07-09T13:10:44.178458Z] Info :   spi_bitrate = 10000000
[2025-07-09T13:10:44.178473Z] Info :   spi_irq_chip = gpiochip0
[2025-07-09T13:10:44.178487Z] Info :   spi_irq_pin = 22
[2025-07-09T13:10:44.178500Z] Info :   fwu_recovery_pins_enabled = false
[2025-07-09T13:10:44.178515Z] Info :   fwu_connect_to_bootloader = false
[2025-07-09T13:10:44.178529Z] Info :   fwu_enter_bootloader = false
[2025-07-09T13:10:44.178542Z] Info :   restart_cpcd = false
[2025-07-09T13:10:44.178556Z] Info :   application_version_validation = false
[2025-07-09T13:10:44.178569Z] Info :   print_secondary_versions_and_exit = false
[2025-07-09T13:10:44.178583Z] Info :   use_noop_keep_alive = false
[2025-07-09T13:10:44.178597Z] Info :   reset_sequence = true
[2025-07-09T13:10:44.178610Z] Info :   stats_interval = 0
[2025-07-09T13:10:44.178624Z] Info :   rlimit_nofile = 2000
[2025-07-09T13:10:44.178638Z] Info : ENCRYPTION IS DISABLED
[2025-07-09T13:10:44.178754Z] Gpio : Opening gpio #22 on chip gpiochip0. Direction : IN, edge : FALLING
[2025-07-09T13:10:44.180595Z] Info : Starting daemon in normal mode
[2025-07-09T13:10:44.180653Z] Gpio : Opening gpio #22 on chip gpiochip0. Direction : IN, edge : FALLING
[2025-07-09T13:10:44.181266Z] Driver : Thread start
[2025-07-09T13:10:44.181352Z] Driver : Opening spi file /dev/spidev0.0
[2025-07-09T13:10:44.181371Z] Driver : Init done
[2025-07-09T13:10:44.181511Z] Core : Changing ep#0 state from SLI_CPC_STATE_CLOSED to SLI_CPC_STATE_CONNECTED
[2025-07-09T13:10:44.181558Z] Core : open ep #0
[2025-07-09T13:10:44.181613Z] Server : Cleaning up socket folder /dev/shm/cpcd/cpcd_0
[2025-07-09T13:10:44.181707Z] Server : Removing /dev/shm/cpcd/cpcd_0/reset.cpcd.sock
[2025-07-09T13:10:44.181770Z] Server : Removing /dev/shm/cpcd/cpcd_0/ctrl.cpcd.sock
[2025-07-09T13:10:44.182031Z] Info : Connecting to Secondary...
[2025-07-09T13:10:44.182262Z] Core : Pushed frame to driver : 14:00:0E:00:C4:95:0F:03:00:08:00:02:02:00:00:00:00:00:00:91:A0
[2025-07-09T13:10:44.182330Z] Core : txd transmit completed
[2025-07-09T13:10:44.182347Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.182363Z] System : Submitted command_id #3 command_seq #0
[2025-07-09T13:10:44.182378Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.182418Z] System : property-set (id #3) sent with property #514
[2025-07-09T13:10:44.182424Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.182436Z] Reset Sequence : Reboot mode sent
[2025-07-09T13:10:44.182661Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.183050Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.183075Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.183262Z] Driver : Clocked in this header : 14:00:0E:00:C4:95:0F
[2025-07-09T13:10:44.183549Z] Driver : Sent frame to core : 14:00:0E:00:C4:95:0F:06:00:08:00:02:02:00:00:00:00:00:00:30:AE
[2025-07-09T13:10:44.183635Z] Core : rxd frame : 14:00:0E:00:C4:95:0F:06:00:08:00:02:02:00:00:00:00:00:00:30:AE
[2025-07-09T13:10:44.183663Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.183684Z] System : Processing command seq#0 of type 3
[2025-07-09T13:10:44.183747Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.183763Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.183858Z] Core : Pushed frame to driver : 14:00:06:00:C4:34:A6:01:01:00:00:84:41
[2025-07-09T13:10:44.183899Z] Core : txd transmit completed
[2025-07-09T13:10:44.183916Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.183931Z] System : Submitted command_id #1 command_seq #1
[2025-07-09T13:10:44.183980Z] System : reset (id #1) sent
[2025-07-09T13:10:44.183996Z] Reset Sequence : Reboot mode reply received, reset request sent
[2025-07-09T13:10:44.184034Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.184060Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.184337Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.184708Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.184735Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.184903Z] Driver : Clocked in this header : 14:00:0A:00:C4:55:D3
[2025-07-09T13:10:44.185145Z] Driver : Sent frame to core : 14:00:0A:00:C4:55:D3:01:01:04:00:00:00:00:00:13:F9
[2025-07-09T13:10:44.185199Z] Core : rxd frame : 14:00:0A:00:C4:55:D3:01:01:04:00:00:00:00:00:13:F9
[2025-07-09T13:10:44.185224Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.185242Z] System : Processing command seq#1 of type 3
[2025-07-09T13:10:44.185284Z] System : on_final_reset()
[2025-07-09T13:10:44.185300Z] Reset Sequence : Reset request response received : 0
[2025-07-09T13:10:44.185316Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.185330Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.185344Z] Reset Sequence : Reset request acknowledged, waiting for device to reset
[2025-07-09T13:10:44.479121Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.479174Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.479370Z] Driver : Clocked in this header : 14:00:0E:00:C0:11:4F
[2025-07-09T13:10:44.479678Z] Driver : Sent frame to core : 14:00:0E:00:C0:11:4F:06:00:08:00:00:00:00:00:73:00:00:00:DC:98
[2025-07-09T13:10:44.479747Z] Core : rxd frame : 14:00:0E:00:C0:11:4F:06:00:08:00:00:00:00:00:73:00:00:00:DC:98
[2025-07-09T13:10:44.479775Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.479794Z] System : Unsolicited uframe received
[2025-07-09T13:10:44.479811Z] Reset Sequence : Received reset reason : 115
[2025-07-09T13:10:44.479825Z] Reset Sequence : Reset sequence: 3
[2025-07-09T13:10:44.479839Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.479853Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.479868Z] Reset Sequence : Waiting for reset reason
[2025-07-09T13:10:44.479881Z] Reset Sequence : Reset reason received
[2025-07-09T13:10:44.479920Z] Core : Pushed frame to driver : 14:00:0A:00:C4:55:D3:02:02:04:00:20:00:00:00:AA:DE
[2025-07-09T13:10:44.479957Z] Core : txd transmit completed
[2025-07-09T13:10:44.479974Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.479989Z] System : Submitted command_id #2 command_seq #2
[2025-07-09T13:10:44.480044Z] System : property-get (id #2) sent with property 0x20
[2025-07-09T13:10:44.480086Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.480111Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.480290Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.480692Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.480717Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.480902Z] Driver : Clocked in this header : 14:00:0C:00:C4:F5:61
[2025-07-09T13:10:44.481161Z] Driver : Sent frame to core : 14:00:0C:00:C4:F5:61:06:02:06:00:20:00:00:00:F6:07:9B:C9
[2025-07-09T13:10:44.481217Z] Core : rxd frame : 14:00:0C:00:C4:F5:61:06:02:06:00:20:00:00:00:F6:07:9B:C9
[2025-07-09T13:10:44.481241Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.481260Z] System : Processing command seq#2 of type 3
[2025-07-09T13:10:44.481315Z] Reset Sequence : Received RX capability of 2038 bytes
[2025-07-09T13:10:44.481331Z] Info : RX capability is 2038 bytes
[2025-07-09T13:10:44.481348Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.481361Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.481375Z] Reset Sequence : Obtained RX capability
[2025-07-09T13:10:44.481388Z] Info : Connected to Secondary
[2025-07-09T13:10:44.481421Z] Core : Pushed frame to driver : 14:00:0A:00:C4:55:D3:02:03:04:00:01:00:00:00:31:27
[2025-07-09T13:10:44.481540Z] Core : txd transmit completed
[2025-07-09T13:10:44.481558Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.481588Z] System : Submitted command_id #2 command_seq #3
[2025-07-09T13:10:44.481634Z] System : property-get (id #2) sent with property 0x1
[2025-07-09T13:10:44.481677Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.481704Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.481939Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.482261Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.482387Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.482631Z] Driver : Clocked in this header : 14:00:0B:00:C4:65:E4
[2025-07-09T13:10:44.482874Z] Driver : Sent frame to core : 14:00:0B:00:C4:65:E4:06:03:05:00:01:00:00:00:06:CD:21
[2025-07-09T13:10:44.482928Z] Core : rxd frame : 14:00:0B:00:C4:65:E4:06:03:05:00:01:00:00:00:06:CD:21
[2025-07-09T13:10:44.482952Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.482971Z] System : Processing command seq#3 of type 3
[2025-07-09T13:10:44.483015Z] Info : Secondary Protocol v6
[2025-07-09T13:10:44.483033Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.483048Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.483062Z] Reset Sequence : Obtained Protocol version
[2025-07-09T13:10:44.483095Z] Core : Pushed frame to driver : 14:00:0A:00:C4:55:D3:02:04:04:00:02:00:00:00:A9:A5
[2025-07-09T13:10:44.483133Z] Core : txd transmit completed
[2025-07-09T13:10:44.483149Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.483164Z] System : Submitted command_id #2 command_seq #4
[2025-07-09T13:10:44.483204Z] System : property-get (id #2) sent with property 0x2
[2025-07-09T13:10:44.483243Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.483267Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.483442Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.483758Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.483783Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.483952Z] Driver : Clocked in this header : 14:00:0E:00:C4:95:0F
[2025-07-09T13:10:44.484233Z] Driver : Sent frame to core : 14:00:0E:00:C4:95:0F:06:04:08:00:02:00:00:00:00:00:00:00:94:9F
[2025-07-09T13:10:44.484284Z] Core : rxd frame : 14:00:0E:00:C4:95:0F:06:04:08:00:02:00:00:00:00:00:00:00:94:9F
[2025-07-09T13:10:44.484307Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.484324Z] System : Processing command seq#4 of type 3
[2025-07-09T13:10:44.484360Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.484377Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.484391Z] Reset Sequence : Obtained Capabilities
[2025-07-09T13:10:44.484418Z] Core : Pushed frame to driver : 14:00:0A:00:C4:55:D3:02:05:04:00:03:00:00:00:7C:6B
[2025-07-09T13:10:44.484455Z] Core : txd transmit completed
[2025-07-09T13:10:44.484471Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.484496Z] System : Submitted command_id #2 command_seq #5
[2025-07-09T13:10:44.484531Z] System : property-get (id #2) sent with property 0x3
[2025-07-09T13:10:44.484568Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.484593Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.484770Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.485219Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.485248Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.485455Z] Driver : Clocked in this header : 14:00:16:00:C4:57:E5
[2025-07-09T13:10:44.485954Z] Driver : Sent frame to core : 14:00:16:00:C4:57:E5:06:05:10:00:03:00:00:00:04:00:00:00:07:00:00:00:00:00:00:00:D4:FB
[2025-07-09T13:10:44.486013Z] Core : rxd frame : 14:00:16:00:C4:57:E5:06:05:10:00:03:00:00:00:04:00:00:00:07:00:00:00:00:00:00:00:D4:FB
[2025-07-09T13:10:44.486040Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.486061Z] System : Processing command seq#5 of type 3
[2025-07-09T13:10:44.486105Z] Info : Secondary CPC v4.7.0
[2025-07-09T13:10:44.486191Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.486207Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.486221Z] Reset Sequence : Obtained Secondary CPC version
[2025-07-09T13:10:44.486258Z] Core : Pushed frame to driver : 14:00:0E:00:C4:95:0F:03:06:08:00:60:00:00:00:04:07:00:00:F9:7C
[2025-07-09T13:10:44.486298Z] Core : txd transmit completed
[2025-07-09T13:10:44.486314Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.486329Z] System : Submitted command_id #3 command_seq #6
[2025-07-09T13:10:44.486371Z] System : property-set (id #3) sent with property #96
[2025-07-09T13:10:44.486412Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.486437Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.486615Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.487000Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.487025Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.487191Z] Driver : Clocked in this header : 14:00:0A:00:C4:55:D3
[2025-07-09T13:10:44.487413Z] Driver : Sent frame to core : 14:00:0A:00:C4:55:D3:06:06:04:00:60:00:00:00:9D:7E
[2025-07-09T13:10:44.487465Z] Core : rxd frame : 14:00:0A:00:C4:55:D3:06:06:04:00:60:00:00:00:9D:7E
[2025-07-09T13:10:44.487487Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.487504Z] System : Processing command seq#6 of type 3
[2025-07-09T13:10:44.487539Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.487555Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.487570Z] Reset Sequence : Obtained Set Primary Version Reply
[2025-07-09T13:10:44.487596Z] Core : Pushed frame to driver : 14:00:0A:00:C4:55:D3:02:07:04:00:40:00:00:00:DF:FE
[2025-07-09T13:10:44.487632Z] Core : txd transmit completed
[2025-07-09T13:10:44.487649Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.487663Z] System : Submitted command_id #2 command_seq #7
[2025-07-09T13:10:44.487696Z] System : property-get (id #2) sent with property 0x40
[2025-07-09T13:10:44.487733Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.487758Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.487931Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.488258Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.488283Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.488449Z] Driver : Clocked in this header : 14:00:0E:00:C4:95:0F
[2025-07-09T13:10:44.488729Z] Driver : Sent frame to core : 14:00:0E:00:C4:95:0F:06:07:08:00:40:00:00:00:00:00:00:00:18:9E
[2025-07-09T13:10:44.488780Z] Core : rxd frame : 14:00:0E:00:C4:95:0F:06:07:08:00:40:00:00:00:00:00:00:00:18:9E
[2025-07-09T13:10:44.488803Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.488820Z] System : Processing command seq#7 of type 3
[2025-07-09T13:10:44.488852Z] Info : Secondary bus bitrate is 0
[2025-07-09T13:10:44.488870Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.488895Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.488922Z] Core : Pushed frame to driver : 14:00:0A:00:C4:55:D3:02:08:04:00:50:00:00:00:91:6F
[2025-07-09T13:10:44.489166Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.489407Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.489472Z] Core : txd transmit completed
[2025-07-09T13:10:44.489491Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.489507Z] System : Submitted command_id #2 command_seq #8
[2025-07-09T13:10:44.489779Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.489545Z] System : property-get (id #2) sent with property 0x50
[2025-07-09T13:10:44.490154Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.490181Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.490431Z] Driver : Clocked in this header : 14:00:0E:00:C4:95:0F
[2025-07-09T13:10:44.490721Z] Driver : Sent frame to core : 14:00:0E:00:C4:95:0F:06:08:08:00:50:00:00:00:80:96:98:00:7C:AE
[2025-07-09T13:10:44.490777Z] Core : rxd frame : 14:00:0E:00:C4:95:0F:06:08:08:00:50:00:00:00:80:96:98:00:7C:AE
[2025-07-09T13:10:44.490802Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.490821Z] System : Processing command seq#8 of type 3
[2025-07-09T13:10:44.490866Z] Info : Secondary max bus bitrate is 10000000
[2025-07-09T13:10:44.490883Z] Info : The negotiated SPI bitrate will be 10000000
[2025-07-09T13:10:44.490900Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.490915Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.490949Z] Core : Pushed frame to driver : 14:00:0A:00:C4:55:D3:02:09:04:00:04:00:00:00:3A:68
[2025-07-09T13:10:44.490987Z] Core : txd transmit completed
[2025-07-09T13:10:44.491003Z] Core : Endpoint #0: frame transmit submitted
[2025-07-09T13:10:44.491018Z] System : Submitted command_id #2 command_seq #9
[2025-07-09T13:10:44.491124Z] System : property-get (id #2) sent with property 0x4
[2025-07-09T13:10:44.491165Z] Driver : Init of a transaction caused by the core
[2025-07-09T13:10:44.491191Z] Driver : Primary has a frame to send
[2025-07-09T13:10:44.491240Z] Driver : Clocked in this header : 00:00:00:00:00:00:00
[2025-07-09T13:10:44.491472Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.491497Z] Driver : Secondary signaled a frame to send
[2025-07-09T13:10:44.491538Z] Driver : Clocked in this header : 14:00:11:00:C4:C7:60
[2025-07-09T13:10:44.491647Z] Driver : Sent frame to core : 14:00:11:00:C4:C7:60:06:09:0B:00:04:00:00:00:32:2E:31:30:2E:30:00:18:4D
[2025-07-09T13:10:44.491697Z] Core : rxd frame : 14:00:11:00:C4:C7:60:06:09:0B:00:04:00:00:00:32:2E:31:30:2E:30:00:18:4D
[2025-07-09T13:10:44.491721Z] Core : Endpoint #0: rxd unnumbered frame
[2025-07-09T13:10:44.491739Z] System : Processing command seq#9 of type 3
[2025-07-09T13:10:44.491795Z] Info : Secondary APP v2.10.0
[2025-07-09T13:10:44.491814Z] Core : Endpoint #0: unnumbered frame processed
[2025-07-09T13:10:44.491828Z] Core : rxd uframe with valid header checksum
[2025-07-09T13:10:44.491842Z] Reset Sequence : Obtained Secondary APP version
[2025-07-09T13:10:44.492150Z] Security : Encryption is disabled
[2025-07-09T13:10:44.492169Z] Core : Security changed state: 0 -> 1
[2025-07-09T13:10:44.492185Z] Info : Daemon startup was successful. Waiting for client connections

An abstract is:

 $ sudo cpcd --conf /usr/local/etc/cpcd.conf
WARNING in function 'main' in file /home/pi/cpc_daemon/main.c at line #68 : Running CPCd as 'root' is not recommended. Proceed at your own risk.
[2025-07-09T13:10:44.177112Z] Info : [CPCd v4.7.0.0] [Library API v3] [RCP Protocol v6]
. . .
[2025-07-09T13:10:44.177487Z] WARNING : In function 'main' in file /home/pi/cpc_daemon/main.c at line #68 : Running CPCd as 'root' is not recommended. Proceed at your own risk.
[2025-07-09T13:10:44.177578Z] Info : Reading cli arguments
[2025-07-09T13:10:44.177657Z] Info : cpcd --conf /usr/local/etc/cpcd.conf
[2025-07-09T13:10:44.178256Z] Info : Reading configuration
[2025-07-09T13:10:44.178275Z] Info :   file_path = /usr/local/etc/cpcd.conf
[2025-07-09T13:10:44.178291Z] Info :   instance_name = cpcd_0
. . .
[2025-07-09T13:10:44.178430Z] Info :   bus = SPI
[2025-07-09T13:10:44.178445Z] Info :   spi_file = /dev/spidev0.0
[2025-07-09T13:10:44.178458Z] Info :   spi_bitrate = 10000000
[2025-07-09T13:10:44.178473Z] Info :   spi_irq_chip = gpiochip0
[2025-07-09T13:10:44.178487Z] Info :   spi_irq_pin = 22
. . .
[2025-07-09T13:10:44.178597Z] Info :   reset_sequence = true
. . .
[2025-07-09T13:10:44.178638Z] Info : ENCRYPTION IS DISABLED
. . .
[2025-07-09T13:10:44.181352Z] Driver : Opening spi file /dev/spidev0.0
[2025-07-09T13:10:44.181371Z] Driver : Init done
. . .
[2025-07-09T13:10:44.182031Z] Info : Connecting to Secondary...
. . .
[2025-07-09T13:10:44.182436Z] Reset Sequence : Reboot mode sent
. . .
[2025-07-09T13:10:44.183996Z] Reset Sequence : Reboot mode reply received, reset request sent
. . .
[2025-07-09T13:10:44.184735Z] Driver : Secondary signaled a frame to send
. . .
[2025-07-09T13:10:44.185199Z] Core : rxd frame : 14:00:0A:00:C4:55:D3:01:01:04:00:00:00:00:00:13:F9
. . .
[2025-07-09T13:10:44.185284Z] System : on_final_reset()
[2025-07-09T13:10:44.185300Z] Reset Sequence : Reset request response received : 0
. . .
[2025-07-09T13:10:44.185344Z] Reset Sequence : Reset request acknowledged, waiting for device to reset
[2025-07-09T13:10:44.479121Z] Driver : Init of a transaction caused by the IRQ line
[2025-07-09T13:10:44.479174Z] Driver : Secondary signaled a frame to send
. . .
[2025-07-09T13:10:44.481315Z] Reset Sequence : Received RX capability of 2038 bytes
[2025-07-09T13:10:44.481331Z] Info : RX capability is 2038 bytes
. . .
[2025-07-09T13:10:44.481375Z] Reset Sequence : Obtained RX capability
[2025-07-09T13:10:44.481388Z] Info : Connected to Secondary
. . .
[2025-07-09T13:10:44.492150Z] Security : Encryption is disabled
[2025-07-09T13:10:44.492169Z] Core : Security changed state: 0 -> 1
[2025-07-09T13:10:44.492185Z] Info : Daemon startup was successful. Waiting for client connections

When you get the Daemon startup was successful. Waiting for client connections message, you're ready to start wsbrd.

Starting cpcd before starting wsbrd#

If cpcd is not running when wsbrd is launched, the following error will occur:

 $ sudo wsbrd --conf /etc/wsbrd.conf
Silicon Labs Wi-SUN border router v2.2
cpc_init: Connection refused

Starting cpcd as a Service#

This is an option. Probably the best, with Restart=on-failure.

nano $ sudo nano /usr/local/lib/systemd/system/cpcd.service
$ cat /usr/local/lib/systemd/system/cpcd.service
# SPDX-License-Identifier: GPL-2.0 or APACHE-2.0
[Unit]
Description=Silicon Labs CPC Service
Documentation=file:////usr/local/etc/cpcd.conf
After=network.target
After=freeradius.service
# If you rely on an external DHCP server, don't forget to add a dependency here

[Service]
ExecStart=cpcd --conf /usr/local/etc/cpcd.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target

Checking cpcd Service Status#

 $ sudo systemctl status cpcd.service
● cpcd.service - Silicon Labs CPC Service
     Loaded: loaded (/usr/local/lib/systemd/system/cpcd.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-07-09 15:15:24 CEST; 2s ago
       Docs: file:////usr/local/etc/cpcd.conf
   Main PID: 2110 (cpcd)
      Tasks: 4 (limit: 1595)
        CPU: 19ms
     CGroup: /system.slice/cpcd.service
             └─2110 cpcd --conf /usr/local/etc/cpcd.conf

Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.668762Z] Core : rxd frame : 14:00:11:00:C4:C7:60:06:09:0B:00:04:00:00:00:32:2E:31:30:2E:30:00:18:4D
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.668788Z] Core : Endpoint #0: rxd unnumbered frame
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.668808Z] System : Processing command seq#9 of type 3
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.668872Z] Info : Secondary APP v2.10.0
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.668892Z] Core : Endpoint #0: unnumbered frame processed
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.668906Z] Core : rxd uframe with valid header checksum
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.668921Z] Reset Sequence : Obtained Secondary APP version
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.669204Z] Security : Encryption is disabled
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.669224Z] Core : Security changed state: 0 -> 1
Jul 09 15:15:25 rns-md-wisun-direct-connect cpcd[2110]: [2025-07-09T13:15:24.669239Z] Info : Daemon startup was successful. Waiting for client connections

CPC/wsbrd Communication#

A full log is provided below, obtained with sudo wsbrd --conf /etc/wsbrd.conf -T cpc.

Click to expand and view the full log
$ sudo wsbrd --conf /etc/wsbrd.conf -T cpc
Silicon Labs Wi-SUN border router v2.2
[2025-04-25T14:36:36.166444Z] libcpc(cpcd_0:1673) [cpc_init:732]: libcpc version: v4.4.2.0
[2025-04-25T14:36:36.166722Z] libcpc(cpcd_0:1673) [cpc_init:733]: libcpc API version: v3
[2025-04-25T14:36:36.167622Z] libcpc(cpcd_0:1673) [get_secondary_app_version:403]: secondary application is v2.6.1
[2025-04-25T14:36:36.168110Z] libcpc(cpcd_0:1673) [cpc_init:841]: cpc lib initialized
[2025-04-25T14:36:36.168184Z] libcpc(cpcd_0:1673) [cpc_open_endpoint:1107]: opening EP #10
[2025-04-25T14:36:36.170290Z] libcpc(cpcd_0:1673) [cpc_open_endpoint:1238]: opened EP #10
1745591796.170425: hif tx: REQ_RESET 00
[2025-04-25T14:36:36.170481Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.170530Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
[2025-04-25T14:36:36.171476Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1439]: reading from EP #10
[2025-04-25T14:36:36.171532Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1459]: read from EP #10
1745591796.171573: hif rx: IND_RESET 01 06 00 02 00 05 00 02 32 2e 35 2e 30 00 60 a4 23 ff fe 37 ac 96
Connected to RCP "2.5.0" (2.5.0), API 2.6.1
1745591796.171699: hif tx: SET_HOST_API 00 00 00 02
[2025-04-25T14:36:36.171733Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.171780Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.171819: hif tx: REQ_RADIO_LIST
[2025-04-25T14:36:36.171841Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.171886Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
[2025-04-25T14:36:36.171925Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1439]: reading from EP #10
[2025-04-25T14:36:36.173445Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1459]: read from EP #10
1745591796.173504: hif rx: CNF_RADIO_LIST 0f 01 00 00 01 60 dc 71 33 a0 86 01 00 45 00 91 ff 01 00 03 60 dc 71 33 40 0d 03 00 23 00 94 ff ff 01 50 60 dc 71 33 40 0d 03*
1745591796.185361: hif tx: SET_RADIO_TX_POWER 00
[2025-04-25T14:36:36.185454Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.185709Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
[INFO][addr]: Address added to IF 1: fe80::62a4:23ff:fe37:ac96
[DBG ][addr]: LL64 Register OK!
[INFO][rout]: Added route:
[DBG ][rout]:                 fe80::/64 if:1 src:'Static' id:0 lifetime:infinite
[DBG ][rout]:      On-link (met 128)
[INFO][rout]: Added route:
[DBG ][rout]:                  ff00::/8 if:1 src:'Static' id:0 lifetime:infinite
[DBG ][rout]:      On-link (met 192)
[INFO][addr]: Address added to IF 1: fd12:3456::62a4:23ff:fe37:ac96
[INFO][rout]: Added route:
[DBG ][rout]:  fd12:3456::62a4:23ff:fe37:ac96/128 if:1 src:'Loopback' id:0 lifetime:infinite
[DBG ][rout]:      On-link (met 128)
1745591796.187886: tkl RPL DIO  reset: t=492s I[525,1049]=584s k=0
Successfully registered to system DBus
[INFO][wsbs]: Wi-SUN packet congestion minTh 150, maxTh 300, drop probability 10 weight 32, Packet/Seconds 5
[INFO][wspc]: Read GTK frame counter: index 0 value 10000000
[INFO][wspc]: Read LGTK frame counter: index 0 value 10000000
PAN version number update
1745591796.198983: tkl (null)   reset: t=38s I[60,960]=60s k=1
1745591796.200975: hif tx: SET_FHSS_UC ff 02 20 ff ff ff 27 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[2025-04-25T14:36:36.201199Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.201488Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.201544: hif tx: SET_FHSS_FFN_BC fc 03 00 55 e3 ff 02 20 ff ff ff 27 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[2025-04-25T14:36:36.201662Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.201780Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.201901: hif tx: SET_FHSS_LFN_BC 60 ea 00 55 e3 02 20 ff ff ff 27 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[2025-04-25T14:36:36.203242Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.203362Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.203467: hif tx: SET_FHSS_ASYNC f4 01 00 00 20 ff ff ff 27 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[2025-04-25T14:36:36.203579Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.203625Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.203665: hif tx: SET_RADIO 01 00 01
[2025-04-25T14:36:36.203699Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.203821Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.203875: hif tx: SET_FILTER_PANID 28 97
[2025-04-25T14:36:36.203904Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.203944Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.204013: hif tx: REQ_RADIO_ENABLE
[2025-04-25T14:36:36.204036Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.204090Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
  domain: EU
  channel plan id: 33
  phy mode id: 0x03
  phy operating modes: 1, 84, 85, 86
  RCP configuration index: 1
  channel 0 frequency: 863.1MHz
  channel spacing: 200kHz
  channel count: 35
  channel masks:
               advertised      effective
     unicast   --              00:00:00:d8:fb
     broadcast --              00:00:00:d8:fb
     async     --              00:00:00:d8:fb

Nodes join ability:
  rank    FFN1.0    FFN1.1    LFN
    1     no        yes       yes
   >1     no        yes       can[1]
  [1]: neighboring routers must use a channel plan 2 (reg. domain & ChanPlanId)

[INFO][wspc]: GTK hash set 60:95:a3:eb:29:24:a1:8a 00:00:00:00:00:00:00:00 00:00:00:00:00:00:00:00 00:00:00:00:00:00:00:00
[INFO][wspc]: NW key set: 0, hash: 60:95:a3:eb:29:24:a1:8a
1745591796.207604: hif tx: SET_SEC_KEY 01 dd cd bb 4f ba 43 76 2f 64 07 10 01 11 5c be 9d 80 96 98 00
[2025-04-25T14:36:36.207731Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.207799Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
[INFO][wspc]: LGTK hash set 65:93:0e:11:4e:fd:de:72 00:00:00:00:00:00:00:00 00:00:00:00:00:00:00:00 00:00:00:00:00:00:00:00
[INFO][wspc]: NW key set: 4, hash: 65:93:0e:11:4e:fd:de:72
1745591796.209030: hif tx: SET_SEC_KEY 05 21 42 c1 b4 59 97 51 53 e8 30 bb ef 13 e9 ae 15 80 96 98 00
[2025-04-25T14:36:36.209105Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.209172Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
[INFO][wspc]: NW send key index set: 0
[INFO][wspc]: NW send key index set: 4
1745591796.209661: tkl ADV      reset: t=536s I[60,960]=797s k=1
1745591796.209700: tkl CFG      reset: t=170s I[60,960]=259s k=1
1745591796.210187: tx-15.4 adv       dst:00:00:00:00:00:00:00:00
1745591796.210566: hif tx: REQ_DATA_TX 00 4b 00 01 e3 28 97 96 ac 37 fe ff 23 a4 60 05 15 01 00 00 00 00 00 3f 34 a0 06 88 ff ff 00 12 03 21 05 04 00 00 00 00 43 17*
[2025-04-25T14:36:36.210693Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.210771Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
1745591796.211121: tx-15.4 cfg       dst:00:00:00:00:00:00:00:00
1745591796.211223: hif tx: REQ_DATA_TX 01 7f 00 09 e3 28 97 96 ac 37 fe ff 23 a4 60 0e aa aa aa aa 01 05 15 01 02 00 00 00 06 15 02 00 00 00 00 00 05 15 c0 60 ea 00*
[2025-04-25T14:36:36.211343Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1524]: writing to EP #10
[2025-04-25T14:36:36.211404Z] libcpc(cpcd_0:1673) [cpc_write_endpoint:1540]: wrote to EP #10
Wi-SUN Border Router is ready
1745591796.211758: drop tun      : unsupported ICMPv6 type 133
1745591796.211821: drop tun      : unsupported dst=ff02::16
[2025-04-25T14:36:36.568841Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1439]: reading from EP #10
[2025-04-25T14:36:36.568918Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1459]: read from EP #10
1745591796.568940: hif rx: CNF_DATA_TX 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1745591796.820307: drop tun      : unsupported dst=ff02::16
1745591797.160343: drop tun      : unsupported dst=ff02::16
[2025-04-25T14:36:38.241676Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1439]: reading from EP #10
[2025-04-25T14:36:38.241783Z] libcpc(cpcd_0:1673) [cpc_read_endpoint:1459]: read from EP #10
1745591798.241823: hif rx: CNF_DATA_TX 01 00 00 00 00 00 00 00 00 00 00 00 00 00 98 96 98 00 00 00 00 00 00

Note: Once CPC is working, removing -T cpc is recommended.

If the Connected to RCP "x.y.z" (x.y.z), API t.u.v message is present, everything is working as expected (the RCP version string comes from the RCP binary, not from wsbrd).