Modern Controller With SPI Interface And Variable Clock Rate

The WS2812 and all of its successors depend on a very timing-sensitive one-wire data protocol with a fixed data frequency which is simple in respect to wiring but complex otherwise:

  • Limited Update Speed: The fixed data frequency of 800kHz is high enough for typical hobbyist projects but imposes a hard limit on the maximum data rate - even if the microcontroller was powerful enough to send the data faster. This limits the maximum frame rate with very long LED strips and large matrix displays.
  • Rigid Timing: The data is expected to always come in at 800kHz. This is ok for real-time microcontrollers like Arduino or ESP32, especially when they are dedicated to controlling LED. Multi-tasking microcontrollers like Raspberry Pi and PC cannot always guarantee this data rate as other tasks may temporarily keep them busy.

APA102 uses a different approach: it uses the standard two-wire protocol SPI that is widely supported: SPI has a data line and additionally a clock rate. When the microcontroller is busy, it can simply reduce the clock rate. Likewise, it can also increase the clock rate to i.e. 4MHz and send much more data for better frame rates even with super large displays.

APA102 is an example for a LED controller with variable data transmission. This is not compatible with the one-wire protocol used by all other controllers discussed here. To use APA102, you need to use completely different libraries and a two-wire-connection.
If you do not need the benefits of flexible clock rates, you may want to look into the APA106 controller which is compatible to WS2182.

Two Types

There are two types available: APA102C (plastic package) and APA102 (added metallized plate for better heat conduction).

When To Use

APA102 is a sophisticated solution for requirements where the strict and static one-wire protocol cannot be used.

In these scenarios, APA102 offers a flexible communications protocol using standard SPI.

They are especially suitable for persistance-of-vision applications as they have a very high PWM frequency of 19.2kHz and the higher frame rates due to the faster SPI data interface.

When To Not Use

The performance potential unlocked by APA102 typically well surpasses that of DIY microcontrollers and the general need for it in DIY projects.

Since APA102 uses a completely different communications system, you would need completely different libraries.

Since there is no apparent benefit for DIY projects when compared to WS2812B or its successors, choosing the well-known one-wire protocol controllers instead seems reasonable for most use cases.


Please do leave comments below. I am using utteran.ce, an open-source and ad-free light-weight commenting system.

Here is how your comments are stored

Whenever you leave a comment, a new github issue is created on your behalf.

  • All comments become trackable issues in the Github Issues section, and I (and you) can follow up on them.

  • There is no third-party provider, no disrupting ads, and everything remains transparent inside github.

Github Users Yes, Spammers No

To keep spammers out and comments attributable, all you do is log in using your (free) github account and grant utteranc.es the permission to submit issues on your behalf.

If you don’t have a github account yet, go get yourself one - it’s free and simple.

If for any reason you do not feel comfortable with letting the commenting system submit issues for you, then visit Github Issues directly, i.e. by clicking the red button Submit Issue at the bottom of each page, and submit your issue manually. You control everything.


For chit-chat and quick questions, feel free to visit and participate in Discussions. They work much like classic forums or bulletin boards. Just keep in mind: your valued input isn’t equally well trackable there.

  Show on Github    Submit Issue

(content created Mar 12, 2024 - last updated Mar 19, 2024)