frequency: int = 6400000,
reset_time: float = 80e-6,
bit0: int = 0b11000000,
bit1: int = 0b11110000
which are slightly shorter pulses.
The R-Pi could use an SPI clock rate between 5.715 and 7.272 MHz to satisfy the neopixel cycle times. The code snippet above indicates 6.4 MHz SPI clock rate, for 800 kHz neopixel rate.
I think it might be possible to get better ratios by sending groups of 9-bits which overlap the 8-bit bytes. If 3 bits = 400 ns, 9 bits are 1200 ns, 8 bits are 1067 ns = 937.5 kHz byte rate and 7.5 MHz SPI clock rate. The price is more work bit packing.
If one is prepared to pay that price, one might as well reduce the SPI clock rate to just three times the neopixel bit rate and reduce the packing from 9 to 3 SPI bits per neopixel bit.
There are 24 neopixel bits per RGB chip, 8 neopixel bits per primary colour LED.
The library has only one demo, neopixel_spi_simpletest.py which is not as impressive as the PWM library demos.
The WS datasheets seem to be a bit vague about timing, so this person did some research to see what exactly did work:
Programmable LED strips provide a large array of lights for very few control pins.
There are two common serial buses used; SPI (two wires) and PWM (one wire).
The latter are simpler and cheaper to make, so most LED strips are this type.
Choices of LED strip
Voltage
Individual LEDs need less than 5V forward voltage so 5V is used for individually programmable LED strips.
The higher-voltage strips (12V or 24V) wire LEDs in series so that each RGB controller chip drives multiple LEDs.
The benefit is higher light power for the same current.
The downside is that the LEDs are controlled in groups, rather than individually.
I wanted individual RGB LED control, so a 5V PSU was needed.
Structure
Early LED light bulbs converted high-voltage mains to a lower voltage to drive a few LEDs in series. More recent LED light bulbs use many LEDs in series so they can be driven directly from rectified mains voltage. A 230 volt bulb would typically have four small sub-strips of 57.5 volts each. Some programmable strips use this technology but are programmable in multiples of sub-strip length, typically 10 cm.
I wanted individual RGB LED control, so a 5V PSU was needed.
Controller
I chose the Raspberry Pi.
Limitations
The Raspberry Pi uses its PWM audio pin to drive the one-wire bus, so it cannot drive it and PWM audio at the same time.