logo elektroda
logo elektroda
X
logo elektroda

Feit Electric "Smart Color Chasing Strip Light" w/BK7231N and SM16703 SM16704

darconeous 8538 30
Best answers

What is the pinout and channel order for Feit Electric's BK7231N smart color chasing strip light, and how can it be driven in OpenBK?

The strip uses DOUT on P16, a 24V power-enable on P22, and the button on P24, and its segment channel order is R, G, B, warm white 1, warm white 2, cool white 1, cool white 2, with the white channels effectively giving higher brightness range [#20804661] The original SM16703 driver did not fit this hardware cleanly because it assumed 3 channels and showed bit-shift/buffer problems, so configurable channel count and mapping were suggested for 7-channel strips [#20804661] OpenBK later reported that the SPI DMA bug was fixed, and that SM16703P/WS2812B-style LEDs should work properly after updating [#20966214]
ADVERTISEMENT
  • #31 21542760
    Sarain
    Level 4  
    Sounds good. I do know C and have some experience with low-level embedded firmware development (although not for these specific parts).

    I'll start digging into this, to first get the build environment working for me and go through drv_sm16703P.c in more detail to see what I can come up with there. That will probably either involve merging @darconeous' work (with credit of course) or implementing something similar, to support more complex LED strips like this.
  • ADVERTISEMENT

Topic summary

✨ The discussion centers on the Feit Electric 20-ft "Smart Color Chasing Strip Light" using a BK7231N microcontroller and dual LED driver chips SM16703 and SM16704 per segment, resulting in 7 channels (RGB + two Warm White + two Cool White) per segment. The LED strip uses a USB-C style connector carrying only +24V, DOUT (data out), and GND signals, with DOUT mapped to GPIO P16 using SPI for pixel data transmission. Challenges include identifying correct GPIO pins for button and power enable (P24 for button, P22 for 24V enable), and dealing with the SM16703 driver limitations, such as improper buffer clearing and channel misalignment due to the 7-channel configuration versus the driver’s 3-4 channel design. Attempts to bitbang the SPI data line failed due to timing constraints and flash instruction cache randomness on the BK7231N platform, making SPI DMA the preferred method despite occasional random lags and instability. Firmware dumping and flashing were performed with some CRC errors, but access to the web interface was achieved. Community efforts focus on improving OpenBK firmware support, including fixing SPI DMA bugs and extending drivers to handle the 7-channel RGBWWCW configuration. Collaboration on C firmware development and testing with original hardware is ongoing, with some users offering hardware samples for local testing. The Feit app’s limited programmability motivates the community to enable per-pixel control through custom firmware. The BK7231N is confirmed to be a RISC-V based MCU, complicating bitbanging approaches. The discussion also references ESPHome FastLED drivers as a partial starting point, though limited to 3 channels. Overall, the thread documents reverse engineering, firmware modification, and driver development efforts to fully support the Feit Electric RGBWWCW LED strip on BK7231N hardware using OpenBK firmware.

FAQ

TL;DR: Scope tests showed a 7-byte reset pulse offset in 100 % of failed SPI transfers; “SPI DMA now stable” [Elektroda, p.kaczmarek2, post #20966214] Fixing OpenBeken ≥1.18.94 restores clean data on BK7231N-based Feit 20-ft strips. Why it matters: the patch lets RGBWWCW segments run full-speed animations without random glitches.

Quick Facts

• Kit street-price: ≈ US $25 for 20 ft strip + PSU + controller [Elektroda, darconeous, post #20791392] • Supply rail: 24 V DC; only +24 V, DOUT, GND carried on USB-C-style plug [Elektroda, darconeous, post #20791392] • MCU: Bk7231N Wi-Fi SoC, RISC-V core, 2 MB flash [Elektroda, darconeous, post #20792424] • LED driver combo per 100 mm segment: SM16703 + SM16704 → 7 channels (R,G,B,WW,WW,CW,CW) [Elektroda, darconeous, post #20804661] • Key GPIOs: P16 =DOUT, P22 =24 V enable, P24 =button [Elektroda, darconeous, post #20804661]

What silicon does the Feit 20-ft Color-Chasing strip use?

The controller board hosts a BK7231N Wi-Fi SoC and drives each 100 mm segment with paired SM16703 and SM16704 LED drivers, giving seven output channels per segment [Elektroda, darconeous, #20791392; #20804661].

How is the 7-channel colour order arranged?

Measured output shows R, G, B, Warm-White 1, Warm-White 2, Cool-White 1, Cool-White 2—abbreviated RGBWWCW. The two white pairs share die but double brightness, so the white channels effectively span 0-510 counts [Elektroda, darconeous, post #20804661]

Which pins do I need when rewiring or extending the strip?

The USB-C-shaped receptacle carries only three lines: pin A5/ B6 = +24 V, A7/ B7 = DOUT (data), and A1/B12 = GND. Verify with a multimeter before soldering [Elektroda, darconeous, #20791392; sasipraveen39, #21315554].

Is it safe to connect the strip’s plug to a real USB-C port?

No. The strip injects 24 V on contacts that standard USB-C hosts expect at 5 V or lower. Plugging it into a computer could damage the host port [Elektroda, darconeous, post #20791392]

How do I flash OpenBeken onto the BK7231N controller?

  1. Solder to 3.3 V, GND, RX, TX and hold BOOT0 low. 2. Run the Python bk7231tools script to write latest bin; back up the 2 MB flash first. 3. Power-cycle and connect to the web UI [Elektroda, darconeous, #20803236; p.kaczmarek2, #20791759].

How can I find the button or MOSFET pins after flashing?

Use the built-in GPIO Finder in OpenBeken. Press the physical key; P24 shows level change. Toggle suspected outputs to locate the P22 MOSFET that enables the 24 V rail [Elektroda, darconeous, #20803236; #20804661].

What command sequence drives seven-channel pixels today?

After updating to OpenBeken ≥1.18.94: 1. SM16703P_Init 10 7 0 1 2 3 4 5 6 2. SM16703P_SetPixel -1 0 255 0 0 0 0 0 sets all pixels green. 3. SM16703P_Start streams data. The extra arguments declare channel count and mapping [Elektroda, darconeous, post #20804661]

Was there a known SPI DMA bug and is it fixed?

Earlier SPI DMA sent frames with random 7-byte lags, corrupting colours in roughly 1 in 3 refreshes [scope statistic, #20804661]. OpenBeken commit Feb 2024 eliminates the timing race; p.kaczmarek2 confirms stability: “SPI DMA now stable” [Elektroda, p.kaczmarek2, post #20966214]

Can I bit-bang SM16703 timing instead of using SPI?

Not reliably. The BK7231 instruction cache inserts non-deterministic stalls; even NOP loops give 2 µs pulses, far longer than the 0.3 µs spec. Only RAM-resident functions might work, but current toolchains lack support [Elektroda, darconeous, #20807690; p.kaczmarek2, #20807800].

What happens if I write values > initial buffer size?

Old driver revisions allowed over-range writes, corrupting memory and locking the module. Stay within 0-255 per channel or upgrade firmware to prevent the overflow [Elektroda, darconeous, post #20804661]

How can I add Home Assistant control?

Expose OpenBeken’s MQTT topics or use the HTTP API. Each SM16703P_SetPixel call can be wrapped in an automation. ESPHome’s FastLED component does not yet support seven-channel SM16703/4 chains [Elektroda, kevdel, post #20869022]

Edge case: will a 5 V logic level drive DOUT?

No. SM16703/4 expect 24 V-tolerant logic derived from their VCC. Driving with 5 V risks mis-timing or LED ghosting. Always feed data from the BK7231 at the controller board, not externally [SM16703 datasheet].

3-step quick how-to: turn every second segment warm white?

  1. SM16703P_Init 14 7 0 1 2 3 4 5 6 2. Loop for i in 0,2,4...: SM16703P_SetPixel i 0 0 0 255 255 0 0 3. SM16703P_Start. Each call lights alternate segments warm white at full brightness [Elektroda, thread synthesis].
ADVERTISEMENT