This protocol is designed by Philips and the transmitters are produced by Philips (SAA3008) and ST (M3004). Personally I have never seen this protocol being used in real applications. All information on this page is derived from the data sheet of the Philips SAA3008 and the ST M3004 (10624.pdf).
There are 2 small differences between the two competitor ICs. The Philips IC has two modes of operation, one which is compatible with the ST chip and one which can handle up to 20 sub-system addresses. The ST chip has the capability of switching the modulation carrier off.
The protocol uses pulse distance modulation.
A logic "0" consists of a mark with a length of 6 periods of the carrier frequency (158µs), followed by a space which makes the total pulse to pulse distance 5.06ms.
A logic "1" consists of a mark with a length of 6 periods of the carrier frequency, followed by a space which makes the total pulse to pulse distance 7.59ms.
The mark is modulated (38kHz carrier @ 455kHz oscillator) with a 1/3 duty cycle.
The M3004 chip can also send marks unmodulated, but that would result in worse noise immunity.
The drawing below shows a typical pulse train of a normal RECS-80 message. This example transmits command 36 to address 4.
Usually the first pulse is a reference pulse, with a value of "1".
The receiver may use this bit to determine the exact bit length.
The next bit is a toggle bit.
Its value is toggled whenever a key is released, which results in a different code every time a new key is pressed.
This allows the receiver to discriminate between new key presses and key repetitions.
Only the ST chip M3004 can disable its carrier, in which case the REF pulse is interpreted as a second toggle bit.
The 2-bit toggle value is incremented every time a key is released.
Thus only in this mode there is no real REF pulse.
The next 3 pulses S2 to S0 represent the sub-system address bits, sent with MSB first.
This would allow for 8 different sub-system addresses but both the SAA3008 and the M3004 can only generate 7 sub-system addresses in normal mode.
Next come the 6 command bits F to A, also sent with MSB first allowing for 64 different commands per sub-system address.
The pulse train is terminated by a last pulse, otherwise there is no way to know the duration of bit A.
The entire command is repeated (with unchanged toggle bits) for as long as the key is held down. The repetition rate is 121.5ms (55296 periods of the oscillator).
Address assignments are a bit odd with this protocol. You can not simply convert the binary value to a decimal value. Below you see a table explaining the relationship between the binary and decimal sub-system address values.
Binary | Decimal |
1 1 1 | 1 |
0 0 0 | 2 |
0 0 1 | 3 |
0 1 0 | 4 |
0 1 1 | 5 |
1 0 0 | 6 |
1 0 1 | 7 |
If you need more than 7 sub-system addresses you can use the extended protocol which allows 13 additional sub-system addresses only if you use the SAA3008. The drawing below shows an extended message. This example transmits command 36 to address 10.
The first two pulses are a special start sequence. The total duration of these pulses is equal to a normal "1" period.
The next bit is a toggle bit. Its value is toggled whenever a key is released, which results in a different code every time a new key is pressed. This allows the receiver to discriminate between new key presses and key repetitions.
The next 4 pulses S3 to S0 represent the sub-system address bits.
This would allow for an additional 16 different sub-system addresses, although the SAA3008 can only generate 13 additional sub-system addresses in this mode.
Next come the 6 command bits F to A, also sent with MSB first.
The pulse train is terminated by a last pulse, otherwise there is no way to know the duration of bit A.
The entire command is repeated (with unchanged toggle bits) for as long as the key is held down. The repetition rate is 121.5ms (55296 periods of the oscillator).
Address assignments are a bit odd with this protocol. You can not simply convert the binary value to a decimal value. Below you see a table explaining the relationship between the binary and decimal sub-system address values.
Binary | Decimal |
0 0 0 0 | 8 |
1 0 0 0 | 9 |
0 1 0 0 | 10 |
1 1 0 0 | 11 |
0 0 0 1 | 12 |
1 0 0 1 | 13 |
0 1 0 1 | 14 |
1 1 0 1 | 15 |
1 0 1 0 | 16 |
0 1 1 0 | 17 |
1 1 1 0 | 18 |
0 1 1 1 | 19 |
1 1 1 1 | 20 |