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
Pico 2W fails to write to NeoPixels from second core
Port, board and/or hardware
Pico 2 W and 4 LED NeoPixel string
MicroPython version
MicroPython v1.27.0 on 2025-12-09; Raspberry Pi Pico 2 W with RP2350
Writing from core0 on GPIO 22 to a 4 LED string works fine using neopixel library. Writing to same GPIO from core1 produces a random 'bright' display.
Code below is based on example in MicroPython NeoPixel documentation.
Reproduction
import neopixel
from machine import Pin
import _thread
def main1():
n = neopixel.NeoPixel(Pin(22), 4)
# Draw a red gradient.
for i in range(4):
n[i] = (i, 0, 0)
# Update the strip.
n.write()
_thread.start_new_thread(main1,())
Expected behaviour
Expected to see a red gradient as per comments in code.
Observed behaviour
Random display (all four LEDS lit). Replacing _thread.start_thread(main1,()) by main1() gives correct output.
Additional Information
No, I've provided everything above.
Code of Conduct
Yes, I agree