Skip to content

ieee802154/at86rf215: port to radio hal - #22541

Open
Stopkaa wants to merge 18 commits into
RIOT-OS:masterfrom
Stopkaa:at86rf215-port-radio-hal
Open

ieee802154/at86rf215: port to radio hal#22541
Stopkaa wants to merge 18 commits into
RIOT-OS:masterfrom
Stopkaa:at86rf215-port-radio-hal

Conversation

@Stopkaa

@Stopkaa Stopkaa commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Contribution description

This PR ports the at86rf215 radio to the new Radio HAL. So far the Radio seems to run smooth. The RTT increases here also due the following commit a953ae9d9fe

add a IEEE802154_CAP_TX2RX cap

Since IEEE802154_CAP_IRQ_ACK_TIMEOUT and IEEE802154_CAP_FRAME_RETRANS are
not available on this radio, the TX2RX transition has to be handled by the SubMAC. Unfortunate this is an
SPI radio so the SubMAC is too slow to switch to RX in time and ACKs are missed.

The at86rf215 supports the Tx-to-Rx hardware acceleration by hardware so when an ACK was
requested the hardware enters RX after TX. The Submac needs only to set the ACK-Timeout Timer.

This was actually discussed in #14371 (comment)

Testing procedure

The ported driver was tested with the gnrc_networking example on an openmote-b
against other radios in both directions with and without 6LoWPAN fragmentation.
In addition the ieee802154_submac and ieee802154_hal tests were run against an nrf52840dk.

The following commands were used on the gnrc_networking example:

# fragmented
ping <addr> -s 1024 -c 10000 -i 300

# not fragmented
ping <addr> -c 20000 -i 20

Test Overview

Each cell is min / max / avg / dup / lost, times in ms.
10000 packets per fragmented run, 20000 per not fragmented run.

Radio Direction Fragmented Not Fragmented
at86rf231 at86rf215 → radio 163.1 / 220.1 / 191.5 / 0 / 0 7.4 / 35.2 / 9.6 / 0 / 3
at86rf231 radio → at86rf215 165.3 / 215.7 / 191.5 / 0 / 0 7.4 / 16.5 / 9.6 / 0 / 1
nrf802154 at86rf215 → radio 189.9 / 294.1 / 227.5 / 0 / 54 7.0 / 55.4 / 10.1 / 487 / 177
nrf802154 radio → at86rf215 188.5 / 296.3 / 224.6 / 0 / 9 7.0 / 71.0 / 10.4 / 212 / 1263
kw41zrf at86rf215 → radio 168.9 / 304.4 / 217.6 / 0 / 164 7.5 / 153.1 / 11.2 / 384 / 1032
kw41zrf radio → at86rf215 169.8 / 299.4 / 217.7 / 0 / 87 7.5 / 41.0 / 10.5 / 127 / 1118
esp_ieee802154 at86rf215 → radio 189.4 / 305.1 / 234.1 / 0 / 100 7.3 / 263.4 / 9.1 / 224 / 102
esp_ieee802154 radio → at86rf215 192.5 / 281.4 / 223.8 / 0 / 12 7.4 / 45.8 / 9.1 / 85 / 484
cc2538 at86rf215 → radio 194.9 / 246.7 / 217.0 / 0 / 2 8.0 / 23.9 / 10.1 / 1 / 0
cc2538 radio → at86rf215 192.6 / 249.6 / 217.1 / 0 / 3 8.0 / 50.1 / 10.1 / 0 / 18
kw2xrf at86rf215 → radio 201.6 / 305.8 / 235.9 / 0 / 212 8.4 / 120.7 / 11.9 / 390 / 1639
kw2xrf radio → at86rf215 197.1 / 295.1 / 235.7 / 0 / 103 run did not finish, see section 7

When testing locally with short ping intervals I encounter somehow more duplicates and packet loss than on iotlab.

1. Both interfaces in parallel (2× openmote-b, IoT-LAB)

Two openmote-b nodes (10 and 11) ping each other at the same time: one node
continuously pings the sub-GHz interface, the other one the 2.4 GHz interface.

With fragmentation the ping interval has to be set to at least twice the RTT. I assume this is because the second interface
keeps the node busy in the background so processing a single packet takes
considerably longer especially with fragmentation involved. What helps here is
setting

CFLAGS += -DCONFIG_GNRC_SIXLOWPAN_FRAG_FB_SIZE=4
Fragmented — fe80::ac8d:fee1:6030:5282%8
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9991 ttl=64 rssi=-61 dBm time=207.900 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9992 ttl=64 rssi=-61 dBm time=208.978 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9993 ttl=64 rssi=-61 dBm time=223.315 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9994 ttl=64 rssi=-61 dBm time=216.761 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9995 ttl=64 rssi=-61 dBm time=223.980 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9996 ttl=64 rssi=-61 dBm time=223.538 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9997 ttl=64 rssi=-61 dBm time=221.040 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9998 ttl=64 rssi=-61 dBm time=204.429 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=9999 ttl=64 rssi=-61 dBm time=214.328 ms

--- fe80::ac8d:fee1:6030:5282%8 PING statistics ---
10000 packets transmitted, 9993 packets received, 0% packet loss
round-trip min/avg/max = 184.947/217.872/256.016 ms
Fragmented — fe80::ac8d:fee1:6050:73df%7
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9992 ttl=64 rssi=-62 dBm time=205.481 ms
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9993 ttl=64 rssi=-63 dBm time=228.892 ms
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9994 ttl=64 rssi=-62 dBm time=203.923 ms
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9995 ttl=64 rssi=-62 dBm time=218.354 ms
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9996 ttl=64 rssi=-62 dBm time=227.390 ms
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9997 ttl=64 rssi=-62 dBm time=220.992 ms
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9998 ttl=64 rssi=-63 dBm time=208.116 ms
1032 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=9999 ttl=64 rssi=-62 dBm time=216.582 ms

--- fe80::ac8d:fee1:6050:73df%7 PING statistics ---
10000 packets transmitted, 9997 packets received, 0% packet loss
round-trip min/avg/max = 185.081/217.991/255.240 ms

Without fragmentation the same setup runs fine with an interval of 25 ms:

Not fragmented, -i 25fe80::ac8d:fee1:6030:5282%8
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19988 ttl=64 rssi=-61 dBm time=10.839 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19989 ttl=64 rssi=-61 dBm time=10.519 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19990 ttl=64 rssi=-61 dBm time=11.477 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19991 ttl=64 rssi=-61 dBm time=11.157 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19992 ttl=64 rssi=-61 dBm time=11.162 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19993 ttl=64 rssi=-61 dBm time=10.517 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19994 ttl=64 rssi=-61 dBm time=9.247 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19995 ttl=64 rssi=-61 dBm time=9.879 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19996 ttl=64 rssi=-61 dBm time=11.479 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19997 ttl=64 rssi=-61 dBm time=9.891 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19998 ttl=64 rssi=-61 dBm time=12.439 ms
12 bytes from fe80::ac8d:fee1:6030:5282%8: icmp_seq=19999 ttl=64 rssi=-61 dBm time=9.241 ms

--- fe80::ac8d:fee1:6030:5282%8 PING statistics ---
20000 packets transmitted, 20000 packets received, 4 duplicates, 0% packet loss
round-trip min/avg/max = 8.608/10.855/30.134 ms
Not fragmented, -i 25fe80::ac8d:fee1:6050:73df%7
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19988 ttl=64 rssi=-62 dBm time=12.532 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19989 ttl=64 rssi=-62 dBm time=9.970 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19990 ttl=64 rssi=-62 dBm time=10.930 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19991 ttl=64 rssi=-62 dBm time=9.970 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19992 ttl=64 rssi=-62 dBm time=10.612 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19993 ttl=64 rssi=-62 dBm time=10.941 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19994 ttl=64 rssi=-62 dBm time=9.970 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19995 ttl=64 rssi=-62 dBm time=9.330 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19996 ttl=64 rssi=-62 dBm time=11.250 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19997 ttl=64 rssi=-62 dBm time=11.890 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19998 ttl=64 rssi=-62 dBm time=10.299 ms
12 bytes from fe80::ac8d:fee1:6050:73df%7: icmp_seq=19999 ttl=64 rssi=-62 dBm time=12.209 ms

--- fe80::ac8d:fee1:6050:73df%7 PING statistics ---
20000 packets transmitted, 19999 packets received, 3 duplicates, 0% packet loss
round-trip min/avg/max = 8.697/10.957/47.480 ms

