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

DATA
Bidirectional data line (inverted)
CLK
100kHz clock, rising edge samples
HOLD
Chip select, active high

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

TypePatternPurpose
CUE0x0100Frame type separator, sent before each data frame
DIGITHas S1-S4 bits7-segment display data (temperature, time)
LEDBit 14 setLED status (power, filter, heater, bubble)
BUTTONBit 8 set, others clearButton scan codes for sending commands
4 of 4 entries

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

ButtonCodeLED Indicator
Filter0x01020x1000
Heater0x81000x0080
Temp Up0x1100
Temp Down0x0180
Bubble0x01080x0400
Power0x05000x0001
Unit (°C/°F)0x2100
7 of 7 entries

Protocol details from esp8266-intexsbh20 by Jens B. and diyscip by Geoffroy Hubert.