Ping responce stops working after several hours
Port, board and/or hardware
Raspberry Pi Pico W with RP2040; Raspberry Pi Pico 2 W with RP2350
MicroPython version
MicroPython v1.24.0; MicroPython v1.25.0;
Reproduction
- Install RPI_PICO2_W-20250415-v1.25.0.uf2 on Raspberry Pi Pico 2 W.
- Create main.py with script below on device.
- Power on device with USB or batery.
- Wait 10 hours. Do not access the device over the network.
- On PC (in my case Windows 10) run command "ping 192.168.10.241 -t".
# main.py
import network
from time import sleep
from machine import Timer, Pin
led = machine.Pin("LED", machine.Pin.OUT);
wfssid = "xxxxxxxxxx"
wfpass = "xxxxxxxxxx"
wlan = network.WLAN(network.STA_IF);
wlan.active(True);
print(f'Connecting to "{wfssid}" AP. ', end="")
wlan.connect(wfssid, wfpass);
while wlan.isconnected() == False:
sleep(1.0);
print('.', end="");
print(' Done !');
print(wlan.ifconfig())
def cb1sec(timer):
# To be sure that the device is working
led.on()
sleep(0.001);
led.off()
timer1sec = Timer(period=1000, mode=Timer.PERIODIC, callback=cb1sec)
while True:
sleep(10.0);
Expected behaviour
Starts respond on pings immidiately.
Observed behaviour
Starts to respond after 10...60 unsuccessful pings.
Additional Information
The device stops responding to ping after a few hours of operation.
Powered by USB or battery, no USB connection (with USB connection it also sometimes "hangs")
The device "hangs" after 1...10 hours.
During this time, do not access the device over the network!
During "hanging":
- Unable to connect to FTP server on device.
- Ping from device continues to work!
When device is "frozen", you can "wake it up" using command:
ping 192.168.10.241 -t
Initially, the device does not respond to pings, but after 10...60 unsuccessful pings, device starts responding and normal operation of network interface is restored.
See:
Raspberry Pi Pico W network becomes inaccessible when not used for some time #9455
With network.PPP device hangs after several hours of operation #16340
#9455 and #16340 probably have the same root cause.
Not Reproducing on:
MicroPython v1.25.0 on 2025-04-15; ESP module with ESP8266. (ESP8266 Wemos D1 mini)
Code of Conduct
Yes, I agree
USB (tested with midi) not working on pico 2 (rp2350 in ARM mode only)
Port, board and/or hardware
rp2 port, pico 2 board
MicroPython version
MicroPython v1.24.0 on 2024-10-25; Raspberry Pi Pico2 with RP2350
Reproduction
This is the script I used:
# MicroPython USB MIDI example
#
# This example demonstrates creating a custom MIDI device.
#
# To run this example:
#
# 1. Make sure `usb-device-midi` is installed via: mpremote mip install usb-device-midi
#
# 2. Run the example via: mpremote run midi_example.py
#
# 3. mpremote will exit with an error after the previous step, because when the
# example runs the existing USB device disconnects and then re-enumerates with
# the MIDI interface present. At this point, the example is running.
#
# 4. To see output from the example, re-connect: mpremote connect PORTNAME
#
#
# MIT license; Copyright (c) 2023-2024 Angus Gratton
import usb.device
from usb.device.midi import MIDIInterface
import time
class MIDIExample(MIDIInterface):
# Very simple example event handler functions, showing how to receive note
# and control change messages sent from the host to the device.
#
# If you need to send MIDI data to the host, then it's fine to instantiate
# MIDIInterface class directly.
def on_open(self):
super().on_open()
print("Device opened by host")
def on_note_on(self, channel, pitch, vel):
print(f"RX Note On channel {channel} pitch {pitch} velocity {vel}")
def on_note_off(self, channel, pitch, vel):
print(f"RX Note Off channel {channel} pitch {pitch} velocity {vel}")
def on_control_change(self, channel, controller, value):
print(f"RX Control channel {channel} controller {controller} value {value}")
m = MIDIExample()
# Remove builtin_driver=True if you don't want the MicroPython serial REPL available.
usb.device.get().init(m, builtin_driver=True)
print("Waiting for USB host to configure the interface...")
while not m.is_open():
time.sleep_ms(100)
print("Starting MIDI loop...")
# TX constants
CHANNEL = 0
PITCH = 60
CONTROLLER = 64
control_val = 0
while m.is_open():
time.sleep(1)
print(f"TX Note On channel {CHANNEL} pitch {PITCH}")
m.note_on(CHANNEL, PITCH) # Velocity is an optional third argument
time.sleep(0.5)
print(f"TX Note Off channel {CHANNEL} pitch {PITCH}")
m.note_off(CHANNEL, PITCH)
time.sleep(1)
print(f"TX Control channel {CHANNEL} controller {CONTROLLER} value {control_val}")
m.control_change(CHANNEL, CONTROLLER, control_val)
control_val += 1
if control_val == 0x7F:
control_val = 0
time.sleep(1)
print("USB host has reset device, example done.")
Expected behaviour
This example code works on a pico 1, here is the output:
MicroPython v1.24.0 on 2024-10-25; Raspberry Pi Pico with RP2040
Type "help()" for more information.
>>> import midi_example
Waiting for USB host to configure the interface...
device disconnected
then mpremote disconnects. I can reconnect and it displays the log output from the example.
kernel log display:
6041.587646] usb 7-1.1: new full-speed USB device number 9 using xhci_hcd
[ 6041.722135] usb 7-1.1: New USB device found, idVendor=2e8a, idProduct=0005, bcdDevice= 1.00
[ 6041.722144] usb 7-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6041.722149] usb 7-1.1: Product: Board in FS mode
[ 6041.722153] usb 7-1.1: Manufacturer: MicroPython
[ 6041.722156] usb 7-1.1: SerialNumber: e6613008e343372e
[ 6041.787350] cdc_acm 7-1.1:1.0: ttyACM0: USB ACM device
[ 6259.833061] usb 7-1.1: USB disconnect, device number 9
[ 6260.104404] usb 7-1.1: new full-speed USB device number 10 using xhci_hcd
[ 6260.239359] usb 7-1.1: New USB device found, idVendor=2e8a, idProduct=0005, bcdDevice= 1.00
[ 6260.239362] usb 7-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6260.239364] usb 7-1.1: Product: Board in FS mode
[ 6260.239365] usb 7-1.1: Manufacturer: MicroPython
[ 6260.239366] usb 7-1.1: SerialNumber: e6613008e343372e
[ 6260.285551] cdc_acm 7-1.1:1.0: ttyACM0: USB ACM device
[ 6260.334768] mc: Linux media interface: v0.10
[ 6260.411764] usbcore: registered new interface driver snd-usb-audio
Observed behaviour
This is the output on the rp2 REPL:
>>> import midi_example
Waiting for USB host to configure the interface...
and it hangs, control characters have no effect.
Meanwhile here is the kernel log:
[ 5138.193121] usb 7-1.1: new full-speed USB device number 4 using xhci_hcd
[ 5138.327835] usb 7-1.1: New USB device found, idVendor=2e8a, idProduct=0005, bcdDevice= 1.00
[ 5138.327845] usb 7-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 5138.327850] usb 7-1.1: Product: Board in FS mode
[ 5138.327855] usb 7-1.1: Manufacturer: MicroPython
[ 5138.327858] usb 7-1.1: SerialNumber: 1c59c033388f3e4e
[ 5138.437887] cdc_acm 7-1.1:1.0: ttyACM0: USB ACM device
[ 5138.437924] usbcore: registered new interface driver cdc_acm
[ 5138.437927] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
Nothing else is printed.
Additional Information
This is probably a core issue with customizable USB on this new port.
Thank you very much for your work on micropython and also for providing this template.
Code of Conduct
Yes, I agree