2. openmote-b ↔ iotlab-m3

The iotlab-m3 uses an at86rf231 with the legacy netdev driver. Both nodes
were running on IoT-LAB Strasbourg.

openmote-b → m3, fragmented
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9992 ttl=64 rssi=-72 dBm time=192.924 ms
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9993 ttl=64 rssi=-73 dBm time=193.955 ms
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9994 ttl=64 rssi=-73 dBm time=197.888 ms
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9995 ttl=64 rssi=-72 dBm time=180.539 ms
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9996 ttl=64 rssi=-72 dBm time=193.709 ms
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9997 ttl=64 rssi=-73 dBm time=177.589 ms
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9998 ttl=64 rssi=-72 dBm time=193.923 ms
1032 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=9999 ttl=64 rssi=-72 dBm time=200.744 ms

--- fe80::dce3:673f:2743:5191%8 PING statistics ---
10000 packets transmitted, 10000 packets received, 0% packet loss
round-trip min/avg/max = 163.102/191.489/220.143 ms
m3 → openmote-b, fragmented
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9989 ttl=64 rssi=-70 dBm time=179.214 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9990 ttl=64 rssi=-70 dBm time=181.532 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9991 ttl=64 rssi=-70 dBm time=186.004 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9992 ttl=64 rssi=-70 dBm time=181.589 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9993 ttl=64 rssi=-70 dBm time=183.597 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9994 ttl=64 rssi=-70 dBm time=185.602 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9995 ttl=64 rssi=-70 dBm time=189.498 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9996 ttl=64 rssi=-70 dBm time=203.772 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9997 ttl=64 rssi=-70 dBm time=193.641 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9998 ttl=64 rssi=-70 dBm time=188.079 ms
1032 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=9999 ttl=64 rssi=-70 dBm time=191.555 ms

--- fe80::ac8d:fee1:6030:5282 PING statistics ---
10000 packets transmitted, 10000 packets received, 0% packet loss
round-trip min/avg/max = 165.268/191.525/215.675 ms
openmote-b → m3, not fragmented
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19986 ttl=64 rssi=-73 dBm time=11.857 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19987 ttl=64 rssi=-72 dBm time=10.897 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19988 ttl=64 rssi=-73 dBm time=8.979 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19989 ttl=64 rssi=-72 dBm time=8.659 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19990 ttl=64 rssi=-72 dBm time=9.299 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19991 ttl=64 rssi=-72 dBm time=9.619 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19992 ttl=64 rssi=-72 dBm time=10.579 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19993 ttl=64 rssi=-72 dBm time=8.337 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19994 ttl=64 rssi=-72 dBm time=8.659 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19995 ttl=64 rssi=-73 dBm time=10.259 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19996 ttl=64 rssi=-72 dBm time=8.979 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19997 ttl=64 rssi=-73 dBm time=8.662 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19998 ttl=64 rssi=-73 dBm time=10.579 ms
12 bytes from fe80::dce3:673f:2743:5191%8: icmp_seq=19999 ttl=64 rssi=-73 dBm time=10.259 ms

--- fe80::dce3:673f:2743:5191%8 PING statistics ---
20000 packets transmitted, 19997 packets received, 0% packet loss
round-trip min/avg/max = 7.378/9.623/35.177 ms
m3 → openmote-b, not fragmented
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19987 ttl=64 rssi=-70 dBm time=10.252 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19988 ttl=64 rssi=-70 dBm time=9.930 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19989 ttl=64 rssi=-70 dBm time=10.253 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19990 ttl=64 rssi=-70 dBm time=10.571 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19991 ttl=64 rssi=-70 dBm time=9.619 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19992 ttl=64 rssi=-70 dBm time=11.533 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19993 ttl=64 rssi=-70 dBm time=11.850 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19994 ttl=64 rssi=-70 dBm time=11.216 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19995 ttl=64 rssi=-70 dBm time=9.610 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19996 ttl=64 rssi=-70 dBm time=10.893 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19997 ttl=64 rssi=-70 dBm time=7.699 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19998 ttl=64 rssi=-70 dBm time=8.971 ms
12 bytes from fe80::ac8d:fee1:6030:5282%5: icmp_seq=19999 ttl=64 rssi=-70 dBm time=10.251 ms

--- fe80::ac8d:fee1:6030:5282 PING statistics ---
20000 packets transmitted, 19999 packets received, 0% packet loss
round-trip min/avg/max = 7.381/9.617/16.463 ms

3. openmote-b ↔ nrf52840dk

The nrf52840dk uses its integrated nrf802154 radio. Run locally.

openmote-b → nrf52840dk, fragmented
2026-08-21 12:42:46,883 # 1032 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=9993 ttl=64 rssi=-88 dBm time=229.473 ms
2026-08-21 12:42:47,203 # 1032 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=9994 ttl=64 rssi=-87 dBm time=238.971 ms
2026-08-21 12:42:47,507 # 1032 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=9995 ttl=64 rssi=-88 dBm time=242.894 ms
2026-08-21 12:42:47,779 # 1032 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=9996 ttl=64 rssi=-88 dBm time=218.589 ms
2026-08-21 12:42:48,067 # 1032 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=9997 ttl=64 rssi=-87 dBm time=213.036 ms
2026-08-21 12:42:48,388 # 1032 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=9998 ttl=64 rssi=-88 dBm time=230.404 ms
2026-08-21 12:42:48,691 # 1032 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=9999 ttl=64 rssi=-87 dBm time=235.555 ms
2026-08-21 12:42:49,459 # --- fe80::5cef:e8ca:a044:9fb9%8 PING statistics ---
2026-08-21 12:42:49,459 # 10000 packets transmitted, 9946 packets received, 0% packet loss
2026-08-21 12:42:49,460 # round-trip min/avg/max = 189.911/227.515/294.080 ms
nrf52840dk → openmote-b, fragmented
2026-08-21 13:33:14,129 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9990 ttl=64 rssi=-67 dBm time=227.535 ms
2026-08-21 13:33:14,428 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9991 ttl=64 rssi=-67 dBm time=226.506 ms
2026-08-21 13:33:14,726 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9992 ttl=64 rssi=-65 dBm time=224.730 ms
2026-08-21 13:33:15,024 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9993 ttl=64 rssi=-65 dBm time=222.625 ms
2026-08-21 13:33:15,323 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9994 ttl=64 rssi=-64 dBm time=221.034 ms
2026-08-21 13:33:15,623 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9995 ttl=64 rssi=-66 dBm time=221.412 ms
2026-08-21 13:33:15,914 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9996 ttl=64 rssi=-66 dBm time=212.593 ms
2026-08-21 13:33:16,224 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9997 ttl=64 rssi=-65 dBm time=222.249 ms
2026-08-21 13:33:16,526 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9998 ttl=64 rssi=-66 dBm time=224.250 ms
2026-08-21 13:33:16,822 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9999 ttl=64 rssi=-66 dBm time=220.041 ms
2026-08-21 13:33:17,598 # --- fe80::ac8d:fee1:204f:2a23 PING statistics ---
2026-08-21 13:33:17,603 # 10000 packets transmitted, 9991 packets received, 0% packet loss
2026-08-21 13:33:17,608 # round-trip min/avg/max = 188.520/224.554/296.323 ms
openmote-b → nrf52840dk, not fragmented
2026-08-21 13:59:20,127 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19991 ttl=64 rssi=-81 dBm time=8.620 ms
2026-08-21 13:59:20,143 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19992 ttl=64 rssi=-81 dBm time=8.942 ms
2026-08-21 13:59:20,175 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19993 ttl=64 rssi=-81 dBm time=9.902 ms
2026-08-21 13:59:20,207 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19994 ttl=64 rssi=-81 dBm time=14.456 ms
2026-08-21 13:59:20,271 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19996 ttl=64 rssi=-81 dBm time=26.994 ms
2026-08-21 13:59:20,272 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19997 ttl=64 rssi=-81 dBm time=10.044 ms
2026-08-21 13:59:20,303 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19998 ttl=64 rssi=-81 dBm time=10.862 ms
2026-08-21 13:59:20,319 # 12 bytes from fe80::5cef:e8ca:a044:9fb9%8: icmp_seq=19999 ttl=64 rssi=-81 dBm time=7.349 ms
2026-08-21 13:59:21,311 # --- fe80::5cef:e8ca:a044:9fb9%8 PING statistics ---
2026-08-21 13:59:21,327 # 20000 packets transmitted, 19823 packets received, 487 duplicates, 0% packet loss
2026-08-21 13:59:21,327 # round-trip min/avg/max = 7.025/10.107/55.377 ms
nrf52840dk → openmote-b, not fragmented
2026-08-21 13:49:22,512 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19989 ttl=64 rssi=-75 dBm time=9.591 ms
2026-08-21 13:49:22,532 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19990 ttl=64 rssi=-75 dBm time=8.949 ms
2026-08-21 13:49:22,552 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19991 ttl=64 rssi=-75 dBm time=8.949 ms
2026-08-21 13:49:22,570 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19992 ttl=64 rssi=-75 dBm time=7.035 ms
2026-08-21 13:49:22,594 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19993 ttl=64 rssi=-75 dBm time=11.188 ms
2026-08-21 13:49:22,621 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19994 ttl=64 rssi=-75 dBm time=17.652 ms
2026-08-21 13:49:22,638 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19995 ttl=64 rssi=-75 dBm time=9.269 ms
2026-08-21 13:49:22,657 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19996 ttl=64 rssi=-75 dBm time=8.627 ms
2026-08-21 13:49:22,680 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19997 ttl=64 rssi=-75 dBm time=10.869 ms
2026-08-21 13:49:22,696 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19998 ttl=64 rssi=-75 dBm time=7.347 ms
2026-08-21 13:49:22,718 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19999 ttl=64 rssi=-75 dBm time=8.628 ms
2026-08-21 13:49:23,705 # --- fe80::ac8d:fee1:204f:2a23 PING statistics ---
2026-08-21 13:49:23,712 # 20000 packets transmitted, 18737 packets received, 212 duplicates, 6% packet loss
2026-08-21 13:49:23,717 # round-trip min/avg/max = 7.031/10.356/70.962 ms

