neopixel protocol timings depart from set values on Pi Pico 2 W causing failures
Port, board and/or hardware
Pi Pico 2 W (RP2350 based)
MicroPython version
MicroPython v1.26.1 on 2025-09-11; Raspberry Pi Pico 2 W with RP2350
Reproduction
I wrote neopixel-timing.py to test this. I've only run this so far on Pi Pico 2 W.
Expected behaviour
I'd hope all of the invocations of write() for neopixel library would work okay.
Observed behaviour
Visual results
- Test 1 default timing at clock 125000000 MHz: fail
- Test 2 custom timing ([350, 900, 800, 450]) at clock 125000000 MHz: good
- Test 3 default timing at clock 150000000 MHz: fail
- Test 4 custom timing ([350, 900, 800, 450]) at clock 150000000 MHz: good
- Test 5 default timing at clock 160000000 MHz: good
- Test 6 custom timing ([350, 900, 800, 450]) at clock 160000000 MHz: good
Additional Information
I'm running with an RGB LED matrix powered at 3.3V and GP2 signal will be at 3.3V too. This demonstrably works well from a micro:bit.
I have some capture data from my humble Ikalogic SQ25 (only at 25Msps). I'll add them later today.
@gurgleapps @mirkin may be interested in this.
Code of Conduct
Yes, I agree
Raspberry Pi Pico2 W - Wifi fails to start if CPU is overclocked
Port, board and/or hardware
RPI_PICO_2_W
MicroPython version
MicroPython v1.25.0-preview.307.g4364d9411 on 2025-02-23; Raspberry Pi Pico 2 W with RP2350
Reproduction
Save the following code onto the Pico 2 W and run it with either CPU_FREQ = 300_000_000 or CPU_FREQ = 150_000_000 uncommented.
When using the overclocked frequency, the following error is printed and the access point is not available to connect to: [CYW43] Failed to start CYW43
When using the default frequency the access point can be connected to and no errors are printed
import machine
import network
"""
When overclocked we get
[CYW43] Failed to start CYW43
When using default CPU frequency
the wifi starts fine
"""
CPU_FREQ = 300_000_000 # overclocked
#CPU_FREQ = 150_000_000 # default
machine.freq(CPU_FREQ)
wifi = network.WLAN(network.WLAN.IF_AP)
wifi.config(
ssid="pico2w_ap",
channel=10,
security=network.WLAN.SEC_OPEN,
)
wifi.active(True)
Expected behaviour
WiFi should work if the CPU is overclocked
Observed behaviour
When the CPU is overclocked, the wireless card firmware does not appear to initialize correctly:
[CYW43] Failed to start CYW43
Additional Information
My testing setup has 2 I2C devices connected: an OLED display GP0 & GP1 and a battery-backed realtime clock on GP2 & GP3. The code above does not initialize these devices, so I don't think their presence should have any impact; it looks like simply changing the CPU frequency is enough.
Doing a little trial-and-error changing the frequencies in the script above it looks like 270MHz is the upper limit of what the wifi can handle. Is this a known limitation of the firmware?
Code of Conduct
Yes, I agree