eBUS (serial buses)

From HandWiki

In building automation, eBUS (energy bus) is a 2-wire digital serial data-bus communication interface used in heating and solar energy appliances, by mainly German manufacturers. It was originally proposed by the Karl Dungs company, and has since been adopted by several other manufacturers. The eBUS interface has also been used by home-automation enthusiasts to connect their domestic solar or heating system to a networked PC for monitoring or remote control.

Physical layer

The eBUS 2-wire interface is an asynchronous serial port with active-low voltage that exchanges 8-bit bytes with start and (single) stop bits (no parity bit), at a symbol rate of 2400 baud, and can be implemented with a standard UART plus a voltage converter. It differs from the RS-232 interface, from which it is derived, in that the voltage levels were chosen to allow the bus also to supply power to bus participants, that can use a voltage stabilizer to derive an internal 5 V supply:

  • logical 0 = 9–12 volt
  • logical 1 = 15–24 volt (typical: 20 V)

Data-link layer

Bus participants are either "masters" or "slaves". Only masters can initiate a command, by issuing a data packet that consists of

  • 8-bit source address (lower 4 bits: priority class, higher 4 bits: bus master address)
  • 8-bit destination address (254 unicast destinations, 0xfe = broadcast)
  • 16-bit command code (8 bit primary command byte and 8 bit secondary command byte)
  • 8-bit data length indicator: 0–16 (not counting additional bytes inserted by the byte stuffing rule)
  • 0–16 data bytes
  • 8-bit cyclic redundancy check byte (generator: x8+x7+x4+x3+x+1)

Recipients acknowledge such a command with a single acknowledge byte 0x00 (received correctly) or 0xff (received incorrectly). Slaves follow their acknowledge byte with a reply of a length byte and 0–16 data bytes plus CRC, which the receiving master in turn confirms with an acknowledge byte.

As the last step of a data exchange, the master finishes a command by sending a synchronization byte SYN (0xaa). This signals to other masters that the bus is available for use again. A byte stuffing rule (0xa9 -> 0xa9 0x00, 0xaa -> 0xa9 0x01) is applied to all other bytes sent, to ensure that 0xaa does not appear on the wire as part of any transmitted data other than in the final synchronization byte.

The transmission of a command can only appear immediately after a SYN byte was seen on the bus. If no SYN byte has appeared on the bus for 35 ms, the bus supply transmits one to ensure that there remain transmission opportunities (AUTO-SYN). Each bus master accessing the bus immediately after a SYN has to verify (in their UART's receiver buffer) that the source address byte that they sent has indeed appeared on the bus intact and has not collided with another master's transmission attempt. In the latter case, the transmission must be aborted and a collision-resolution procedure is initiated: at the next AUTO-SYN, participants with a priority class lower than the highest that participated in the last collision must not attempt a retransmission (and wait until the next SYN).

Application layer

The eBUS standard specifies a number of generic protocol packages of use for controlling heating-system components.

Some manufacturers have augmented these with their own proprietary extension data packets. Vaillant boilers, for example, use mostly proprietary data packets on their eBUS interface, thereby maintaining compatibility with the implementations of other manufacturers' eBUS implementations mainly at the physical and data-link layers.

Specifications

The eBUS specification documents were between 2001 and 2009 maintained by the eBUS Interest Group led by Prof. Lawrenz at Fachhochschule Braunschweig/Wolfenbüttel. They are now available from a German eBus enthusiast website, e.g.:

External links

  • eBus Wiki – German eBus enthusiast website, features recent versions of the official German and English eBUS specifications and associated documents
  • eBUS Interest Group – no longer online
  • eBUS daemon – a C++ based daemon for communication with eBUS heating systems