4. openmote-b ↔ frdm-kw41z

The frdm-kw41z uses its integrated kw41zrf radio, which still uses the legacy
netdev driver.

openmote-b → kw41z, fragmented
2026-08-21 16:01:44,017 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9990 ttl=64 rssi=-70 dBm time=203.797 ms
2026-08-21 16:01:44,305 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9991 ttl=64 rssi=-70 dBm time=198.776 ms
2026-08-21 16:01:44,610 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9992 ttl=64 rssi=-70 dBm time=209.451 ms
2026-08-21 16:01:44,913 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9993 ttl=64 rssi=-70 dBm time=199.625 ms
2026-08-21 16:01:45,521 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9995 ttl=64 rssi=-70 dBm time=209.617 ms
2026-08-21 16:01:45,793 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9996 ttl=64 rssi=-70 dBm time=188.565 ms
2026-08-21 16:01:46,114 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9997 ttl=64 rssi=-70 dBm time=203.881 ms
2026-08-21 16:01:46,417 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9998 ttl=64 rssi=-70 dBm time=202.316 ms
2026-08-21 16:01:46,720 # 1032 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=9999 ttl=64 rssi=-70 dBm time=206.303 ms
2026-08-21 16:01:47,506 # --- fe80::1f22:b260:ee5d:5bee%8 PING statistics ---
2026-08-21 16:01:47,506 # 10000 packets transmitted, 9836 packets received, 1% packet loss
2026-08-21 16:01:47,520 # round-trip min/avg/max = 168.922/217.617/304.408 ms
kw41z → openmote-b, fragmented
2026-08-21 16:52:25,424 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9993 ttl=64 rssi=-67 dBm time=206.689 ms
2026-08-21 16:52:25,720 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9994 ttl=64 rssi=-66 dBm time=199.871 ms
2026-08-21 16:52:26,042 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9995 ttl=64 rssi=-68 dBm time=225.866 ms
2026-08-21 16:52:26,312 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9996 ttl=64 rssi=-67 dBm time=197.246 ms
2026-08-21 16:52:26,644 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9997 ttl=64 rssi=-67 dBm time=230.794 ms
2026-08-21 16:52:26,916 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9998 ttl=64 rssi=-68 dBm time=207.500 ms
2026-08-21 16:52:27,217 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9999 ttl=64 rssi=-67 dBm time=208.780 ms
2026-08-21 16:52:28,005 # --- fe80::ac8d:fee1:204f:2a23 PING statistics ---
2026-08-21 16:52:28,005 # 10000 packets transmitted, 9913 packets received, 0% packet loss
2026-08-21 16:52:28,010 # round-trip min/avg/max = 169.796/217.663/299.438 ms
openmote-b → kw41z, not fragmented
2026-08-21 17:10:30,831 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19991 ttl=64 rssi=-69 dBm time=10.060 ms
2026-08-21 17:10:30,848 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19992 ttl=64 rssi=-69 dBm time=10.376 ms
2026-08-21 17:10:30,864 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19993 ttl=64 rssi=-69 dBm time=9.091 ms
2026-08-21 17:10:30,880 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19994 ttl=64 rssi=-69 dBm time=8.768 ms
2026-08-21 17:10:30,911 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19995 ttl=64 rssi=-69 dBm time=9.740 ms
2026-08-21 17:10:30,927 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19996 ttl=64 rssi=-69 dBm time=11.016 ms
2026-08-21 17:10:30,944 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19997 ttl=64 rssi=-69 dBm time=9.413 ms
2026-08-21 17:10:30,960 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19998 ttl=64 rssi=-69 dBm time=9.729 ms
2026-08-21 17:10:30,991 # 12 bytes from fe80::1f22:b260:ee5d:5bee%8: icmp_seq=19999 ttl=64 rssi=-69 dBm time=9.420 ms
2026-08-21 17:10:31,967 # --- fe80::1f22:b260:ee5d:5bee%8 PING statistics ---
2026-08-21 17:10:31,983 # 20000 packets transmitted, 18968 packets received, 384 duplicates, 5% packet loss
2026-08-21 17:10:31,984 # round-trip min/avg/max = 7.515/11.171/153.087 ms
kw41z → openmote-b, not fragmented
2026-08-21 17:02:44,973 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19990 ttl=64 rssi=-69 dBm time=7.833 ms
2026-08-21 17:02:44,998 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19991 ttl=64 rssi=-69 dBm time=11.050 ms
2026-08-21 17:02:45,013 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19992 ttl=64 rssi=-70 dBm time=9.447 ms
2026-08-21 17:02:45,034 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19993 ttl=64 rssi=-70 dBm time=8.471 ms
2026-08-21 17:02:45,054 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19994 ttl=64 rssi=-70 dBm time=9.763 ms
2026-08-21 17:02:45,074 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19995 ttl=64 rssi=-70 dBm time=9.773 ms
2026-08-21 17:02:45,098 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19996 ttl=64 rssi=-70 dBm time=11.045 ms
2026-08-21 17:02:45,114 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19997 ttl=64 rssi=-70 dBm time=8.504 ms
2026-08-21 17:02:45,134 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19998 ttl=64 rssi=-69 dBm time=9.121 ms
2026-08-21 17:02:45,154 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=19999 ttl=64 rssi=-69 dBm time=9.122 ms
2026-08-21 17:02:46,139 # --- fe80::ac8d:fee1:204f:2a23 PING statistics ---
2026-08-21 17:02:46,144 # 20000 packets transmitted, 18882 packets received, 127 duplicates, 5% packet loss
2026-08-21 17:02:46,154 # round-trip min/avg/max = 7.536/10.484/40.958 ms

5. openmote-b ↔ esp32-c6

The esp32-c6 uses its integrated esp_ieee802154 radio. Run locally.

