Welcome to Elektroda @HalliHallo , thank you for submitting teardown.
From a brief glance, it seems that it is another individually addressable LEDs controller like SM16073, but with different timing, but I am not sure.
How did this device work before flashing? Were leds individually addressable?
The usage of P16 for LEDs may not be a coincidence, it's a hardware SPI pin, they are using hardware SPI to push out the pixel data with correct timings.
It looks like you're saying that only one pixel is working, this may be caused by a timing mismatch.
We need to know the specific timings of this device.
Please see this section of SM16703 datasheet:
The linked datasheet of SM15155E does not provide enough information at the current time. It also seems to specify that's a 5 channels driver, so it may not be a SM16703 clone after all.
Are you sure that only P16 is used for communication?
If our initial assumption is correct, and it's using a protocol like SM16703 , then we need to either find a datasheet with timing specs or do a capture of data with oscilloscope.
All 8 LEDs are in parallel. All LEDs have the same "brightness" and color. No individual LED control for each of the 8.
All the same. All 8 LEDs are working.
Original Tuya control: On, off, cold white, warm white, RGB color. I think that's the standard.
I looked into the "source code". I only see 3CH and not 5CH control.
With the existing 3CH driver, it is possible to "switch the LED" to green and make a little brightness correction... But it doesn't fully operate correctly.
I don't have an oscillation-measuring device... Sorry.
At the moment, I can't find more datasheets on the internet.
Requesting flash dump, GPIO mapping, and SM15155E datasheet
Hm okay so I think we have basically two options.
1. Do you have a 2MB flash dump for this device? Maybe I could try flashing it to BK7231N and using my Rigol to see the waveform on the P16, but I dont know how to even control that device and it may not work anyway because calibration data for WiFi is per-chip... I don't know, but we still might decide to try, I also remember that @DeDaMrAz might have some spare CB3S modules and he also certainly has a scope.
Do you know which GPIO is used for pairing button?
2. Well, the second option, maybe even easier one would be for me to get one piece of this device and do the measurement on it.
We could also try to reach to manufacturer of that LED controller and ask for the datasheet.
Added after 1 [minutes]:
By the way, this is confusing:
Quote:
No individual led control to each of the 8.
usually that kind of SPI control is used for individually addressable LEDs...
EDIT: I also think it's strange there is just single SM15155E, usually those individually adressable chips are connected in chains.
No, I have no more information than I provided. I am an absolute beginner and that chip is so tiny... I need my macro-photography to see lines on the chip.
Do you know how SM15155E is connected? I think PIN 16 goes to the SM15155 (only one in the complete lamp) and that controls all 8 RGBCWWW LEDs in parallel. No individual control of the LEDs. With the original tuya, the complete lamp had one "setting" (on, off, color, brightness, etc.) for all LEDs.
Sorry, my English is not so good, to explain it better. I think that is a stupid technical solution because there is not enough space in the lamp. I can take photos or a little "video" for better understanding?
EDIT: The lamp has two "sides", up and down. On one side: 4 LEDs and the SM15155E
On the other side: 4 LEDs and the BK7231N
And "under" the two PCBs is no space for chips or other things. There are clouds directly on the housing, I think for cooling...
In the big housing, there is only a power supply (ground, 3.3V, and LED power), connection to 230V Power... No more chips or other peripherals... I disassembled everything to measure with a simple voltmeter.
Ah wait, I think I understood what's going on here!
Look:
This chip has 8 pins. So if it has 5 channels, then we have 3 pins left. we also need GND and VDD. So it has only one pin left for control. That's why they used that kind of protocol.
Ok, now, can you attach 2MB dump?
Does this device have a button?
You see in my first post detailed photos... That is all what this lamp has... No button, sorry.
I only attached ".zip" to the binary file, NOT zipped. That is the original tuya firmware. I have it dumped with the cloudcutter lightleak android...
Actually I run on the newest OpenBeken. OpenBeken driver SM16.... Can simply control it... Did you need a small video of that possible control-reaction?
Probably there is information that is important for you... I am an absolute beginner and I have no idea what information is important for "advanced"...
Attachments:
dump_test.bin.zip(2 MB)
You must be logged in to download this attachment.
Found with Google translate:
SIC protocol intelligent driver chip
Dimming gray scale: 65536 levels;
Minimum output current turn-on pulse width: 160nS ;
OUT PWM output, good color reproduction, PWM frequency 4KHz ;
Built-in over-temperature protection function;
Built-in data shaping, data cascade ( DIN→DOUT ) does not attenuate;
Built-in automatic energy-saving mode, standby power consumption <2mW ;
Built-in current gain, adjusts OUT RGBWY current 10~300mA ;
Constant current output, changes in lamp bead voltage difference will not cause changes in lamp bead brightness;
Supports WIFI , Bluetooth, Zigbee , 2.4G and other control modules.
App types Three-way five roads chip
SM15153E
SM15155E
Hinzugefügt nach 24 [Minuten]:
LED Driver Chips That Support all The Mainstream Serial Data interfaces on The
Marke
Such as MBI6020、MBI6021、MBI6024、MBI6023、MBI6120、MBI6027、MBI6034、MBI6033、MBI6030、LPD6803、LPD8806、LPD1886、LPD1882、TM1803、TM1804、TM1829、TM1812、TM1914、TM1925、TM1926、TM1905、TM1905、TLS3001、TLS3008、TLSGY01、MY9221、MY9231、MY9291、MY9234、WS2801、WS2811、WS2812B、 WS2818A、WS2816、CX808、P9813、P9823、P9883、AP102、AP104、GS8206、GS8208、SM16716、BS0815、BS0901、BS0902、UCS1903、UCS1904、UCS1909、UCS1912、UCS2903、UCS2904、UCS2912、UCS8903、UCS8904、UCS9812、UCS3903、UCS5603、UCS2603、UCS8603、TI5971、TI5973、TI59731、GW6201、GW6205、GW6230、GW6236、GW6212、GW6209、GW6206、GW6209、GW6212、GW6230A、GW6211、GW6803、GW6606、SM16711、SM16716、SM16703P、SM16704P、SM16736、SM16803P、SM16804P、SM16813P、SM16814P、SM16823E、SM16824E、SM16825E、SM15155E、ICND2110、HX5011、ZQ1111、 LX1603、LX1203、HBS1916、HBS1910、HBS1510、HB200B、KW1203A、CX808、DM412、DM413、DM621、MC2002、MC2.0、PM1.0、MT1809、MT1815S、MT16703 etc。
Screenshot Datasheet
Return to zero protocol?
RZ protocol?
Attachments:
DDWDZ123_1679037801000.zh-CN.en.pdf(392.66 KB)
You must be logged in to download this attachment.
DDWDZ123_1679037801000.pdf(346.55 KB)
You must be logged in to download this attachment.
Thanks for the info. You can fork our repository and open a pull request, the binary files will be created automatically. You don't need local setup for that.
I will also try to look into that soon, maybe flash the bin on the other BK7231N device and look at the waveform with oscilloscope.
Have you seen the short Datasheet in the previous answer attachment?
Is that enough information or did you need more detailed information, how the data is transfered?
The following document seems to describe the SPI transmission, which is not used in case of your device. I know that we are internally using SPI MOSI pin to drive SM16703, but that's a different thing.
Added after 3 [hours] 52 [minutes]:
Ok @HalliHallo , we have flashed your 2MB dump on our CB3S with @DeDaMrAz and will try to scope some things:
We will hopefully know more information soon. Now we need to get access to P16... like here:
https://www.elektroda.com/rtvforum/topic4005865.html
Added after 1 [hours] 3 [minutes]:
Added after 39 [minutes]:
first capture, open in PulseView
Attachments:
SM15155E-test-capture-first-20231028.zip(26.64 KB)
You must be logged in to download this attachment.
340ns and 1160ns ... or rather 350ns and 1150ns I would say.
Here are WS2812B specs:
Kinda close...
Here is SM16703P:
Hmm the timings does not match too well, I will have to adjust our drivers to generate a closer timings.
You can't flash WLED on the chip you have. You will need to buy an ESP-compatible board like a nodeMCU and use that. There are lots of tutorials on YouTube on how to do that. Once you have your nodeMCU flashed with WLED hook up your strip and test it.
Strip? I have this Smart Wall Lamp, see my first posts
On your wall lamp, you will find this
Where the red circle is, you will need to carefully remove the white glue and see if there are any pads underneath. They will most likely look like this
If your pads look like the ones above, then you have non-addressable RGB CCT LEDs and can follow this to see if you can get them working. But you do run the risk of overloading the LEDs if not done properly, so I would advise against it if you're new to this.
If you find that there are data, clock, and voltage pads, then you have addressable LEDs and should follow this. That will get you started, but again, if you are new to this, you run the risk of overloading and killing your LEDs, so read everything carefully.
If you can't find any pads at all and only the power and ground wires, then that is something WLED can't do. Two-wire controls are very tricky and most likely almost impossible to hack. It would require programming special code just to run the LEDs. Something like the way these LSC string lights are controlled.
I really don't think that those LEDs are controlled like that, but if they are, then I have no idea what you could do to get them working. Without the original firmware dumped straight off the chip, you might never be able to get them working, and even then, it would be a shot in the dark.
I highly doubt your LEDs are addressable and are most likely controlled via PWM.
His LEDs are controlled via single GPIO like the ones that are addressable, but I don't think ESP32 will help, because SM15155E protocol is not yet fully known. So there are no open source drivers for that yet. We've done first stage of reverse engineering, but there is more work to do.
The discussion revolves around connection issues with a Smart Wall Lamp utilizing the OpenBeken driver, specifically with the RGBIC SM15155E and BK7231N components. The user reports that after flashing the device with OpenBeken, the lamp ceased to function correctly, despite previously operating with the Tuya app. The lamp features 8 parallel-connected RGB+CCT LEDs, controlled by the SM15155E driver. Participants in the forum suggest that the problem may stem from timing mismatches in the driver, as the original control allowed for basic functions like on/off and color changes without individual LED control. Various troubleshooting steps are discussed, including the need for specific timing data and potential reverse engineering of the SM15155E protocol. The community is actively working on developing a compatible driver and analyzing the device's communication signals to restore functionality. AI summary based on the discussion. May contain errors.
TL;DR: If your 5-channel BK7231N wall lamp only flashes once, use the dedicated SM15155E path, not a generic Tuya profile. The lamp sends 80 grayscale bits + 32 control bits, and one developer confirmed: "we know the timings" before full support landed. This FAQ is for OpenBeken users fixing no-light or wrong-color control on SM15155E RGB+CCT wall lamps. [#21115906]
Why it matters: This thread shows the exact failure mode, measured waveform, frame structure, and working OpenBeken commands needed to turn a nonfunctional flashed lamp into a controllable RGB+CCT device.
Option
Result on this lamp
Key limitation
Generic Tuya wall-light profile
No usable light control
Wrong driver/protocol
SM16073_DIN-style attempt
One-shot green, then reboot needed
Timing mismatch
SM16703P raw experiments
Partial colors, inconsistent boots
Frame meaning not fully matched
Native SM15155E driver
Working 5-channel control
Needs correct LED map
Key insight: The lamp was never PWM-only or standard WS2812B. It used a single-wire SM15155E protocol on BK7231N P16, so success required both timing capture and decoding the final control bytes, not just trying nearby LED drivers. [#21115906]
Quick Facts
The hardware in the teardown was BK7231N + 1× SM15155E + 8× 5-in-1 RGB+CCT LEDs, with all 8 LEDs wired in parallel, not individually addressed. [#20778816]
The control line appears on BK7231N P16, which was identified as a hardware SPI-capable pin and the likely output used to push LED data. [#20778569]
Measured SM15155E pulse widths were about 350 ns and 1150 ns, close to WS2812B class signaling but not close enough for a drop-in SM16703P match. [#20789559]
The recovered frame format was 80 bits of grayscale data plus 32 trailing bits for per-channel current limit and standby/reserved control. [#20983095]
A working OpenBeken test used startDriver SM15155E with LED_Map 0 1 3 2 4, confirming proper 5-channel operation after driver support was added. [#21115906]
How can I get an OpenBeken-flashed BK7231N smart wall lamp with an SM15155E driver working when the generic Tuya profile gives no light control?
Use the dedicated SM15155E driver instead of the generic Tuya light profile. The working OpenBeken setup shown in the thread was:
startDriver SM15155E
LED_Map 0 1 3 2 4
Test channel order and color output.
The generic profile gave no function after flashing, because this lamp uses a custom 5-channel serial LED driver, not a standard Tuya PWM mapping. Full control only appeared after reverse engineering the SM15155E protocol and adding native support. [#21115906]
Why does the OpenBeken SM16703P or SM16073_DIN-style driver only trigger a one-shot green or red flash on an SM15155E RGB+CCT wall lamp?
It happens because the lamp accepts only a partially similar signal, then rejects the rest of the frame. Early tests produced a single green shot, occasional red at boot, and often required a reboot after one command. The thread linked this to timing mismatch and incomplete frame understanding, not to dead LEDs. SM15155E looked superficially close to SM16703P or WS2812-style signaling, but the pulse widths and trailing control bytes were different enough to break stable control. [#20778910]
What is the SM15155E LED driver, and how is it different from SM16703P or WS2812-style addressable LED chips?
"SM15155E is a 5-channel LED driver that controls RGB plus warm white and cold white over a single data line, using serial timing and per-channel current settings." Unlike WS2812-style chips, this lamp had 8 LEDs in parallel with one shared setting, not per-LED animation. Unlike SM16703P, the SM15155E frame also includes extra trailing control bits for current and standby handling. That makes it a single-wire smart constant-current driver, not a drop-in addressable-pixel equivalent. [#20983095]
What does return-to-zero (RZ) protocol mean in the context of the SM15155E 800 Kbps single-wire LED control interface?
It means each transmitted bit returns to zero before the next bit period ends. The thread found a short datasheet note stating "Data transmission using return-to-zero code protocol" and an RZ data rate of 800 Kbps for the SM15155E family. In this lamp, that matters because OpenBeken had to generate the correct high and low pulse pattern on one GPIO, not a normal SPI byte stream or PWM output. The return-to-zero behavior explains why near-miss LED drivers only flashed once or showed unstable colors. [#20785572]
How do I capture and analyze the data waveform on BK7231N P16 to identify the SM15155E timing requirements?
Probe BK7231N P16 while the original firmware drives the lamp, then decode the pulse widths. The thread team flashed the original 2 MB dump onto a CB3S module, accessed P16, captured the waveform, and opened it in PulseView for timing analysis. That method let them compare real edges against known WS2812B and SM16703P timings. If you cannot measure P16, you can guess nearby protocols, but this thread shows that guessing was not enough to reach stable 5-channel control. [#20789046]
Which GPIO and pin mapping are used between BK7231N and the SM15155E in this Tuya-based smart wall lamp, and why is P16 important?
The key data connection is BK7231N P16 to the single control input of the SM15155E. The teardown reported golden-pad pin 3 as BK7231N pin 16, and later discussion identified P16 as important because it is a hardware SPI-capable pin used to push timed LED data. This lamp had only one SM15155E for all 8 parallel LEDs, so one well-timed serial line controlled the entire RGB+CCT output. That is why generic GPIO guesses failed and P16 became the main reverse-engineering target. [#20778569]
What are the measured SM15155E pulse timings, and how close are they to WS2812B and SM16703P timings?
The measured SM15155E pulses were about 340–350 ns for one state and 1150–1160 ns for the other. Developers said those values were "kinda close" to WS2812B, but they did not match SM16703P well enough for reliable reuse. That small mismatch mattered in practice: the lamp could flash a color or partially respond, yet still fail normal control. For reverse engineering, WS2812B was the nearest comparison, but not a safe protocol replacement. [#20789559]
How can I build and test custom OpenBeken OTA firmware for a new LED driver without setting up a full local development environment?
Fork the OpenBeken repository and open a pull request. The thread states that the binary files are then created automatically, so you do not need a full local setup just to test OTA images. That approach is useful when you can only update the lamp over OTA and want to try driver changes quickly. It also keeps the test flow simple for contributors who can edit code but do not want to prepare a full local build environment first. [#20784319]
What is the meaning of the SM15155E frame format, including the 80 grayscale bits and the final 32 bits for current limiting and standby control?
The frame contains 80 bits of grayscale data, which equals 16 bits per channel across 5 channels, followed by 32 bits of control. Those last 32 bits encode per-channel current limit with 5 bits per channel, and the remaining bits cover standby enable plus reserved values. The same post states the SM15155E current setting range is 10 to 300 mA. That frame layout explains why timing alone was not enough; developers also had to understand what each trailing byte actually changed. [#20983095]
How do I use OpenBeken commands like startDriver SM15155E and LED_Map to control a 5-channel RGB+CCT lamp correctly?
Start the native driver, then set the channel order for your lamp. The working example in the thread was:
startDriver SM15155E
LED_Map 0 1 3 2 4
Verify RGB, warm white, and cold white outputs.
That map matters because the physical lamp wiring did not follow the default logical channel order. Once the native driver and mapping were correct, the developer reported that it "seems to be working" on the real lamp hardware. [#21115906]
WS2812B vs SM16703P vs SM15155E — which protocol is closest for reverse engineering a Tuya smart wall lamp, and where do the differences matter most?
WS2812B looked closest in pulse timing, but SM15155E needed its own implementation. The thread measured about 350 ns / 1150 ns and explicitly compared them with WS2812B and SM16703P, concluding SM16703P did not match well enough. The biggest differences were not only pulse widths. SM15155E also uses 5-channel data with 16-bit grayscale per channel and trailing control bits for current and standby. Those frame-level differences are where reuse attempts broke down. [#20789559]
Why won’t WLED run directly on a BK7231N smart wall lamp, and what alternatives are practical for testing the LED protocol?
WLED will not run directly because the lamp uses a BK7231N, not an ESP-compatible target expected by typical WLED builds. The thread explicitly said you "can't flash WLED on the chip you have" and suggested an ESP-compatible board like a NodeMCU only for external protocol experiments. For this lamp, the practical path was OpenBeken plus protocol reverse engineering, because the unresolved issue was the SM15155E signaling itself, not just firmware branding or UI. [#20827693]
What troubleshooting steps help when an OpenBeken-controlled SM15155E lamp boots into inconsistent colors or only partially responds to brightness changes?
Treat inconsistent color at boot as a protocol issue first. The thread reported green on about 95% of boots, occasional red, and brightness changes working only about 50% of the time during SM16703P experiments. Start by checking driver selection, channel count, and timing assumptions. Then test repeatable raw frames instead of app control. If behavior changes between reboots, do not assume hardware damage; in this case, unstable timing and incomplete frame meaning caused the partial response. [#20778910]
How can I safely probe or modify a mains-powered smart wall lamp with separate power-supply and LED boards without damaging the LEDs or risking electric shock?
Work only with the low-voltage side exposed, and isolate the power-supply board from your probing routine. The teardown states the large housing contained the power supply with 230 V input, while the LED side carried 3.3 V, ground, and LED power across separate boards. That split helps, but it does not remove mains risk. Do not scrape, solder, or scope the device while energized unless you know which section is low voltage. The thread author fully disassembled the lamp before tracing connections with a simple voltmeter. [#20778847]
What was still missing after the timing was decoded for SM15155E support in OpenBeken, and how was the remaining reverse engineering completed?
After timing capture, the missing piece was the meaning of the individual bytes in the SM15155E frame. One developer stated they already had the timings and a per-byte decoder, but still did not know what the bytes meant. Later, another contributor supplied the frame structure: 80 grayscale bits + 32 control bits, including current-limit mapping. With that information and the physical lamp in hand, the OpenBeken team finished the driver and showed it working with startDriver SM15155E. [#20990095]
AI summary based on the discussion. May contain errors.