Skip to content
sowbug edited this page Nov 30, 2011 · 2 revisions

Thanks to Robert Sun Quattlebaum (http://www.deepdarc.com/about/) for reverse-engineering this protocol. This description is mostly copied and pasted from his blog.

Basics

  • Idle bus state: Low
  • Start Bit: High for 10µSeconds
  • 0 Bit: Low for 10µSeconds, High for 20µSeconds
  • 1 Bit: Low for 20µSeconds, High for 10µSeconds
  • Minimum quiet-time between frames: 30µSeconds

Each frame is 26 bits long and has the following format:

  1. Start bit
  2. 6-Bit Bulb Address, MSB first
  3. 8-Bit Brightness, MSB first
  4. 4-Bit Blue, MSB first
  5. 4-Bit Green, MSB first
  6. 4-Bit Red, MSB first

Miscellaneous

  • The Brightness field acts like a multiplier and enables smooth fade-ins and fade-outs.
  • Bulb address 63 is a broadcast address, except that it only changes the brightness level.
  • Each frame takes 820 µSeconds to transmit. For a 50-bulb string, it takes a minimum of 41 milliseconds to individually update every bulb, for a maximum refresh rate of slightly more than 24Hz.

Bulb Enumeration

It turns out that the data line is not a continuous wire of copper thru the whole string. Each bulb contains a microcontroller with two data lines: one is an input, and one is an output.

When the string first powers up, all bulbs are in the "enumerate" state. When in this state, the first command received is used to tell the bulb what its address is. Once the address is set, all subsequent commands are forwarded to the next bulb. This process continues until all bulbs are enumerated and have an address.

Clone this wiki locally