Issue with OTBR Setup and sudo ot-ctl Command

Hello,

I am encountering an issue while setting up an OpenThread Border Router (OTBR) using the following hardware:

    nRF52833 board (flashed with RCP firmware)
    nRF52840 board (flashed with CLI firmware)
    Raspberry Pi 3B+

I have followed the official guide OpenThread Border Router Build Native (https://openthread.io/guides/border-router/build-native?hl=fr)  and also referred to OpenThread Hardware Codelab (https://openthread.io/codelabs/openthread-hardware#1) for additional insights.

Steps Taken:

    Flashed the nRF52833 board with RCP firmware and connected it to the Raspberry Pi.
    Flashed the nRF52840 board with CLI firmware and connected it to my PC running Windows with VS Code and the nRF Connect extension.
    Configured the Raspberry Pi (which was reset to a fresh state each time I attempted the setup).

Issue:
The command sudo ot-ctl, which is supposed to allow access to the CLI of the RCP and OTBR, is not functioning correctly. Either the session opens and closes unexpectedly, or I receive a "connection refused" error. For the moments where the sessions allow me to write some instructions, it feels like, despite the 'done' message, these instructions never succeed; my OTBR is not working.

Logs:

● otbr-agent.service - OpenThread Border Router Agent
     Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-07-21 15:47:32 BST; 12s ago
    Process: 8878 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
   Main PID: 8884 (otbr-agent)
      Tasks: 10 (limit: 1568)
        CPU: 151ms
     CGroup: /system.slice/otbr-agent.service
             └─8884 /usr/sbin/otbr-agent "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000" trel://wlan0

Jul 21 15:47:33 raspberrypi otbr-agent[8884]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #763C._meshcop._udp.local: OK
Jul 21 15:47:37 raspberrypi otbr-agent[8884]: 00:00:05.377 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
Jul 21 15:47:38 raspberrypi otbr-agent[8884]: 00:00:05.383 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:dc7d, ecn:no, to:0xffff, sec:no, prio:net
Jul 21 15:47:38 raspberrypi otbr-agent[8884]: 00:00:05.384 [I] MeshForwarder-:     src:[fe80:0:0:0:e042:17bf:c86:1a5d]:19788
Jul 21 15:47:38 raspberrypi otbr-agent[8884]: 00:00:05.384 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
Jul 21 15:47:42 raspberrypi otbr-agent[8884]: 00:00:09.770 [I] P-Daemon------: Session socket is ready
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.605 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.613 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:a702, ecn:no, to:0xffff, sec:no, prio:net
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.613 [I] MeshForwarder-:     src:[fe80:0:0:0:e042:17bf:c86:1a5d]:19788
Jul 21 15:47:43 raspberrypi otbr-agent[8884]: 00:00:10.613 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788


~

lines 1-20/20 (END)
gg@raspberrypi:~ $ sudo journalctl -u otbr-agent
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.084 [I] Settings------: Read NetworkInfo {rloc:0x6000, extaddr:e24217bf0c861a5d, role:leader, mode:0x0f, version:5, keyseq:0x0, ...
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.084 [I] Settings------: ... pid:0x460b96ea, mlecntr:0x10d08, maccntr:0x109a0, mliid:bc0522ff9d0869ef}
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Settings------: Saved NetworkInfo {rloc:0x6000, extaddr:e24217bf0c861a5d, role:leader, mode:0x0f, version:5, keyseq:0x0, ...
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Settings------: ... pid:0x460b96ea, mlecntr:0x110f1, maccntr:0x10d88, mliid:bc0522ff9d0869ef}
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] Notifier------: StateChanged (0x1100102d) [Ip6+ Role LLAddr Rloc+ Ip6Mult+ NetifState ActDset]
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [I] AnnounceSender: Stopped
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.094 [N] P-Netif-------: Changing interface state to up.
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.095 [I] P-Netif-------: Sent request#6 to delete route 192.168.255.0/24
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.096 [I] P-Netif-------: Deleting route for NAT64
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-BA------: Publish meshcop service OpenThread BorderRouter #763C._meshcop._udp.local.
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-MDNS----: Removing existing service OpenThread BorderRouter #763C._meshcop._udp: outdated
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-MDNS----: Removing service OpenThread BorderRouter #763C._meshcop._udp
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-BA------: Cancelled previous publishing meshcop service OpenThread BorderRouter #763C._meshcop._udp.local
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: [INFO]-MDNS----: Registering service OpenThread BorderRouter #763C._meshcop._udp
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.100 [I] P-Netif-------: Succeeded to process request#1
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.100 [W] P-Netif-------: Failed to process request#2: No such process
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Succeeded to process request#3
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: ADD [U] fe80::e042:17bf:c86:1a5d
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Succeeded to process request#4
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: ADD [U] fdd6:1ce:c5de:6107:bc05:22ff:9d08:69ef
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Succeeded to process request#5
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: ADD [U] fdd6:1ce:c5de:6107:0:ff:fe00:6000
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [I] P-Netif-------: Host netif is up
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.101 [W] P-Netif-------: Failed to process request#6: No such process
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.107 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:f05d, ecn:no, to:0xffff, sec:no, prio:net
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.107 [I] MeshForwarder-:     src:[fe80:0:0:0:e042:17bf:c86:1a5d]:19788
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.107 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.124 [I] P-Netif-------: Message dropped by Thread
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff33:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff32:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff03::fc (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff03::1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff02::16
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] P-Netif-------: ADD [M] ff02::2 (rejected)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.125 [I] Notifier------: StateChanged (0x00001000) [Ip6Mult+]
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff33:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff32:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff03::fc (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff03::1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff02::16 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.126 [I] P-Netif-------: ADD [M] ff02::2 (rejected)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.313 [I] P-Netif-------: Message dropped by Thread
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff33:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff32:40:fdd6:1ce:c5de:6107:0:1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff03::fc (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff03::1 (already subscribed, ignored)
Jul 21 15:31:52 raspberrypi otbr-agent[6939]: 00:00:00.314 [I] P-Netif-------: ADD [M] ff02::16 (already subscribed, ignored)
lines 1-48



Additional Log:

gg@raspberrypi:~/src/openthread $ sudo ./build/posix/src/posix/ot-daemon -v 'spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=460800'
./build/posix/src/posix/ot-daemon[603]: Running OPENTHREAD/thread-reference-2023 0706-1496-g3019d3c6c; POSIX; Jul 21 2025 08:24:37
./build/posix/src/posix/ot-daemon[603]: Thread version: 5
./build/posix/src/posix/ot-daemon[603]: 49d.17:05:56.088 [C] Platform------: Init() at spinel_driver.cpp:87: Failure


 and 
 
gg@raspberrypi:~/ot-br-posix $ sudo service otbr-agent status
● otbr-agent.service - OpenThread Border Router Agent
     Loaded: loaded (/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
     Active: active (running) since Mon 2025-07-21 10:06:29 BST; 2s ago
    Process: 9743 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
   Main PID: 9749 (otbr-agent)
      Tasks: 1 (limit: 1579)
        CPU: 76ms
     CGroup: /system.slice/otbr-agent.service
             └─9749 /usr/sbin/otbr-agent -I wpan0 -B eth0 spinel+hdlc+uart:///dev/ttyACM0 trel://eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Backbone interface: eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Running 0.3.0-43082df
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Thread version: 1.4.0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Thread interface: wpan0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyACM0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-AGENT---: Radio URL: trel://eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [NOTE]-ILS-----: Infra link selected: eth0
Jul 21 10:06:29 raspberrypi otbr-agent[9749]: [INFO]-RCP_HOS-: OpenThread log level changed to 4
Jul 21 10:06:31 raspberrypi otbr-agent[9749]: 49d.17:33:37.491 [W] P-SpinelDrive-: Wait for response timeout
Jul 21 10:06:31 raspberrypi otbr-agent[9749]: 49d.17:33:37.492 [I] P-SpinelDrive-: co-processor self reset successfully


Apologies if this log is potentially out of context, but I have been unable to recreate the "spinel_driver.cpp:87" error and this is the only relevant log I have on hand regarding a recognizable error.

Additional Information:

    I have verified that the correct firmware versions are flashed on both the nRF52833 and nRF52840 boards and the correct port is selected (ls /dev/ttyACM*)


    The Raspberry Pi is configured according to the official guide.


    I previously succeeded in setting up this OTBR (with numerous issues along the way) using the same hardware. I saved the Raspberry Pi image on my computer and was able to reuse this image without any problems, which rules out any hardware issues for me. Now, I am trying to start over from scratch to facilitate the reproducibility of an OTBR on these boards for my company but find myself stuck.

Question:
Has anyone encountered a similar issue? Are there any additional steps or configurations that I might have missed?

Thank you for your assistance.

Best regards,

  • Hi, 

    What NCS version are you using?

    Which port of the DK are you connecting to the Raspberry Pi? You can take a look at this similar case  Raspberry Pi + RCP setup fails .

    Regards,
    Amanda H. 

  • Hi Amanda,

    Thank you for your response.

    I am using NCS version 3.0.0. I am connecting port J2 of my nRF52833DK to the Raspberry Pi. I just tried connecting port J3 as indicated by the user in the case you shared, but it seems like the board is not even powered. I must be doing something wrong ?

    Although I am trying to set the nRF52833 as RCP and the nRF52840 as CLI, I flashed the nRF52840 (with the 52840 build conf.) as RCP just to test, and it didn't change anything. I also tried using pyspinel (https://github.com/openthread/pyspinel.git) but that didn't work either.

  • Issue:
    The command sudo ot-ctl, which is supposed to allow access to the CLI of the RCP and OTBR, is not functioning correctly. Either the session opens and closes unexpectedly, or I receive a "connection refused" error. For the moments where the sessions allow me to write some instructions, it feels like, despite the 'done' message, these instructions never succeed; my OTBR is not working.

    I got a similar issue during the testing, and fixed it by restarting OTBR. 

    Could you follow the steps in the Installing OTBR manually (Raspberry Pi) and Running OTBR using Docker?

    I get the log like this 

    amhs@raspberrypi:~$ sudo service otbr-agent status
    ● otbr-agent.service - OpenThread Border Router Agent
         Loaded: loaded (/usr/lib/systemd/system/otbr-agent.service; enabled; preset: enabled)
         Active: active (running) since Fri 2025-07-25 13:12:54 MST; 8s ago
        Process: 3363 ExecStartPre=/usr/sbin/service mdns start (code=exited, status=0/SUCCESS)
       Main PID: 3369 (otbr-agent)
          Tasks: 1 (limit: 3853)
         Memory: 920.0K (peak: 2.0M)
            CPU: 170ms
         CGroup: /system.slice/otbr-agent.service
                 └─3369 /usr/sbin/otbr-agent -I wpan0 -B eth0 "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000"
    
    Jul 25 13:06:45 raspberrypi otbr-agent[3275]: [INFO]-MDNS----: Successfully registered service OpenThread BorderRouter #C97A._meshcop._udp
    Jul 25 13:06:45 raspberrypi otbr-agent[3275]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #C97A._meshcop._udp.local: OK
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.576 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.580 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:78ab, ecn:no, to:0xffff, sec:no, prio:net
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.581 [I] MeshForwarder-:     src:[fe80:0:0:0:a0a7:fb6:e2e5:c97a]:19788
    Jul 25 13:06:50 raspberrypi otbr-agent[3275]: 00:00:05.581 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.218 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.224 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:43e7, ecn:no, to:0xffff, sec:no, prio:net
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.224 [I] MeshForwarder-:     src:[fe80:0:0:0:a0a7:fb6:e2e5:c97a]:19788
    Jul 25 13:06:54 raspberrypi otbr-agent[3275]: 00:00:10.224 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
    amhs@raspberrypi:~$ sudo ot-ctl state
    detached
    Done
    amhs@raspberrypi:~$ sudo ot-ctl state
    leader
    Done
    amhs@raspberrypi:~$ sudo ot-ctl commissioner start
    Commissioner: petitioning
    Done
    amhs@raspberrypi:~$ sudo ot-ctl commissioner state
    active
    Done

Related