openmote-b → esp32-c6, fragmented
2026-08-22 14:38:17,137 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9988 ttl=64 rssi=-87 dBm time=211.557 ms
2026-08-22 14:38:17,456 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9989 ttl=64 rssi=-86 dBm time=226.056 ms
2026-08-22 14:38:17,776 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9990 ttl=64 rssi=-86 dBm time=257.595 ms
2026-08-22 14:38:18,064 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9991 ttl=64 rssi=-86 dBm time=236.021 ms
2026-08-22 14:38:18,351 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9992 ttl=64 rssi=-86 dBm time=224.812 ms
2026-08-22 14:38:18,656 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9993 ttl=64 rssi=-86 dBm time=229.379 ms
2026-08-22 14:38:18,960 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9994 ttl=64 rssi=-86 dBm time=241.514 ms
2026-08-22 14:38:19,248 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9995 ttl=64 rssi=-86 dBm time=225.958 ms
2026-08-22 14:38:19,552 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9996 ttl=64 rssi=-86 dBm time=222.952 ms
2026-08-22 14:38:19,856 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9997 ttl=64 rssi=-86 dBm time=230.488 ms
2026-08-22 14:38:20,144 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9998 ttl=64 rssi=-86 dBm time=226.474 ms
2026-08-22 14:38:20,464 # 1032 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=9999 ttl=64 rssi=-86 dBm time=238.370 ms
2026-08-22 14:38:21,216 # --- fe80::a4af:bfed:c0b7:d2f2%8 PING statistics ---
2026-08-22 14:38:21,217 # 10000 packets transmitted, 9900 packets received, 1% packet loss
2026-08-22 14:38:21,232 # round-trip min/avg/max = 189.420/234.113/305.146 ms
esp32-c6 → openmote-b, fragmented
2026-08-22 13:39:19,997 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9990 ttl=64 rssi=80 dBm time=233.669 ms
2026-08-22 13:39:20,310 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9991 ttl=64 rssi=80 dBm time=247.172 ms
2026-08-22 13:39:20,592 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9992 ttl=64 rssi=80 dBm time=228.618 ms
2026-08-22 13:39:20,917 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9993 ttl=64 rssi=80 dBm time=253.070 ms
2026-08-22 13:39:21,196 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9994 ttl=64 rssi=80 dBm time=232.589 ms
2026-08-22 13:39:21,513 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9995 ttl=64 rssi=80 dBm time=249.046 ms
2026-08-22 13:39:21,787 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9996 ttl=64 rssi=80 dBm time=223.266 ms
2026-08-22 13:39:22,094 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9997 ttl=64 rssi=80 dBm time=230.241 ms
2026-08-22 13:39:22,402 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9998 ttl=64 rssi=80 dBm time=239.212 ms
2026-08-22 13:39:22,697 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=9999 ttl=64 rssi=80 dBm time=233.500 ms
2026-08-22 13:39:23,463 # --- fe80::ac8d:fee1:204f:2a23 PING statistics ---
2026-08-22 13:39:23,464 # 10000 packets transmitted, 9988 packets received, 0% packet loss
2026-08-22 13:39:23,464 # round-trip min/avg/max = 192.500/223.764/281.444 ms
openmote-b → esp32-c6, not fragmented
2026-08-22 14:59:37,340 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19991 ttl=64 rssi=-73 dBm time=7.988 ms
2026-08-22 14:59:37,371 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19992 ttl=64 rssi=-73 dBm time=7.360 ms
2026-08-22 14:59:37,387 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19993 ttl=64 rssi=-73 dBm time=8.629 ms
2026-08-22 14:59:37,404 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19994 ttl=64 rssi=-73 dBm time=7.994 ms
2026-08-22 14:59:37,434 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19995 ttl=64 rssi=-73 dBm time=8.307 ms
2026-08-22 14:59:37,451 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19996 ttl=64 rssi=-73 dBm time=8.956 ms
2026-08-22 14:59:37,467 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19997 ttl=64 rssi=-73 dBm time=9.269 ms
2026-08-22 14:59:37,499 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19998 ttl=64 rssi=-73 dBm time=12.860 ms
2026-08-22 14:59:37,515 # 12 bytes from fe80::a4af:bfed:c0b7:d2f2%8: icmp_seq=19999 ttl=64 rssi=-73 dBm time=8.626 ms
2026-08-22 14:59:38,491 # --- fe80::a4af:bfed:c0b7:d2f2%8 PING statistics ---
2026-08-22 14:59:38,507 # 20000 packets transmitted, 19898 packets received, 224 duplicates, 0% packet loss
2026-08-22 14:59:38,508 # round-trip min/avg/max = 7.334/9.066/263.359 ms
esp32-c6 → openmote-b, not fragmented
2026-08-22 13:46:38,974 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19992 ttl=64 rssi=80 dBm time=8.198 ms
2026-08-22 13:46:38,995 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19993 ttl=64 rssi=80 dBm time=9.782 ms
2026-08-22 13:46:39,014 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19994 ttl=64 rssi=80 dBm time=8.840 ms
2026-08-22 13:46:39,040 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19995 ttl=64 rssi=80 dBm time=14.965 ms
2026-08-22 13:46:39,055 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19996 ttl=64 rssi=80 dBm time=9.158 ms
2026-08-22 13:46:39,075 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19997 ttl=64 rssi=80 dBm time=9.142 ms
2026-08-22 13:46:39,095 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19998 ttl=64 rssi=80 dBm time=9.480 ms
2026-08-22 13:46:39,114 # 12 bytes from fe80::ac8d:fee1:204f:2a23%7: icmp_seq=19999 ttl=64 rssi=80 dBm time=8.503 ms
2026-08-22 13:46:40,105 # --- fe80::ac8d:fee1:204f:2a23 PING statistics ---
2026-08-22 13:46:40,106 # 20000 packets transmitted, 19516 packets received, 85 duplicates, 2% packet loss
2026-08-22 13:46:40,106 # round-trip min/avg/max = 7.375/9.080/45.843 ms

6. openmote-b ↔ cc2538 (openmote-b)

The same two IoT-LAB nodes (10 and 11) as in section 1 were used here, one of
them flashed to use the on-board cc2538_rf radio instead.

openmote-b → cc2538 (openmote-b), fragmented
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9991 ttl=64 rssi=-64 dBm time=218.869 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9992 ttl=64 rssi=-64 dBm time=211.430 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9993 ttl=64 rssi=-64 dBm time=220.346 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9994 ttl=64 rssi=-64 dBm time=222.056 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9995 ttl=64 rssi=-64 dBm time=212.268 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9996 ttl=64 rssi=-64 dBm time=221.944 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9997 ttl=64 rssi=-64 dBm time=220.210 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9998 ttl=64 rssi=-64 dBm time=220.489 ms
1032 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=9999 ttl=64 rssi=-64 dBm time=221.103 ms

--- fe80::212:4b00:1935:6971%8 PING statistics ---
10000 packets transmitted, 9998 packets received, 0% packet loss
round-trip min/avg/max = 194.914/217.013/246.660 ms
cc2538 (openmote-b) → openmote-b, fragmented
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9989 ttl=64 rssi=-61 dBm time=224.403 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9990 ttl=64 rssi=-61 dBm time=225.550 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9991 ttl=64 rssi=-60 dBm time=214.099 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9992 ttl=64 rssi=-60 dBm time=219.927 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9993 ttl=64 rssi=-60 dBm time=222.231 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9994 ttl=64 rssi=-60 dBm time=212.357 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9995 ttl=64 rssi=-61 dBm time=221.189 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9996 ttl=64 rssi=-60 dBm time=205.671 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9997 ttl=64 rssi=-60 dBm time=212.641 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9998 ttl=64 rssi=-60 dBm time=215.510 ms
1032 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=9999 ttl=64 rssi=-60 dBm time=208.601 ms

--- fe80::ac8d:fee1:6050:73de PING statistics ---
10000 packets transmitted, 9997 packets received, 0% packet loss
round-trip min/avg/max = 192.558/217.134/249.571 ms
openmote-b → cc2538 (openmote-b), not fragmented
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19990 ttl=64 rssi=-64 dBm time=10.255 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19991 ttl=64 rssi=-63 dBm time=7.990 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19992 ttl=64 rssi=-64 dBm time=9.076 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19993 ttl=64 rssi=-64 dBm time=9.829 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19994 ttl=64 rssi=-64 dBm time=11.589 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19995 ttl=64 rssi=-64 dBm time=9.902 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19996 ttl=64 rssi=-64 dBm time=10.075 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19997 ttl=64 rssi=-64 dBm time=9.150 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19998 ttl=64 rssi=-64 dBm time=10.909 ms
12 bytes from fe80::212:4b00:1935:6971%8: icmp_seq=19999 ttl=64 rssi=-64 dBm time=10.319 ms

