-
Notifications
You must be signed in to change notification settings - Fork 2.1k
enc26j60 stuck in a loop #9784
Copy link
Copy link
Closed
Labels
Area: driversArea: Device driversArea: Device driversArea: networkArea: NetworkingArea: NetworkingType: bugThe issue reports a bug / The PR fixes a bug (including spelling errors)The issue reports a bug / The PR fixes a bug (including spelling errors)
Description
Description
The enc28j60 driver occasionally stucks in the following loop:
RIOT/drivers/enc28j60/enc28j60.c
Lines 469 to 472 in 90c4ddc
| do { | |
| DEBUG("[enc28j60] isr: packet received\n"); | |
| netdev->event_callback(netdev, NETDEV_EVENT_RX_COMPLETE); | |
| } while (cmd_rcr(dev, REG_B1_EPKTCNT, 1) > 0); |
Steps to reproduce the issue
Let the enc28j60 receive a lot of traffic and wait for some time. In my hostile network environment I have to wait for something between 2 seconds to 60 seconds for the driver to get stuck in the loop.
Further details
After adding this debug code
diff --git a/drivers/enc28j60/enc28j60.c b/drivers/enc28j60/enc28j60.c
index 1ba6240d0..1eb15b976 100644
--- a/drivers/enc28j60/enc28j60.c
+++ b/drivers/enc28j60/enc28j60.c
@@ -31,7 +31,7 @@
#include "enc28j60.h"
#include "enc28j60_regs.h"
-#define ENABLE_DEBUG (0)
+#define ENABLE_DEBUG (1)
#include "debug.h"
/**
@@ -466,10 +466,13 @@ static void nd_isr(netdev_t *netdev)
}
}
if (eir & EIR_PKTIF) {
+ uint8_t pkt_count;
do {
DEBUG("[enc28j60] isr: packet received\n");
netdev->event_callback(netdev, NETDEV_EVENT_RX_COMPLETE);
- } while (cmd_rcr(dev, REG_B1_EPKTCNT, 1) > 0);
+ pkt_count = cmd_rcr(dev, REG_B1_EPKTCNT, 1);
+ DEBUG("[enc28j60]: %i packets remaining\n", (int)pkt_count);
+ } while (pkt_count > 0);
}
if (eir & EIR_RXERIF) {
DEBUG("[enc28j60] isr: incoming packet dropped - RX buffer full\n");I could record this serial output on an nucleo-f446re connected to an ENC28J80 breakout adapter:
/home/maribu/Repos/software/RIOT/dist/tools/pyterm/pyterm -p "/dev/ttyACM0" -b "115200"
2018-08-15 17:22:10,803 - INFO # Connect to serial port /dev/ttyACM0
Welcome to pyterm!
Type '/exit' to exit.
2018-08-15 17:22:11,806 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:11,807 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:11,808 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:11,808 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:11,809 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:11,810 - INFO # [enc28j60] isr: packet transmitted
2018-08-15 17:22:11,810 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:11,811 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:11,811 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:11,812 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:11,813 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:11,813 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:11,814 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:11,815 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:11,815 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:13,240 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:13,245 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:13,248 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:13,794 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:13,798 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:14,842 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:14,846 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:14,991 - INFO # [enc28j60] isr: packet transmitted
2018-08-15 17:22:14,994 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:14,999 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:15,001 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:15,077 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:15,081 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:15,084 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:15,087 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:15,240 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:15,245 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:15,248 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:17,241 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:17,244 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:18,991 - INFO # [enc28j60] isr: packet transmitted
2018-08-15 17:22:18,994 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:18,997 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:19,002 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:19,007 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:19,010 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:19,241 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:19,245 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:19,364 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:19,368 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:19,735 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:19,740 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:19,743 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:20,297 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:20,301 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:20,641 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:20,644 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:21,241 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:21,246 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:21,249 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:21,653 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:21,657 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:23,241 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:23,245 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:23,501 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:23,506 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:23,509 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:23,628 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:23,632 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:23,701 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:23,704 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:24,241 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:24,246 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:24,249 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:24,397 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:24,400 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:24,743 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:24,746 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:25,241 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:25,247 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:25,249 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:27,318 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:27,322 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:27,606 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:27,610 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:27,618 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:27,623 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:27,626 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:27,682 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:27,685 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:28,902 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:28,905 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:29,320 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:29,325 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:29,328 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:31,320 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:31,324 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:32,282 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:32,285 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:32,546 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:32,551 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:32,554 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:32,992 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:32,995 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:33,320 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:33,324 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:34,873 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:34,878 - INFO # [enc28j60] recv: unable to get packet - buffer too small
2018-08-15 17:22:34,881 - INFO # [enc28j60]: 0 packets remaining
2018-08-15 17:22:35,320 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,323 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,326 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,329 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,332 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,335 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,338 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,340 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,343 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,346 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,349 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,352 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,355 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,358 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,360 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,363 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,367 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,369 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,372 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,375 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,377 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,380 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,383 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,386 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,389 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,392 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,395 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,397 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,400 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,403 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,406 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,409 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,412 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,414 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,417 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,420 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,423 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,426 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,429 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,432 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,434 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,437 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,440 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,443 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,446 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,449 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,451 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,454 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,457 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,460 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,463 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,466 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,469 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,471 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,474 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,477 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,480 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,483 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,486 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,489 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,491 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,494 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,497 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,500 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,503 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,506 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,508 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,511 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,514 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,517 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,520 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,523 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,525 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,528 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,531 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,534 - INFO # [enc28j60]: 1 packets remaining
2018-08-15 17:22:35,537 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,540 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,543 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,545 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,548 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,551 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,554 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,557 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,560 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,563 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,565 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,568 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,571 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,574 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,577 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,580 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,582 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,585 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,588 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,591 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,594 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,597 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,599 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,602 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,605 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,608 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,611 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,614 - INFO # [enc28j60]: 2 packets remaining
2018-08-15 17:22:35,617 - INFO # [enc28j60] isr: packet received
2018-08-15 17:22:35,619 - INFO # [enc28j60]: 2 packets remaining
...
Adding this DEBUG statement completely solves the problem:
diff --git a/drivers/enc28j60/enc28j60.c b/drivers/enc28j60/enc28j60.c
index 1eb15b976..901e98b2a 100644
--- a/drivers/enc28j60/enc28j60.c
+++ b/drivers/enc28j60/enc28j60.c
@@ -330,6 +330,7 @@ static int nd_recv(netdev_t *netdev, void *buf, size_t max_len, void *info)
next = (uint16_t)((head[1] << 8) | head[0]);
size = (uint16_t)((head[3] << 8) | head[2]) - 4; /* discard CRC */
+ DEBUG("[enc28j60] size: %i, next: %i\n", (int)size, (int)next);
if (buf != NULL) {
#ifdef MODULE_NETSTATS_L2
netdev->stats.rx_count++;
So maybe timing is relevant for this issue to appear?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
Area: driversArea: Device driversArea: Device driversArea: networkArea: NetworkingArea: NetworkingType: bugThe issue reports a bug / The PR fixes a bug (including spelling errors)The issue reports a bug / The PR fixes a bug (including spelling errors)