Difference between revisions of "Protocol decoder:Easymatic"

From sigrok
Jump to: navigation, search
 
(39 intermediate revisions by 2 users not shown)
Line 2: Line 2:
 
| id              = easymatic
 
| id              = easymatic
 
| name            = EASYMATIC
 
| name            = EASYMATIC
| description    = Asynchronous, serial bus
+
| description    = Asynchronous, serial bus, differential
 
| status          = planned
 
| status          = planned
 
| license        = GPLv2+
 
| license        = GPLv2+
| source_code_dir = uart
+
| source_code_dir = easymatic
| image          = [[File:Easymatic.jpg|250px]]
+
| image          =  
| input          = logic
+
| input          = uart
| output          = uart
+
| output          = easymatic
 
| probes          = —
 
| probes          = —
| optional_probes = RX, TX
+
| optional_probes =  
| options        = baudrate, num_data_bits, parity_type, parity_check, num_stop_bits, bit_order, format, invert_rx, invert_tx
+
| options        =  
 
}}
 
}}
  
The '''uart''' protocol decoder (a.k.a. RS232) can decode the [https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter Universal asynchronous receiver/transmitter] and similar asynchronous communication protocols with various baudrates, stop bit settings, parity settings and so on.
+
The '''easymatic''' protocol decoder can decode the thermostat Easymatic bus protocol used by De Dietrich.
  
 
== Hardware ==
 
== Hardware ==
  
=== V&A VA18B multimeter cable ===
+
=== Differential link ===
  