--- fe80::212:4b00:1935:6971%8 PING statistics ---
20000 packets transmitted, 20000 packets received, 1 duplicates, 0% packet loss
round-trip min/avg/max = 7.986/10.132/23.882 ms
cc2538 (openmote-b) → openmote-b, not fragmented
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19988 ttl=64 rssi=-60 dBm time=10.163 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19989 ttl=64 rssi=-61 dBm time=10.500 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19990 ttl=64 rssi=-60 dBm time=12.244 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19991 ttl=64 rssi=-61 dBm time=10.514 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19992 ttl=64 rssi=-60 dBm time=10.850 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19993 ttl=64 rssi=-60 dBm time=8.983 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19994 ttl=64 rssi=-60 dBm time=9.751 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19995 ttl=64 rssi=-60 dBm time=10.424 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19996 ttl=64 rssi=-61 dBm time=11.224 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19997 ttl=64 rssi=-60 dBm time=12.250 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19998 ttl=64 rssi=-60 dBm time=11.472 ms
12 bytes from fe80::ac8d:fee1:6050:73de%5: icmp_seq=19999 ttl=64 rssi=-60 dBm time=11.522 ms

--- fe80::ac8d:fee1:6050:73de PING statistics ---
20000 packets transmitted, 19982 packets received, 0% packet loss
round-trip min/avg/max = 7.982/10.125/50.100 ms

7. openmote-b ↔ phyWAVE-KW22

The pba-d-01-kw2x (phyWAVE-KW22) uses its integrated kw2xrf radio. Run locally.

In the not fragmented run from the pba-d-01-kw2x the node gets stucked after some time so this run has no output.
This happens also on master.

openmote-b → kw2x, fragmented
2026-08-24 10:25:35,541 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9990 ttl=64 rssi=-71 dBm time=228.920 ms
2026-08-24 10:25:35,845 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9991 ttl=64 rssi=-71 dBm time=223.983 ms
2026-08-24 10:25:36,165 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9992 ttl=64 rssi=-71 dBm time=241.886 ms
2026-08-24 10:25:36,453 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9993 ttl=64 rssi=-71 dBm time=238.079 ms
2026-08-24 10:25:36,741 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9994 ttl=64 rssi=-71 dBm time=229.544 ms
2026-08-24 10:25:37,046 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9995 ttl=64 rssi=-71 dBm time=224.773 ms
2026-08-24 10:25:37,349 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9996 ttl=64 rssi=-70 dBm time=225.800 ms
2026-08-24 10:25:37,638 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9997 ttl=64 rssi=-71 dBm time=225.453 ms
2026-08-24 10:25:37,956 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9998 ttl=64 rssi=-71 dBm time=230.214 ms
2026-08-24 10:25:38,245 # 1032 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=9999 ttl=64 rssi=-71 dBm time=225.292 ms
2026-08-24 10:25:39,013 # --- fe80::acfa:4110:e0b:fb19%8 PING statistics ---
2026-08-24 10:25:39,013 # 10000 packets transmitted, 9788 packets received, 2% packet loss
2026-08-24 10:25:39,029 # round-trip min/avg/max = 201.571/235.874/305.763 ms
kw2x → openmote-b, fragmented
2026-08-24 11:24:37,631 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9989 ttl=64 rssi=6 dBm time=226.341 ms
2026-08-24 11:24:37,939 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9990 ttl=64 rssi=6 dBm time=234.170 ms
2026-08-24 11:24:38,244 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9991 ttl=64 rssi=6 dBm time=238.635 ms
2026-08-24 11:24:38,561 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9992 ttl=64 rssi=6 dBm time=255.528 ms
2026-08-24 11:24:38,863 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9993 ttl=64 rssi=6 dBm time=257.764 ms
2026-08-24 11:24:39,144 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9994 ttl=64 rssi=6 dBm time=238.246 ms
2026-08-24 11:24:39,434 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9995 ttl=64 rssi=6 dBm time=228.277 ms
2026-08-24 11:24:39,753 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9996 ttl=64 rssi=6 dBm time=247.337 ms
2026-08-24 11:24:40,049 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9997 ttl=64 rssi=6 dBm time=243.944 ms
2026-08-24 11:24:40,350 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9998 ttl=64 rssi=6 dBm time=244.452 ms
2026-08-24 11:24:40,636 # 1032 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=9999 ttl=64 rssi=6 dBm time=229.983 ms
2026-08-24 11:24:41,402 # --- fe80::ac8d:fee1:204f:2a23 PING statistics ---
2026-08-24 11:24:41,407 # 10000 packets transmitted, 9897 packets received, 1% packet loss
2026-08-24 11:24:41,412 # round-trip min/avg/max = 197.144/235.738/295.102 ms
openmote-b → kw2x, not fragmented
2026-08-24 10:33:50,229 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19991 ttl=64 rssi=-70 dBm time=9.633 ms
2026-08-24 10:33:50,245 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19992 ttl=64 rssi=-70 dBm time=9.963 ms
2026-08-24 10:33:50,261 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19993 ttl=64 rssi=-70 dBm time=10.275 ms
2026-08-24 10:33:50,293 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19994 ttl=64 rssi=-70 dBm time=10.593 ms
2026-08-24 10:33:50,310 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19995 ttl=64 rssi=-70 dBm time=12.513 ms
2026-08-24 10:33:50,326 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19996 ttl=64 rssi=-70 dBm time=8.681 ms
2026-08-24 10:33:50,342 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19997 ttl=64 rssi=-70 dBm time=11.872 ms
2026-08-24 10:33:50,373 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19998 ttl=64 rssi=-70 dBm time=8.683 ms
2026-08-24 10:33:50,390 # 12 bytes from fe80::acfa:4110:e0b:fb19%8: icmp_seq=19999 ttl=64 rssi=-70 dBm time=10.602 ms
2026-08-24 10:33:51,381 # --- fe80::acfa:4110:e0b:fb19%8 PING statistics ---
2026-08-24 10:33:51,381 # 20000 packets transmitted, 18361 packets received, 390 duplicates, 8% packet loss
2026-08-24 10:33:51,382 # round-trip min/avg/max = 8.365/11.895/120.742 ms
kw2x → openmote-b, not fragmented (did not finish)
2026-08-24 11:33:54,828 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8195 ttl=64 rssi=8 dBm time=10.584 ms
2026-08-24 11:33:54,858 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8196 ttl=64 rssi=9 dBm time=10.596 ms
2026-08-24 11:33:54,923 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8198 ttl=64 rssi=8 dBm time=15.133 ms
2026-08-24 11:33:54,949 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8199 ttl=64 rssi=9 dBm time=11.222 ms
2026-08-24 11:33:54,978 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8200 ttl=64 rssi=8 dBm time=9.944 ms
2026-08-24 11:33:55,007 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8201 ttl=64 rssi=8 dBm time=9.302 ms
2026-08-24 11:33:55,039 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8202 ttl=64 rssi=8 dBm time=10.904 ms
2026-08-24 11:33:55,070 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8203 ttl=64 rssi=8 dBm time=11.542 ms
2026-08-24 11:33:55,100 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8204 ttl=64 rssi=8 dBm time=11.544 ms
2026-08-24 11:33:55,128 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8205 ttl=64 rssi=8 dBm time=9.622 ms
2026-08-24 11:33:55,157 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8206 ttl=64 rssi=8 dBm time=8.668 ms
2026-08-24 11:33:55,189 # 12 bytes from fe80::ac8d:fee1:204f:2a23%5: icmp_seq=8207 ttl=64 rssi=9 dBm time=10.902 ms

8. SubMAC test (openmote-b ↔ nrf52840dk)

Frames are sent with txtsnd and received correctly in both directions.

nrf52840dk → openmote-b

nrf52840dk (sender):

txtsnd AE:8D:FE:E1:20:4F:2B:22 10
2026-08-21 14:07:21,622 # txtsnd AE:8D:FE:E1:20:4F:2B:22 10
2026-08-21 14:07:21,626 # Tx complete
txtsnd AE:8D:FE:E1:20:4F:2B:22 10
2026-08-21 14:07:22,607 # txtsnd AE:8D:FE:E1:20:4F:2B:22 10
2026-08-21 14:07:22,610 # Tx complete
txtsnd AE:8D:FE:E1:20:4F:2B:22 10
2026-08-21 14:07:24,198 # txtsnd AE:8D:FE:E1:20:4F:2B:22 10
2026-08-21 14:07:24,202 # Tx complete

openmote-b (receiver):

