Skip to content

Packet Format

ghoti57 edited this page Jun 8, 2020 · 13 revisions

Packet Format

Each message is transmitted in a packet which has a fixed 3-byte header and a fixed 1-byte trailer.

The packet is preceded by a training pre-amble and a 2-byte sync-word. It is followed by more training bytes.

So the overall format of a packet is
<pre-amble><sync-word><header><Evohome Message><trailer><training>

Training

Training bytes are bytes with alternating mark (one) and space (zero) bits. START and STOP bits around the training byte continue this pattern so that a sequence of training bytes are a continuous stream of alternating zeros and ones. Since START is a space and STOP is a mark this fixes the value of a training byte as 0x55.

This appears in the bitstream as 0 10101010 1 or <S>10101010<p>

Pre-amble

The pre-amble is a sequence of training bytes that provide bit level timing for the bitstream.

It will appear as <S>10101010<p><S>10101010<p><S>10101010<p><S>10101010<p>

Sync-Word

The Sync-Word is a two byte pattern that provides byte level alignment for the rest of the packet.

The byte values are 0xFF and 0x00. These will appear in the bitstream as
<S>11111111<p><S>00000000<p>
This is the only place in a properly formatted message that 9 consecutive space bits will be found
i.e. <S>00000000
The STOP bit that follows these bits identifies the byte boundary within the packet bitstream (indicated by | below).

Header

The header is a fixed 3 byte sequence which acts a signature to identify the message as an evohome message.

The byte values are 0x33,0x55,0x53

Trailer

The trailer is a single byte with the value 0x35. This is a value that cannot appear as a byte in the Evohome Message itself and marks the end of the actual message.

Evohome Message Body

The body of the message itself is transmitted using Manchester Coding.

Manchester Coding uses two bits to represent each actual data bit. Each of the pair of code bits are opposite in value so that there is always a transition between them. A 1 data bit is transmitted as 10 and a 0 data bit is transmitted as 01 (remember they will be transmitted LSB first).

The coding means that each actual message bytes requires two bytes to be transmitted in the bitstream (20 bits in total including the Start/stop bits).

Packet Format Summary

In summary, the overall structure of a transmitted packet is

<           pre-amble                  > <    sync-word     > | <         header             > < Message Body > <trailer > <train   >  
<   55   ><   55   ><   55   ><   55   > <   FF   ><   00   > | <   33   ><   55   ><   53   > < Message Body > <   35   > <   55   >  
S10101010pS10101010pS10101010pS10101010p S11111111pS00000000p | S11001100pS10101010pS11001010p < Message Body > S10101100p S10101010p  

The Message Body is formed by decoding pairs of packet bytes.

Clone this wiki locally