Bus Protocol
16-bit SPI-like protocol at 100kHz between mainboard and control panel.
The Intex PureSpa uses a custom protocol similar to SPI mode 3, but unidirectional for most traffic. Data is inverted, MSB first. Button presses are signaled by pulling the DATA line low at a precise moment.
Signal Overview
Frame Structure
|-------------------------------------------------------------------------------|
BIT | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|-------------------------------------------------------------------------------|
CUE | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
DIGIT | DP | x | A | B | S3 | D | C | x | E | S1 | S2 | G | F | S4 | x | x |
LED | 0 | 1 | 0 | x | 0 | x | x | x | x | 0 | 0 | 0 | 0 | 0 | 0 | x |
BUTTON | x | 0 | x | x | 0 | x | 0 | 1 | 0 | 0 | 0 | 0 | x | 0 | 0 | 0 |
|-------------------------------------------------------------------------------|Frame Types
| Type | Pattern | Purpose |
|---|---|---|
| CUE | 0x0100 | Frame type separator, sent before each data frame |
| DIGIT | Has S1-S4 bits | 7-segment display data (temperature, time) |
| LED | Bit 14 set | LED status (power, filter, heater, bubble) |
| BUTTON | Bit 8 set, others clear | Button scan codes for sending commands |
7-Segment Display
A
-----
| |
F | | B
| |
--G--
| |
E | | C
| |
-----
D DP
Bits S1, S2, S3, S4 select which of the 4 digits is being addressed.
Frame Cycle
32 frames repeat every 21ms:
C D1 C D2 C D3 C D4 C L C D1 C D2 C D3 C D4 C L C D1 C D2 C D3 C D4 C L C D1 C D2 C D3 C D4 C L C D1 C D2 C D3 C D4 C L C B B B B B B B L C = Cue frame D1-D4 = Digit frames (4 positions) L = LED frame B = Button scan frames (7 for SB-H20)
Button Signaling
Critical Timing
To press a button, the controller must pull the DATA line LOW for 2µs immediately after HOLD goes HIGH, when the matching button scan frame is received.
This must be repeated until the mainboard confirms by sounding the buzzer. The precise 2µs timing is why PIO is essential — WiFi interrupts on ESP8266/ESP32 often disrupt this window.
Button Codes
| Button | Code | LED Indicator |
|---|---|---|
| Filter | 0x0102 | 0x1000 |
| Heater | 0x8100 | 0x0080 |
| Temp Up | 0x1100 | — |
| Temp Down | 0x0180 | — |
| Bubble | 0x0108 | 0x0400 |
| Power | 0x0500 | 0x0001 |
| Unit (°C/°F) | 0x2100 | — |
Protocol details from esp8266-intexsbh20 by Jens B. and diyscip by Geoffroy Hubert.