2026-08-21 14:07:21,634 # DATA
2026-08-21 14:07:21,635 # Dest. PAN: 0x0023, Dest. addr.: ae:8d:fe:e1:20:4f:2b:22
2026-08-21 14:07:21,650 # Src. PAN: 0x0023, Src. addr.: 5e:ef:e8:ca:a0:44:97:b9
2026-08-21 14:07:21,651 # Security: 0, Frame pend.: 0, ACK req.: 1, PAN comp.: 1
2026-08-21 14:07:21,651 # Version: 1, Seq.: 2
2026-08-21 14:07:21,651 # 00000000  4C  6F  72  65  6D  20  69  70  73  75
2026-08-21 14:07:21,652 # txt (10 chars): Lorem ipsu
2026-08-21 14:07:21,666 # RSSI: 91, LQI: 0
2026-08-21 14:07:22,610 # DATA
2026-08-21 14:07:22,626 # Dest. PAN: 0x0023, Dest. addr.: ae:8d:fe:e1:20:4f:2b:22
2026-08-21 14:07:22,626 # Src. PAN: 0x0023, Src. addr.: 5e:ef:e8:ca:a0:44:97:b9
2026-08-21 14:07:22,627 # Security: 0, Frame pend.: 0, ACK req.: 1, PAN comp.: 1
2026-08-21 14:07:22,627 # Version: 1, Seq.: 3
2026-08-21 14:07:22,642 # 00000000  4C  6F  72  65  6D  20  69  70  73  75
2026-08-21 14:07:22,642 # txt (10 chars): Lorem ipsu
2026-08-21 14:07:22,642 # RSSI: 91, LQI: 0
2026-08-21 14:07:24,210 # DATA
2026-08-21 14:07:24,211 # Dest. PAN: 0x0023, Dest. addr.: ae:8d:fe:e1:20:4f:2b:22
2026-08-21 14:07:24,226 # Src. PAN: 0x0023, Src. addr.: 5e:ef:e8:ca:a0:44:97:b9
2026-08-21 14:07:24,226 # Security: 0, Frame pend.: 0, ACK req.: 1, PAN comp.: 1
2026-08-21 14:07:24,226 # Version: 1, Seq.: 4
2026-08-21 14:07:24,227 # 00000000  4C  6F  72  65  6D  20  69  70  73  75
2026-08-21 14:07:24,227 # txt (10 chars): Lorem ipsu
2026-08-21 14:07:24,227 # RSSI: 91, LQI: 0
openmote-b → nrf52840dk

openmote-b (sender):

2026-08-21 14:21:25,209 # txtsnd  5E:EF:E8:CA:A0:44:97:B9 100
2026-08-21 14:21:25,241 # No ACK
txtsnd  5E:EF:E8:CA:A0:44:97:B9 100
2026-08-21 14:21:25,993 # txtsnd  5E:EF:E8:CA:A0:44:97:B9 100
2026-08-21 14:21:26,025 # No ACK
txtsnd  5E:EF:E8:CA:A0:44:97:B9 100
2026-08-21 14:21:26,857 # txtsnd  5E:EF:E8:CA:A0:44:97:B9 100
2026-08-21 14:21:26,905 # No ACK

nrf52840dk (receiver):

2026-08-21 14:21:25,205 # DATA
2026-08-21 14:21:25,209 # Dest. PAN: 0x0023, Dest. addr.: 5e:ef:e8:ca:a0:44:97:b9
2026-08-21 14:21:25,214 # Src. PAN: 0x0023, Src. addr.: ae:8d:fe:e1:20:4f:2b:22
2026-08-21 14:21:25,219 # Security: 0, Frame pend.: 0, ACK req.: 1, PAN comp.: 1
2026-08-21 14:21:25,221 # Version: 1, Seq.: 88
2026-08-21 14:21:25,227 # 00000000  4C  6F  72  65  6D  20  69  70  73  75  6D  20  64  6F  6C  6F
2026-08-21 14:21:25,233 # 00000010  72  20  73  69  74  20  61  6D  65  74  2C  20  63  6F  6E  73
2026-08-21 14:21:25,240 # 00000020  65  63  74  65  74  75  72  20  61  64  69  70  69  73  63  69
2026-08-21 14:21:25,246 # 00000030  6E  67  20  65  6C  69  74  2E  20  45  74  69  61  6D  20  6F
2026-08-21 14:21:25,252 # 00000040  72  6E  61  72  65  6C  61  63  69  6E  69  61  20  6D  69  20
2026-08-21 14:21:25,259 # 00000050  65  6C  65  6D  65  6E  74  75  6D  20  69  6E  74  65  72  64
2026-08-21 14:21:25,261 # 00000060  75  6D  20  6C
2026-08-21 14:21:25,269 # txt (100 chars): Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ornarelacini
2026-08-21 14:21:25,271 #      a mi elementum interdum l
2026-08-21 14:21:25,273 # RSSI: 103, LQI: 88
2026-08-21 14:21:25,986 # DATA
2026-08-21 14:21:25,991 # Dest. PAN: 0x0023, Dest. addr.: 5e:ef:e8:ca:a0:44:97:b9
2026-08-21 14:21:25,995 # Src. PAN: 0x0023, Src. addr.: ae:8d:fe:e1:20:4f:2b:22
2026-08-21 14:21:26,000 # Security: 0, Frame pend.: 0, ACK req.: 1, PAN comp.: 1
2026-08-21 14:21:26,002 # Version: 1, Seq.: 89
2026-08-21 14:21:26,008 # 00000000  4C  6F  72  65  6D  20  69  70  73  75  6D  20  64  6F  6C  6F
2026-08-21 14:21:26,015 # 00000010  72  20  73  69  74  20  61  6D  65  74  2C  20  63  6F  6E  73
2026-08-21 14:21:26,021 # 00000020  65  63  74  65  74  75  72  20  61  64  69  70  69  73  63  69
2026-08-21 14:21:26,027 # 00000030  6E  67  20  65  6C  69  74  2E  20  45  74  69  61  6D  20  6F
2026-08-21 14:21:26,033 # 00000040  72  6E  61  72  65  6C  61  63  69  6E  69  61  20  6D  69  20
2026-08-21 14:21:26,040 # 00000050  65  6C  65  6D  65  6E  74  75  6D  20  69  6E  74  65  72  64
2026-08-21 14:21:26,042 # 00000060  75  6D  20  6C
2026-08-21 14:21:26,050 # txt (100 chars): Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ornarelacini
2026-08-21 14:21:26,053 #      a mi elementum interdum l
2026-08-21 14:21:26,054 # RSSI: 103, LQI: 88
2026-08-21 14:21:26,857 # DATA
2026-08-21 14:21:26,862 # Dest. PAN: 0x0023, Dest. addr.: 5e:ef:e8:ca:a0:44:97:b9
2026-08-21 14:21:26,867 # Src. PAN: 0x0023, Src. addr.: ae:8d:fe:e1:20:4f:2b:22
2026-08-21 14:21:26,871 # Security: 0, Frame pend.: 0, ACK req.: 1, PAN comp.: 1
2026-08-21 14:21:26,873 # Version: 1, Seq.: 90
2026-08-21 14:21:26,879 # 00000000  4C  6F  72  65  6D  20  69  70  73  75  6D  20  64  6F  6C  6F
2026-08-21 14:21:26,886 # 00000010  72  20  73  69  74  20  61  6D  65  74  2C  20  63  6F  6E  73
2026-08-21 14:21:26,892 # 00000020  65  63  74  65  74  75  72  20  61  64  69  70  69  73  63  69
2026-08-21 14:21:26,898 # 00000030  6E  67  20  65  6C  69  74  2E  20  45  74  69  61  6D  20  6F
2026-08-21 14:21:26,905 # 00000040  72  6E  61  72  65  6C  61  63  69  6E  69  61  20  6D  69  20
2026-08-21 14:21:26,911 # 00000050  65  6C  65  6D  65  6E  74  75  6D  20  69  6E  74  65  72  64
2026-08-21 14:21:26,913 # 00000060  75  6D  20  6C
2026-08-21 14:21:26,921 # txt (100 chars): Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ornarelacini
2026-08-21 14:21:26,924 #      a mi elementum interdum l

9. HAL test (openmote-b ↔ nrf52840dk)

openmote-b → nrf52840dk

openmote-b (sender):

