openthread coprocessor sample from sdk v3.2.1 doesn't work for me with openthread border router

The openthread coprocessor sample in sdk v2.8.0 and v3.1.0 work for me with the openthread border router but not the sample in sdk v3.2.1

I followed the instructions for buiding the openthread border router and the coprocessor as described here:  https://docs.nordicsemi.com/bundle/ncs-3.2.1/page/nrf/protocols/thread/tools.html

~/src/ot-br-posix$ git branch
* (HEAD detached at fbde28a0)
  main
  
otbr-agent --version
0.3.0-thread-reference-20230710-394-gfbde28a0

When trying to run the openthread border router with the coprocessor built with sdk v3.2.1  I get the following:

systemctl status otbr-agent
● otbr-agent.service - LSB: thread border agent
     Loaded: loaded (/etc/init.d/otbr-agent; generated)
    Drop-In: /run/systemd/system/service.d
             └─zzz-lxc-service.conf
     Active: active (running) since Wed 2026-02-11 21:49:36 UTC; 26s ago
 Invocation: ad8db29b4ee2431d92a5f5ef84622c67
       Docs: man:systemd-sysv-generator(8)
    Process: 359 ExecStart=/etc/init.d/otbr-agent start (code=exited, status=0/SUCCESS)
      Tasks: 1 (limit: 19037)
     Memory: 776K (peak: 1.9M)
        CPU: 23ms
     CGroup: /system.slice/otbr-agent.service
             └─365 /usr/sbin/otbr-agent -I wpan0 -B eth0 "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000" trel://eth0

Feb 11 21:49:36 otbr otbr-agent[365]: [NOTE]-AGENT---: Radio URL: spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000
Feb 11 21:49:36 otbr otbr-agent[365]: [NOTE]-AGENT---: Radio URL: trel://eth0
Feb 11 21:49:36 otbr otbr-agent[365]: [NOTE]-ILS-----: Infra link selected: eth0
Feb 11 21:49:36 otbr otbr-agent[365]: [INFO]-RCP_HOS-: OpenThread log level changed to 4
Feb 11 21:49:49 otbr otbr-agent[365]: 49d.17:36:28.060 [W] P-SpinelDrive-: Wait for response timeout
Feb 11 21:49:49 otbr otbr-agent[365]: 49d.17:36:28.060 [I] P-SpinelDrive-: co-processor self reset successfully
Feb 11 21:49:51 otbr otbr-agent[365]: 49d.17:36:30.062 [W] P-SpinelDrive-: Wait for response timeout
Feb 11 21:49:53 otbr otbr-agent[365]: 49d.17:36:32.065 [W] P-SpinelDrive-: Wait for response timeout
Feb 11 21:49:53 otbr otbr-agent[365]: 49d.17:36:32.065 [C] Platform------: Init() at spinel_driver.cpp:82: Failure
Feb 11 21:49:55 otbr otbr-agent[365]: 49d.17:36:34.067 [W] P-SpinelDrive-: Wait for response timeout


Running the same deployment of the border router with a coprocessor built with sdk v2.8.0 works fine:

systemctl status otbr-agent
● otbr-agent.service - LSB: thread border agent
     Loaded: loaded (/etc/init.d/otbr-agent; generated)
    Drop-In: /run/systemd/system/service.d
             └─zzz-lxc-service.conf
     Active: active (running) since Wed 2026-02-11 21:54:37 UTC; 6s ago
 Invocation: e0a3f2992eb749b6ba02affa242c2b47
       Docs: man:systemd-sysv-generator(8)
    Process: 393 ExecStart=/etc/init.d/otbr-agent start (code=exited, status=0/SUCCESS)
      Tasks: 1 (limit: 19037)
     Memory: 1M (peak: 2.1M)
        CPU: 48ms
     CGroup: /system.slice/otbr-agent.service
             └─399 /usr/sbin/otbr-agent -I wpan0 -B eth0 "spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=1000000" trel://eth0

Feb 11 21:54:38 otbr otbr-agent[399]: 00:00:00.680 [I] P-Netif-------: ADD [M] ff03::fc (already subscribed, ignored)
Feb 11 21:54:38 otbr otbr-agent[399]: 00:00:00.680 [I] P-Netif-------: ADD [M] ff03::1 (already subscribed, ignored)
Feb 11 21:54:38 otbr otbr-agent[399]: 00:00:00.680 [I] P-Netif-------: ADD [M] ff02::16 (already subscribed, ignored)
Feb 11 21:54:38 otbr otbr-agent[399]: 00:00:00.680 [I] P-Netif-------: ADD [M] ff02::2 (rejected)
Feb 11 21:54:38 otbr otbr-agent[399]: [INFO]-MDNS----: Successfully registered service OpenThread BorderRouter #26D8._meshcop._udp
Feb 11 21:54:38 otbr otbr-agent[399]: [INFO]-BA------: Result of publish meshcop service OpenThread BorderRouter #26D8._meshcop._udp.l>
Feb 11 21:54:42 otbr otbr-agent[399]: 00:00:04.720 [I] Mle-----------: Send Link Request (ff02:0:0:0:0:0:0:2)
Feb 11 21:54:42 otbr otbr-agent[399]: 00:00:04.727 [I] MeshForwarder-: Sent IPv6 UDP msg, len:82, chksum:ef27, ecn:no, to:0xffff, sec:>
Feb 11 21:54:42 otbr otbr-agent[399]: 00:00:04.727 [I] MeshForwarder-:     src:[fe80:0:0:0:bc00:b575:1961:26d8]:19788
Feb 11 21:54:42 otbr otbr-agent[399]: 00:00:04.727 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788


Please advise.

Thanks,
Jan Erik

Parents Reply
  • It's similar in the sense that the error message indicates that the border router is unable to communicate with the rcp. It is different in that it is not due to a connection issue. As I said in the original post, I have installed the border router version that is recommended in the documentation for sdk v3.2.1. A coprocessor built with sdk v2.8.0 and v3.1.0 work with the border router but the coprocessor built with v3.2.1 does not.

    Jan Erik

Children
  • Hi Jan,

    Could you try to unplug all other USB cables and plug in only the on that you intend to use for RCP?

    Also, could you try to force the HW flow control ? To avoid race conditions etc.

    So you could first disable MSD, i.e. the J-Link, then force the HW flow control and then perform a power cycle to apply this.

    -Priyanka

  • I should have said that the target is the nrf52840dongle, not connected to a dk with a segger chip.

    Removing all other usb devices had no effect.

    Just to be clear: The setup works perfectly when I flash the dongle with the coprocessor bult with nrfconnect sdk v3.1.0.  (and earlier versions.) It is only with v3.2.1. that the border router fails to connect with the coprocessor.

    While troubleshooting this issue, I discovered that the v3.2.1 has apparently changed the vendor ID for the dongle coprocessor.
    With v3.1.0 I get:

    lsusb
    Bus 001 Device 003: ID 1915:0000 Nordic Semiconductor ASA Thread Co-Processor


    with v3.2.1, I get:

    lsusb
    Bus 001 Device 016: ID 2fe3:0004 NordicSemiconductor CDC ACM serial backend

    Given the udev rules in the only Nordic Semi udev ruleset that I have been able to find (https://github.com/NordicSemiconductor/nrf-udev)

    # 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"

    I wouldn't expect the v3.2.1 coprocessor to work without changing the permissions to 0666. 

    Unfortunately, however, manually changing the permissions did not resolve the inablitity to communicate with the v3.2.1 coprocessor.

Related