Difference between revisions of "Protocol decoder:Easymatic"

From sigrok
Jump to: navigation, search
(Hardware)
Line 24: Line 24:
  
 
[To be confirmed]
 
[To be confirmed]
The hardware is similar to [https://en.wikipedia.org/wiki/OpenTherm OpenTherm Specifcations] :  
+
The hardware is similar to [https://en.wikipedia.org/wiki/OpenTherm OpenTherm Specifications] :  
 
- differential link
 
- differential link
 
- about 24V
 
- about 24V
 
- tension modulation for boiler
 
- tension modulation for boiler
 
- intensity modulation for thermostat (easymatic) ?
 
- intensity modulation for thermostat (easymatic) ?
 +
 +
In order to link with a logic analyzer [[Saleae Logic]] an  interface must be done.
  
 
== 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 baased ==
 
 
* '''RX/RXD''': Receive signal
 
* '''TX/TXD''': Transmit signal
 
 
 
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'''.
 
 
 
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.
 
 
 
The data is sent over the TX line in so-called '''frames''', which consist of:
 
 
 
* Exactly '''one start bit''' (always 0/low).
 
* Between 5 and 9 '''data bits'''.
 
* An (optional) '''parity bit'''.
 
* One or more '''stop bit(s)'''.
 
 
 
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.
 
 
 
It is configurable whether there is a '''parity bit''' in a frame, and if yes, which '''type of parity''' is used:
 
  
* '''None''': No parity bit is included.
+
Whereas [https://en.wikipedia.org/wiki/OpenTherm OpenTherm] use [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).
* '''Odd''': The number of 1 bits in the data (and parity bit itself) is odd.
+
It's a :
* '''Even''': The number of 1 bits in the data (and parity bit itself) is even.
+
- 1200 bauds communication.
* '''Mark/one''': The parity bit is always 1/high (also called 'mark state').
+
- 8 bits of data
* '''Space/zero''': The parity bit is always 0/low (also called 'space state').
+
- no parity
 +
- one stop bit
  
It is also configurable how many '''stop bits''' are to be used:
+
The bit order of the 8 data bits is LSB-first.
  
* '''1 stop bit''' (most common case)
+
== Idle state ==
* '''2 stop bits'''
 
* '''1.5 stop bits''' (i.e., one stop bit, but 1.5 times the UART bit width)
 
* '''0.5 stop bits''' (i.e., one stop bit, but 0.5 times the UART bit width)
 
  
The '''bit order''' of the 5-9 data bits is usually '''LSB-first'''.
+
[TO be define]
  
Possible special cases:
+
== details ==
  
* 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.
+
[To be discovered and detailed]
* 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).
 
* The bit order could be MSB-first instead of LSB-first.
 
* 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.
 
* 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.
 
  
Error conditions:
+
Frames are repeated twice
  
* If there is a parity bit, but it doesn't match the expected parity, this is called a '''parity error'''.
+
To be define : how an order is send
* If there are no stop bit(s), that's called a '''frame error'''.
 
  
 
== Resources ==
 
== Resources ==

Revision as of 13:47, 21 November 2017

easymatic
250px
Name EASYMATIC
Description Asynchronous, serial bus, differential
Status planned
License GPLv2+
Source code decoders/uart
Input logic
Output Easymatic protocol
Probes
Optional probes Thermostat, Boiler
Options invert_thermostat, invert_boiler

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 cut. Boiler power is a 24V modulated with communication power.

[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 link with a logic analyzer Saleae Logic an interface must be done.

Protocol

Uart baased

Whereas OpenTherm use Manchester code, the easymatic seems to be based on Universal Asynchronous Receiver Transmitter (UART). It's a : - 1200 bauds communication. - 8 bits of data - no parity - one stop bit

The bit order of the 8 data bits is LSB-first.

Idle state

[TO be define]

details

[To be discovered and detailed]

Frames are repeated twice

To be define : how an order is send

Resources