txtsnd 5E:EF:E8:CA:A0:44:97:B9 10
2026-08-21 14:24:38,934 # txtsnd 5E:EF:E8:CA:A0:44:97:B9 10
2026-08-21 14:24:38,935 # Transmission succeeded
txtsnd 5E:EF:E8:CA:A0:44:97:B9 10
2026-08-21 14:24:40,358 # txtsnd 5E:EF:E8:CA:A0:44:97:B9 10
2026-08-21 14:24:40,374 # Transmission succeeded
txtsnd 5E:EF:E8:CA:A0:44:97:B9 10
2026-08-21 14:24:41,494 # txtsnd 5E:EF:E8:CA:A0:44:97:B9 10
2026-08-21 14:24:41,494 # Transmission succeeded

nrf52840dk (receiver):

2026-08-21 14:24:38,923 # Frame received:
2026-08-21 14:24:38,929 # 00000000  41  DC  00  23  00  B9  97  44  A0  CA  E8  EF  5E  22  2B  4F
2026-08-21 14:24:38,935 # 00000010  20  E1  FE  8D  AE  4C  6F  72  65  6D  20  69  70  73  75
2026-08-21 14:24:38,936 # LQI: 72, RSSI: 99
2026-08-21 14:24:40,360 # Frame received:
2026-08-21 14:24:40,366 # 00000000  41  DC  01  23  00  B9  97  44  A0  CA  E8  EF  5E  22  2B  4F
2026-08-21 14:24:40,372 # 00000010  20  E1  FE  8D  AE  4C  6F  72  65  6D  20  69  70  73  75
2026-08-21 14:24:40,373 # LQI: 72, RSSI: 99
2026-08-21 14:24:41,483 # Frame received:
2026-08-21 14:24:41,489 # 00000000  41  DC  02  23  00  B9  97  44  A0  CA  E8  EF  5E  22  2B  4F
2026-08-21 14:24:41,495 # 00000010  20  E1  FE  8D  AE  4C  6F  72  65  6D  20  69  70  73  75
2026-08-21 14:24:41,497 # LQI: 72, RSSI: 99
nrf52840dk → openmote-b

nrf52840dk (sender):

txtsnd AE:8D:FE:E1:20:4F:2B:22 100
2026-08-21 14:27:06,101 # txtsnd AE:8D:FE:E1:20:4F:2B:22 100
2026-08-21 14:27:06,107 # Transmission succeeded
txtsnd AE:8D:FE:E1:20:4F:2B:22 100
2026-08-21 14:27:07,097 # txtsnd AE:8D:FE:E1:20:4F:2B:22 100
2026-08-21 14:27:07,103 # Transmission succeeded
txtsnd AE:8D:FE:E1:20:4F:2B:22 100
2026-08-21 14:27:07,843 # txtsnd AE:8D:FE:E1:20:4F:2B:22 100
2026-08-21 14:27:07,849 # Transmission succeeded

openmote-b (receiver):

2026-08-21 14:27:06,111 # Frame received:
2026-08-21 14:27:06,128 # 00000000  41  DC  00  23  00  22  2B  4F  20  E1  FE  8D  AE  B9  97  44
2026-08-21 14:27:06,128 # 00000010  A0  CA  E8  EF  5E  4C  6F  72  65  6D  20  69  70  73  75  6D
2026-08-21 14:27:06,129 # 00000020  20  64  6F  6C  6F  72  20  73  69  74  20  61  6D  65  74  2C
2026-08-21 14:27:06,144 # 00000030  20  63  6F  6E  73  65  63  74  65  74  75  72  20  61  64  69
2026-08-21 14:27:06,144 # 00000040  70  69  73  63  69  6E  67  20  65  6C  69  74  2E  20  45  74
2026-08-21 14:27:06,159 # 00000050  69  61  6D  20  6F  72  6E  61  72  65  20  6C  61  63  69  6E
2026-08-21 14:27:06,159 # 00000060  69  61  20  6D  69  20  65  6C  65  6D  65  6E  74  75  6D  20
2026-08-21 14:27:06,160 # 00000070  69  6E  74  65  72  64  75  6D  20
2026-08-21 14:27:06,160 # LQI: 0, RSSI: 96
2026-08-21 14:27:07,103 # Frame received:
2026-08-21 14:27:07,119 # 00000000  41  DC  01  23  00  22  2B  4F  20  E1  FE  8D  AE  B9  97  44
2026-08-21 14:27:07,120 # 00000010  A0  CA  E8  EF  5E  4C  6F  72  65  6D  20  69  70  73  75  6D
2026-08-21 14:27:07,135 # 00000020  20  64  6F  6C  6F  72  20  73  69  74  20  61  6D  65  74  2C
2026-08-21 14:27:07,136 # 00000030  20  63  6F  6E  73  65  63  74  65  74  75  72  20  61  64  69
2026-08-21 14:27:07,136 # 00000040  70  69  73  63  69  6E  67  20  65  6C  69  74  2E  20  45  74
2026-08-21 14:27:07,151 # 00000050  69  61  6D  20  6F  72  6E  61  72  65  20  6C  61  63  69  6E
2026-08-21 14:27:07,152 # 00000060  69  61  20  6D  69  20  65  6C  65  6D  65  6E  74  75  6D  20
2026-08-21 14:27:07,166 # 00000070  69  6E  74  65  72  64  75  6D  20
2026-08-21 14:27:07,167 # LQI: 0, RSSI: 96
2026-08-21 14:27:07,855 # Frame received:
2026-08-21 14:27:07,871 # 00000000  41  DC  02  23  00  22  2B  4F  20  E1  FE  8D  AE  B9  97  44
2026-08-21 14:27:07,871 # 00000010  A0  CA  E8  EF  5E  4C  6F  72  65  6D  20  69  70  73  75  6D
2026-08-21 14:27:07,872 # 00000020  20  64  6F  6C  6F  72  20  73  69  74  20  61  6D  65  74  2C
2026-08-21 14:27:07,887 # 00000030  20  63  6F  6E  73  65  63  74  65  74  75  72  20  61  64  69
2026-08-21 14:27:07,887 # 00000040  70  69  73  63  69  6E  67  20  65  6C  69  74  2E  20  45  74
2026-08-21 14:27:07,902 # 00000050  69  61  6D  20  6F  72  6E  61  72  65  20  6C  61  63  69  6E
2026-08-21 14:27:07,903 # 00000060  69  61  20  6D  69  20  65  6C  65  6D  65  6E  74  75  6D  20
2026-08-21 14:27:07,903 # 00000070  69  6E  74  65  72  64  75  6D  20
2026-08-21 14:27:07,904 # LQI: 0, RSSI: 96

Issues/PRs references

Marks off item in #14792
Hopefully fixes #20505 and the corresponding PR #22016. rxam is no longer
enabled at reset, it can only be activated through
ieee802154_radio_config_src_address_match.
Hopefully also fixes #21685

Declaration of AI-Tools / LLMs usage:

AI-Tools / LLMs that were used are:

  • Claude Opus 5 for reviewing, analyzing and troubleshooting

@github-actions github-actions Bot added Area: network Area: Networking Area: tests Area: tests and testing framework Area: drivers Area: Device drivers Area: sys Area: System labels Aug 4, 2026
@crasbe crasbe added Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors) Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation Type: cleanup The issue proposes a clean-up / The PR cleans-up parts of the codebase / documentation CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR AI: Helped PR/Issue uses AI sparingly, e.g. code inline assistant, debugging with AI, etc. CI: no fast fail don't abort PR build after first error labels Aug 4, 2026
@riot-ci

riot-ci commented Aug 4, 2026

Copy link
Copy Markdown

Murdock results

✔️ PASSED

286aeff fixup! tests/ieee802154_submac: add print_state

Success Failures Total Runtime
11276 0 11277 12m:26s

Artifacts

@Stopkaa
Stopkaa force-pushed the at86rf215-port-radio-hal branch from 9c27e0a to 3bd224c Compare August 24, 2026 07:40
@Stopkaa
Stopkaa force-pushed the at86rf215-port-radio-hal branch from 3bd224c to d89befa Compare August 24, 2026 10:56
@github-actions github-actions Bot added the Area: pkg Area: External package ports label Aug 24, 2026
@Stopkaa
Stopkaa marked this pull request as ready for review August 24, 2026 11:21
@benpicco

Copy link
Copy Markdown
Contributor

I'd suggest that instead of replacing the old driver, you create a new at86rf215_hal driver if this does not support the non-legacy modulations yet.

The infrastructure for multiple modulations already existed but was
never used by any radio driver. The AT86RF215 allows to use different
modulations. Therefore extend the submac to support this feature.