The [http://sigrok.org/gitweb/?p=sigrok-dumps.git;a=tree;f=uart/v_and_a_va18b_cable uart/v_and_a_va18b_cable] directory in sigrok-dumps contains a set of example captures of the UART communication on the [[V&A VA18B]] multimeter PC cable (captured on the RX/TX pins of the Prolific PL2303HX chip in that cable). Additionally, it also contains the IR LED "probe" as well as USB D+/D- probes in the same capture.
+
The easymatic is linked to the boiler with two wires. This link can feed power to the easymatic. Easymatic can have two R4 accu in order to save data if the power is cut.
  
The logic analyzer used was a [[Saleae Logic]] (at 16MHz).  
+
Boiler power is a 24V modulated with communication power.
  
'''Probe setup:'''
+
Communication is always working.
  
{| border="0" style="font-size: smaller" class="alternategrey sortable sigroktable"
+
[To be confirmed]
|-
+
 
!Probe
+
The hardware is similar to [https://en.wikipedia.org/wiki/OpenTherm OpenTherm Specifications]:
!Pin/chip
+
* differential link
 +
* about 24V
 +
* tension modulation for boiler
 +
* intensity modulation for thermostat (easymatic)?
 +
 
 +
In order to capture data with a logic analyzer an interface must be created (to reduce the voltages to levels the respective logic analyzer can handle).
  
|-
+
=== Electrical coding ===
| 1 (black) || IR LED
 
|-
 
| 2 (brown) || TX (PL2303HX)
 
|-
 
| 3 (red) || RX (PL2303HX)
 
|-
 
| 4 (orange) || USB DM
 
|-
 
| 5 (yellow) || USB DP
 
  
|}
+
[To be defined]
  
'''Photos:'''
+
=== Idle state ===
  
<gallery>
+
[To be defined]
File:Va va18b probing pcb.jpg
 
File:Va va18b probing chip.jpg
 
File:Va va18b probing setup.jpg
 
</gallery>
 
  
 
== Protocol ==
 
== Protocol ==
  
[https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter Universal Asynchronous Receiver Transmitter] (UART) is a simple serial communication protocol which allows two devices to talk to each other. It uses just two data signals and a ground (GND) signal:
+
=== Uart based ===
 +
 
 +
Whereas [https://en.wikipedia.org/wiki/OpenTherm OpenTherm] uses [https://en.wikipedia.org/wiki/Manchester_code Manchester code], the easymatic seems to be based on [https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter Universal Asynchronous Receiver Transmitter] (UART):
 +
 
 +
* 1200 baud
 +
* 8 data bits (LSB-first)
 +
* even parity
 +
* one stop bit
 +
 
 +
=== Details ===
 +
 
 +
[To be discovered and detailed]
 +
 
 +
Frames are repeated twice.
 +
 
 +
To be defined: how an order is send
 +
 
 +
All frames consist of 6 bytes.
 +
 
 +
Boiler frames begin with a byte in 01, 03, 05, 07, 09, 0B, 0D.
 +
Thermostat frames begin with a "boiler beginning frame +1": 02, 04, 06, 08, 0A, 0C, 0E.
 +
 
 +
''Frame description''
  
* '''RX/RXD''': Receive signal
+
{| border="0" style="font-size: smaller" class="alternategrey sortable sigroktable"
* '''TX/TXD''': Transmit signal
+
!Frame (first byte)
 +
!Equipment
 +
!2nd byte
 +
!3rd byte
 +
!4th byte
 +
!5th byte
 +
!6th byte
 +
!Comments
  
The protocol is asynchronous, i.e., there is no dedicated clock signal. Rather, both devices have to agree on a baudrate (number of bits to be transmitted per second) beforehand. Baudrates can be arbitrary in theory, but usually the choice is limited by the hardware UARTs that are used. Common values are '''9600''' or '''115200'''.
+
|-
 +
| 0A
 +
| Easymatic
 +
| ?
 +
| colspan="2" | ?
 +
| ?
 +
| ?
 +
| ?
  
The protocol allows full-duplex transmission, i.e. both devices can send data at the same time. However, unlike SPI (which is always full-duplex, i.e., each send operation is automatically also a receive operation), UART allows one-way communication, too. In such a case only one signal (and GND) is required.
+
|-
 +
| 0B
 +
| Boiler
 +
| ?
 +
| ?
 +
| ?
 +
| colspan="2" | T°C outside
 +
| Example: 70.0°C = 700 = 0x02bc
  
The data is sent over the TX line in so-called '''frames''', which consist of:
+
|-
 +
| 0C
 +
| Easymatic
 +
| 00?
 +
| colspan="2" | T°C max boiler
 +
| colspan="2" | Set point frost protection T°C outside
 +
|
  
* Exactly '''one start bit''' (always 0/low).
+
|-
* Between 5 and 9 '''data bits'''.
+
| 0D
* An (optional) '''parity bit'''.
+
| Boiler
* One or more '''stop bit(s)'''.
+
| 00?
 +
| 00?
 +
| 00?
 +
| colspan="2" | T°C outside
 +
|
  
The idle state of the RX/TX line is 1/high. As the start bit is 0/low, the receiver can continually monitor its RX line for a falling edge, in order to detect the start bit. Once detected, it can (due to the agreed-upon baudrate and thus the known width/duration of one UART bit) sample the state of the RX line "in the middle" of each (start/data/parity/stop) bit it wants to analyze.
+
|-
 +
| 0E
 +
| Easymatic
 +
| Hour
 +
| Day
 +
| Minutes
 +
| FF?
 +
| FF?
 +
|
  
It is configurable whether there is a '''parity bit''' in a frame, and if yes, which '''type of parity''' is used:
+
|-
 +
| 01
 +
| Boiler
 +
| 40?
 +
| colspan="2" | T°C drink water
 +
| colspan="2" | T°C boiler water
 +
|
  
* '''None''': No parity bit is included.
+
|-
* '''Odd''': The number of 1 bits in the data (and parity bit itself) is odd.
+
| 02
* '''Even''': The number of 1 bits in the data (and parity bit itself) is even.
+
| Easymatic
* '''Mark/one''': The parity bit is always 1/high (also called 'mark state').
+
| C1?
* '''Space/zero''': The parity bit is always 0/low (also called 'space state').
+
| colspan="2" | Set point room T°C day
 +
| colspan="2" | Set point room T°C night
 +
|
  
It is also configurable how many '''stop bits''' are to be used:
+
|-
 +
| 03
 +
| Boiler
 +
| 00?
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
|
  
* '''1 stop bit''' (most common case)
+
|-
* '''2 stop bits'''
+
| 04
* '''1.5 stop bits''' (i.e., one stop bit, but 1.5 times the UART bit width)
+
| Easymatic
* '''0.5 stop bits''' (i.e., one stop bit, but 0.5 times the UART bit width)
+
| 05?
 +
| colspan="2" | Set point frost protection room T°C
 +
| colspan="2" | Set point T°C drink water
 +
|
  
The '''bit order''' of the 5-9 data bits is usually '''LSB-first'''.
+
|-
 +
| 05
 +
| Boiler
 +
| Boiler bits command ** ***
 +
| ?
 +
| ?
 +
| colspan="2" | outside T°C
 +
| ***confirmation received order ?
  
Possible special cases:
+
|-
 +
| 06
 +
| Easymatic
 +
| Boiler bits command ** ***
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
| ***order ?
  
* One or both data lines could be inverted, which also means that the idle state of the signal line(s) is low instead of high.
+
|-
* Only the data bits on one or both data lines (and the parity bit) could be inverted (but the start/stop bits remain non-inverted).
+
| 07
* The bit order could be MSB-first instead of LSB-first.
+
| Boiler
* The baudrate could change in the middle of the communication. This only happens in very special cases, and can only work if both devices know to which baudrate they are to switch, and when.
+
| Alarm ?
* Theoretically, the baudrate on RX and the one on TX could also be different, but that's a very obscure case and probably doesn't happen very often in practice.
+
| ?
 +
| ?
 +
| colspan="2" | outside T°C
 +
|
  
Error conditions:
+
|-
 +
| 08
 +
| Easymatic
 +
| 00?
 +
| ?
 +
| ?
 +
| ?
 +
| ?
 +
|
  
* If there is a parity bit, but it doesn't match the expected parity, this is called a '''parity error'''.
+
|-
* If there are no stop bit(s), that's called a '''frame error'''.
+
| 09
 +
| Boiler
 +
| 00?
 +
| ?
 +
| ?
 +
| colspan="2" | outside T°C
 +
|
 +
 
 +
|}
 +
 
 +
(**) bits signification?: Boiler pump/Hydraulic valve Close//Hydraulic valve Open/Burner 1,2/Burner 1,1
  
 
== Resources ==
 
== Resources ==
  
 
* [https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter Wikipedia: Universal asynchronous receiver/transmitter]
 
* [https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter Wikipedia: Universal asynchronous receiver/transmitter]
* [http://www.dedietrich-heating.com/index.php/products/product_ranges/floor_standing_boilers/oil_condensing_wingo]
+
* [http://www.dedietrich-heating.com/index.php/products/product_ranges/floor_standing_boilers/oil_condensing_wingo De Dietrich information]
 
 
  
 
[[Category:Protocol decoder]]
 
[[Category:Protocol decoder]]
 
[[Category:UART]]
 
[[Category:UART]]

Latest revision as of 08:12, 11 April 2018

easymatic
Name EASYMATIC
Description Asynchronous, serial bus, differential
Status planned
License GPLv2+
Source code decoders/easymatic
Input uart
Output easymatic
Probes

The easymatic protocol decoder can decode the thermostat Easymatic bus protocol used by De Dietrich.

Hardware

Differential link

The easymatic is linked to the boiler with two wires. This link can feed power to the easymatic. Easymatic can have two R4 accu in order to save data if the power is cut.

Boiler power is a 24V modulated with communication power.

Communication is always working.

[To be confirmed]

The hardware is similar to OpenTherm Specifications:

  • differential link
  • about 24V
  • tension modulation for boiler
  • intensity modulation for thermostat (easymatic)?

In order to capture data with a logic analyzer an interface must be created (to reduce the voltages to levels the respective logic analyzer can handle).

Electrical coding

[To be defined]

Idle state

[To be defined]

Protocol

Uart based

Whereas OpenTherm uses Manchester code, the easymatic seems to be based on Universal Asynchronous Receiver Transmitter (UART):

  • 1200 baud
  • 8 data bits (LSB-first)
  • even parity
  • one stop bit

Details

[To be discovered and detailed]

Frames are repeated twice.

To be defined: how an order is send

All frames consist of 6 bytes.

Boiler frames begin with a byte in 01, 03, 05, 07, 09, 0B, 0D. Thermostat frames begin with a "boiler beginning frame +1": 02, 04, 06, 08, 0A, 0C, 0E.

Frame description

Frame (first byte) Equipment 2nd byte 3rd byte 4th byte 5th byte 6th byte Comments
0A Easymatic  ?  ?  ?  ?  ?
0B Boiler  ?  ?  ? T°C outside Example: 70.0°C = 700 = 0x02bc
0C Easymatic 00? T°C max boiler Set point frost protection T°C outside
0D Boiler 00? 00? 00? T°C outside
0E Easymatic Hour Day Minutes FF? FF?
01 Boiler 40? T°C drink water T°C boiler water
02 Easymatic C1? Set point room T°C day Set point room T°C night
03 Boiler 00?  ?  ?  ?  ?
04 Easymatic 05? Set point frost protection room T°C Set point T°C drink water
05 Boiler Boiler bits command ** ***  ?  ? outside T°C ***confirmation received order ?
06 Easymatic Boiler bits command ** ***  ?  ?  ?  ? ***order ?
07 Boiler Alarm ?  ?  ? outside T°C
08 Easymatic 00?  ?  ?  ?  ?
09 Boiler 00?  ?  ? outside T°C

(**) bits signification?: Boiler pump/Hydraulic valve Close//Hydraulic valve Open/Burner 1,2/Burner 1,1

Resources