Hi,
Thank you 3 for your answers!
I’ve performed the following test following your instructions :
- In
submac.c
, I’ve commented out the assert(false);
line and set ENABLE_DEBUG
to 1
- I’ve set
DEVELHELP
to 1 in application Makefile
- Forced my nrf802154 resets without condition each 14[s]
I’ve got the following output in terminal :
Welcome to pyterm!
Type '/exit' to exit.
2022-12-01 11:44:49,010 # NETOPT_TX_END_IRQ not implemented by driver
2022-12-01 11:45:02,187 # NETOPT_TX_END_IRQ not implemented by driver
2022-12-01 11:45:44,719 # RX--(ACK_TIMEOUT)->INVALID
2022-12-01 11:45:44,721 # INVALID--(RX_DONE)->INVALID
2022-12-01 11:58:55,836 # NETOPT_TX_END_IRQ not implemented by driver
2022-12-01 11:58:55,995 # NETOPT_TX_END_IRQ not implemented by driver
2022-12-01 12:00:48,609 # RX--(ACK_TIMEOUT)->INVALID
2022-12-01 12:00:48,613 # INVALID--(RX_DONE)->INVALID
2022-12-01 12:02:40,611 # RX--(ACK_TIMEOUT)->INVALID
2022-12-01 12:02:40,614 # INVALID--(RX_DONE)->INVALID
2022-12-01 12:13:52,617 # RX--(ACK_TIMEOUT)->INVALID
2022-12-01 12:13:52,621 # INVALID--(RX_DONE)->INVALID
2022-12-01 12:16:12,610 # RX--(ACK_TIMEOUT)->INVALID
2022-12-01 12:16:12,613 # INVALID--(RX_DONE)->INVALID
2022-12-01 12:18:04,613 # RX--(ACK_TIMEOUT)->INVALID
2022-12-01 12:18:04,615 # INVALID--(RX_DONE)->INVALID
2022-12-01 12:34:12,428 # RX--(TX_DONE)->INVALID
2022-12-01 12:34:12,431 # INVALID--(RX_DONE)->INVALID
2022-12-01 12:37:42,425 # RX--(ACK_TIMEOUT)->INVALID
2022-12-01 12:37:42,434 # INVALID--(RX_DONE)->INVALID
The radio stop receiving sometimes but my resets are always putting it back to normal. I do my pings from a board running Linux and a script doing batches of 1000 pings. If the script detect a packet loss of 100% for a batch, it stops. It didn’t stop although I can see abnormal receive rates which means the radio stopped working temporarily.
My reset procedure for the nrf802154 radio is the following :
ieee802154_radio_off(dev);
nrf802154_init();
netdev->driver->init(netdev);
dev
is of type ieee802154_dev_t
and netdev
of type netdev_t
.
As my RIOT board can’t be remotely updated, I need some procedures like this to check the health of each peripherals to avoid an end-user has to perform maintenance activities (even as simple as power off → power on).