Keep the 802.15.4g parameters in a phy_conf union in netdev_ieee802154_submac_t,
since the HAL has no way to read them back from the radio.
Switching PHY mode loads the compile time defaults of the target mode.
@Stopkaa

Stopkaa commented Aug 25, 2026

Copy link
Copy Markdown
Contributor Author

Yeah totally forget about that but it was actually not that difficult to add. But I'm not sure if this is the desired way.
I tested it on IoT-Lab and switched different phy's in one session and was still able to communicate

Test result

Results
> ifconfig 8 set phy mr-o-qpsk
success: set PHY mode MR-O-QPSK
> ifconfig 8 set chips 100
success: set chip rate to 100 kchip/s
> ifconfig 8 set rate_mode 0
success: set rate mode on interface 8 to 0
> ping fe80::ac8d:fee1:6050:73de%8 -s 10 -c 10 -i 500
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=0 ttl=64 rssi=-62 dBm time=252.215 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=1 ttl=64 rssi=-63 dBm time=261.333 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=2 ttl=64 rssi=-62 dBm time=252.213 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=3 ttl=64 rssi=-62 dBm time=265.896 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=4 ttl=64 rssi=-62 dBm time=332.804 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=5 ttl=64 rssi=-62 dBm time=245.373 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=6 ttl=64 rssi=-62 dBm time=245.373 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=7 ttl=64 rssi=-62 dBm time=249.930 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=8 ttl=64 rssi=-62 dBm time=252.208 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=9 ttl=64 rssi=-62 dBm time=259.053 ms

--- fe80::ac8d:fee1:6050:73de%8 PING statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 245.373/261.639/332.804 ms

> ifconfig 8 set chips 2000
success: set chip rate to 2000 kchip/s
> ifconfig 8 set rate_mode 3
success: set rate mode on interface 8 to 3
> ping fe80::ac8d:fee1:6050:73de%8 -s 10 -c 10 -i 500
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=0 ttl=64 rssi=-62 dBm time=34.019 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=1 ttl=64 rssi=-62 dBm time=41.573 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=2 ttl=64 rssi=-62 dBm time=49.131 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=3 ttl=64 rssi=-62 dBm time=32.507 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=4 ttl=64 rssi=-62 dBm time=38.562 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=5 ttl=64 rssi=-62 dBm time=35.525 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=6 ttl=64 rssi=-62 dBm time=47.616 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=7 ttl=64 rssi=-62 dBm time=35.519 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=8 ttl=64 rssi=-62 dBm time=40.060 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=9 ttl=64 rssi=-62 dBm time=40.057 ms

--- fe80::ac8d:fee1:6050:73de%8 PING statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 32.507/39.456/49.131 ms

> ifconfig 8 set phy mr-ofdm
success: set PHY mode MR-OFDM
> ifconfig 8 set mcs 2
success: set modulation/coding scheme on interface 8 to 2
> ifconfig 8 set option 4
success: set OFDM option on interface 8 to 4
> ping fe80::ac8d:fee1:6050:73de%8 -s 10 -c 10 -i 500
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=0 ttl=64 rssi=-66 dBm time=39.207 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=1 ttl=64 rssi=-66 dBm time=31.370 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=2 ttl=64 rssi=-66 dBm time=41.163 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=3 ttl=64 rssi=-66 dBm time=50.964 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=4 ttl=64 rssi=-66 dBm time=31.370 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=5 ttl=64 rssi=-64 dBm time=39.221 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=6 ttl=64 rssi=-66 dBm time=37.245 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=7 ttl=64 rssi=-66 dBm time=31.371 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=8 ttl=64 rssi=-66 dBm time=37.259 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=9 ttl=64 rssi=-66 dBm time=50.966 ms

--- fe80::ac8d:fee1:6050:73de%8 PING statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 31.370/39.013/50.966 ms

> ifconfig 8 set phy mr-fsk
success: set PHY mode MR-FSK
> ifconfig 8 set srate 200
success: set symbol rate to 200 kHz
> ifconfig 8 set mord 4
success: set FSK modulation order on interface 8 to 4
> ifconfig 8 set fec rsc
success: set forward error correction to RSC
> ifconfig 8 set modulation_index 3/4
success: set modulation index to 0/64
> ping fe80::ac8d:fee1:6050:73de%8 -s 10 -c 10 -i 500
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=0 ttl=64 rssi=-60 dBm time=19.537 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=1 ttl=64 rssi=-59 dBm time=19.537 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=2 ttl=64 rssi=-60 dBm time=16.073 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=3 ttl=64 rssi=-60 dBm time=16.073 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=4 ttl=64 rssi=-59 dBm time=21.856 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=5 ttl=64 rssi=-60 dBm time=19.553 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=6 ttl=64 rssi=-59 dBm time=17.226 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=7 ttl=64 rssi=-59 dBm time=23.017 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=8 ttl=64 rssi=-59 dBm time=16.064 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=9 ttl=64 rssi=-60 dBm time=18.378 ms

--- fe80::ac8d:fee1:6050:73de%8 PING statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 16.064/18.731/23.017 ms

> ifconfig 8 set phy o-qpsk
success: set PHY mode O-QPSK
> ping fe80::ac8d:fee1:6050:73de%8 -s 10 -c 10 -i 500
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=0 ttl=64 rssi=-62 dBm time=11.627 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=1 ttl=64 rssi=-62 dBm time=10.986 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=2 ttl=64 rssi=-62 dBm time=12.588 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=3 ttl=64 rssi=-62 dBm time=10.986 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=4 ttl=64 rssi=-62 dBm time=11.946 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=5 ttl=64 rssi=-63 dBm time=9.395 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=6 ttl=64 rssi=-62 dBm time=10.025 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=7 ttl=64 rssi=-62 dBm time=9.716 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=8 ttl=64 rssi=-62 dBm time=12.586 ms
18 bytes from fe80::ac8d:fee1:6050:73de%8: icmp_seq=9 ttl=64 rssi=-62 dBm time=13.227 ms

--- fe80::ac8d:fee1:6050:73de%8 PING statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max = 9.395/11.308/13.227 ms

@jia200x jia200x left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's a first round from my side

Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
.config_addr_filter = _config_addr_filter, \
.config_src_addr_match = _config_src_addr_match, \
.set_frame_filter_mode = _set_frame_filter_mode, \
.get_frame_filter_mode = _get_frame_filter_mode, \

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The IEEE802154 PHY's are independet from netdev. The old names are deprecated and mapped
to the new ones.
@Stopkaa
Stopkaa requested a review from bergzand as a code owner August 26, 2026 13:46
@github-actions github-actions Bot added the Area: build system Area: Build system label Aug 26, 2026
@Stopkaa

Stopkaa commented Aug 26, 2026

Copy link
Copy Markdown
Contributor Author

Thanks for the first look! I decouple all NETDEV_IEEE802154_% PHY associated modules from netdev since the HAL is not depended on netdev.

@crasbe crasbe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just the usual style comments 😇

Comment thread drivers/at86rf215/at86rf215_getset.c Outdated
Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
Comment thread drivers/at86rf215/at86rf215_radio_ops.c Outdated
Comment thread tests/net/ieee802154_hal/main.c Outdated
Comment thread tests/net/ieee802154_hal/main.c Outdated
Comment thread tests/net/ieee802154_hal/main.c Outdated
Comment thread tests/net/ieee802154_hal/main.c Outdated
Comment thread tests/net/ieee802154_hal/main.c Outdated
Comment on lines 124 to 126
#ifndef CONFIG_AT86RF215_DEFAULT_OQPSK_RATE
#define CONFIG_AT86RF215_DEFAULT_OQPSK_RATE (0)
# define CONFIG_AT86RF215_DEFAULT_OQPSK_RATE (0)
#endif

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually do we need the specific default values since the upper layer takes the responsibility for configuring the PHY? @jia200x @benpicco

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They are no longer used anyway

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI: Helped PR/Issue uses AI sparingly, e.g. code inline assistant, debugging with AI, etc. Area: build system Area: Build system Area: drivers Area: Device drivers Area: network Area: Networking Area: pkg Area: External package ports Area: sys Area: System Area: tests Area: tests and testing framework CI: no fast fail don't abort PR build after first error CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors) Type: cleanup The issue proposes a clean-up / The PR cleans-up parts of the codebase / documentation Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation

Projects

None yet

5 participants