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,