Skip to content

VBus Protocol Specification

Published by RESOL - Elektronische Regelungen GmbH.

Main contact: VBus Development Group (EMail: vbus@resol.de)

Revision History
VersionDateAuthorChanges
102015-10-20Daniel WippermannAdded VBus protocol specification 3.0
112015-10-26Daniel WippermannAdded VBus master schematic
122016-01-28Daniel WippermannFixed error in "Physical layer" section about "MARK" and "SPACE"
132023-12-14Daniel WippermannAdded "Block type packets" section
Authors

Introduction

The RESOL VBus is a half-duplex bus system used by RESOL electronic controllers to communicate with each other and – e.g. using a PC interface – with external components.

One module on the bus system is the master, all other modules are slaves.

Physical layer

The VBus physical interface comes in two flavors:

  • a 2-wire connection providing the bus signal and partial power supply over the same wires
  • a 4-wire connection providing separate wire pairs for the bus signal and power supply

The master supplies the bus system with electric energy using a constant current source. This allows partial power supply of slave modules as well.

For the 2-wire connection the maximum current can vary from 35 mA (older products) to 62 mA (newer products) and the maximum votage is capped at approx. 8,2 V.

For the 4-wire connection the maximum current is 35 mA and the maximum voltage is capped at approx. 5,5 V.

During transmission a module pulls the bus voltage to ground level (GND) using a transistor in order to send a logical „0“ (SPACE). To send a logical „1“ (MARK) the bus voltage has to be kept at the specified maximum level.

During reception a module uses an analog comparator to distinguish between the two states MARK and SPACE (see below for details). The voltage difference between MARK and SPACE is used as a hysteresis.

Most slave modules rectify the bus voltage to ensure reverse-polarity protection. Due to the voltage drop over the rectifier diodes the master and slave modules use different trigger voltages for MARK and SPACE detection.

Trigger voltages at the comparator input:

MasterSlave
MARK: U >=3,25 V2,25 V
SPACE: U <=3,00 V2,00 V

Appendix A contains several VBus schematics for both master and slave.

This schemetic is designed for use with a supply voltage of VCCL = 3,3 V. To use a supply voltage of VCCL = 5.0 V the following resistor values have to be adjusted:

R205R207
3,3 V820 Ω1600 Ω
5,0 V2200 Ω1600 Ω

The 4-wire connection uses a JST connector with a pitch of 2.00 mm. The pinning is:

VBus Pinning JST

VBus Protocol

For data transmission and reception a UART is used in half-duplex mode with 9600 bits per second, 1 start bit, 8 data bits and one stop bits. Neither parity nor handshakes are used.

1 data byte = 1 start bit + 8 bit data + 1 stop bit = 10 bits must be transmitted to send 1 data byte

Timing for different baud rates:

Baud rateTime per data byte
9600 (default)1041,67 µs
19200520,83 µs
38400260,42 µs
57600173,61 µs
11520086,80 µs

Since the VBus is a single-master-system the communication timing is controlled by the master. The master pauses for short moments during the transmission to ensure that all bus-powered slaves have enough time to recharge. In addition to that slaves are only allowed to send data after they have been requested to do so by the master. After a master's request an appropriate time frame is reserved for the answer.

SYNC-Byte

Every VBus data stream starts with a synchronisation byte (SYNC-Byte):

0xAA or 170 decimal

The reception of a SYNC-Byte starts a new data stream. If the current reception was incomplete it will be cancelled and discarded. This happens as well whenever a byte is received that has its MSB (Most Significant Bit) set (its value is greater than 0x7F or 127 decimal). All received bytes up to the next SYNC-Byte are ignored.

Reception is complete if the data stream reaches its announced length without MSB or checksum errors. The data stream is then processed and reception starts with next SYNC-Byte.

Checksums

To detect communication errors the data stream is protected by one or more checksums. The data stream's length and amount of checksums are depending on several factors:

  • protocol version
  • announced amount of payload

Checksums can be calculated using the following C function:

unsigned char VBus_CalcCrc(const unsigned char *Buffer, int Offset, int Length)
{
	unsigned char Crc;
	int i;

	Crc = 0x7F;
	for (i = 0; i < Length; i++) {
		Crc = (Crc - Buffer [Offset + i]) & 0x7F;
	}
	return Crc;
}

Septet-Bytes

During transmission of payload data care must be taken that no byte is transmitted with its MSB set. To ensure this the MSBs of up to seven payload bytes are extracted for the duration of the transmission into an addition MSB collection byte (called „Septet-Byte“) and transmitted separately. The extraction and re-injection are handled by the following C functions:

void VBus_ExtractSeptett(unsigned char *Buffer, int Offset, int Length)
{
	unsigned char Septett;
	int i;

	Septett = 0;
	for (i = 0; i < Length; i++) {
		if (Buffer [Offset + i] & 0x80) {
			Buffer [Offset + i] &= 0x7F;
			Septett |= (1 << i);
		}
	}
	Buffer [Offset + Length] = Septett;
}

void VBus_InjectSeptett(unsigned char *Buffer, int Offset, int Length)
{
	unsigned char Septett;
	int i;

	Septett = Buffer [Offset + Length];
	for (i = 0; i < Length; i++) {
		if (Septett & (1 << i)) {
			Buffer [Offset + i] |= 0x80;
		}
	}
}

A payload data block of four bytes would be transformed like this:

BeforeAfterDescription
0xE80x68First payload byte, MSB (=1) is extracted to Septet-Bit 0
0x030x03Second payload byte, MSB (=0) is extracted to Septet-Bit 1
0xF40x74Third payload byte, MSB (=1) is extracted to Septet-Bit 2
0x010x01Fourth payload byte, MSB (=0) is extracted to Septet-Bit 3
0x05Septet-Byte

Beginning of a VBus data stream

The first 6 bytes of a VBus data stream (starting with the SYNC-Byte) share the same structure for all protocol versions:

OffsetDescription
0SYNC-Byte (0xAA or 170 decimal)
1Destination address (low-byte)
2Destination address (high-byte)
3Source address (low-byte)
4Source address (high-byte)
5Protocol version

Addresses are assigned by RESOL. Every module on the VBus has at least one address. Modules that have an adjustable sub-address use the four least significant bits for that. See VBus Specification for a list of known addresses.

The remaing data stream structure differs depending on the „Protocol version“ byte. The following values are valid:

ValueDescription
0x10 or 16 decimalProtocol version 1.0
0x20 or 32 decimalProtocol version 2.0
0x30 or 48 decimalProtocol version 3.0
0x31 or 49 decimalProtocol version 3.1

Protocol version 1.0

VBus data streams of protocol version 1.0 (called „packets“ for short) are used for continous data exchange of measurement, control and balance values between a master and its slaves. Packets start with a 10 byte header that can announce a variable amount frames containing additional payload.

OffsetDescription
0SYNC-Byte (0xAA or 170 decimal)
1Destination address (low-byte)
2Destination address (high-byte)
3Source address (low-byte)
4Source address (high-byte)
5Protocol version (0x10 or 16 decimal)
6Command (low-byte)
7Command (high-byte)
8Number of payload frames
9Checksum for offset 1-8

The payload is split into blocks of four bytes and transmitted together with its Septet-Byte and a checksum as a „frame“.

OffsetDescription
i + 0First payload byte, MSB is extracted to Septet-Bit 0
i + 1Second payload byte, MSB is extracted to Septet-Bit 1
i + 2Third payload byte, MSB is extracted to Septet-Bit 2
i + 3Fourth payload byte, MSB is extracted to Septet-Bit 3
i + 4Septet-Byte for offset (i + 0) to (i + 3)
i + 5Checksum for offset (i + 0) to (i + 4)

The header field „Command“ can be one of the following values:

CommandExplanation
0x0100Packet contains data for destination
0x0200Packet contains data for destination, answer required
0x0300Request answer of destination

The contents of the payload is depending on three header fields:

  • Source address
  • Destination address
  • Command

After the header was received without errors the contents of the payload can be processed based on those header fields:

  • if the "Destination address" is 0x0015 and the "Command" is 0x0100, it is a "block type packet" (see below for details)
  • in all other cases the payload structure needs to be looked up based on the header's address / command combination

See VBus Specification for a list of known packets (address / command combinations).

A short packet may look like this:

OffsetValueDescription
00xAASYNC-Byte
10x11Destination address (low-byte)
20x44Destination address (high-byte)
30x10Source address (low-byte)
40x66Source address (high-byte)
50x10Protocol version
60x00Command (low-byte)
70x02Command (high-byte)
80x01Number of payload frames
90x21Checksum for offset 1-8
100x07First payload byte
110x04Second payload byte
120x0FThird payload byte
130x00Fourth payload byte
140x00Septett for offset 10-13
150x65Checksum for offset 10-14

This packet is sent by module 0x6610 (RESOL Midi Pro) and is directed to module 0x4411 (RESOL HKM1) including command 0x0200 (Packet contains data for destination, answer required). These three components define the payload contents.

Block type packets

"Block type packets" are used to transfer certain information aimed for product-independent VBus accessories (like SD3 smart displays or AM1 alarm modules). Block type packets are marked as such by using a "Destination address" of 0x0015 and a "Command" of 0x0100 in the packet's header. The "Source address" can be ignored in that case.

The payload of a block type packet contains a sequence of self-describing block type sections (called "section" for short). Each section consists of a section header and optional section payload. The section header has a size of four bytes and is always aligned to a frame boundary (i.e. its payload offset is a multiple of four). The section header is structured as follows:

OffsetDescription
0Number of payload frames belonging to this section
1Type of this section
2Reserved
3Reserved

This structure allows product-independent VBus accessories to only find the information they are interested in, skipping all other sections.

The following section types are defined:

TypeDescriptionElement size
0x01Temperatures2
0x05Heat quantities4
0x08Relay speeds1
0x0ASmart Display8
0x0BError mask4
0x0CWarning mask4
0x0DStatus mask4

An example block type packet's frame payload may look like this:

OffsetValueDescription
00x02Section #1: Number of payload frames belonging to this section
10x0aSection #1: Type of this section
20x00
30x00Section #1: End of section header
40x03Section #1: first byte of section payload
50x00..
60x08..
70x00..
80x00..
90x00..
100x00..
110x00Section #1: last byte of section payload
120x01Section #2: Number of payload frames belonging to this section
130x0bSection #2: Type of this section
140x00
150x00Section #2: End of section header
160x00Section #2: first byte of section payload
170x00..
180x00..
190x00Section #2: last byte of section payload
200x04Section #3: Number of payload frames belonging to this section
210x08Section #3: Type of this section
220x00
230x00Section #3: End of section header
240x00Section #3: first byte of section payload
250x00..
260x00..
270x00..
280x00..
290x00..
300x00..
310x00..
320x00..
330x00..
340x00..
350x00..
360x00..
370x00..
380x00..
390x00Section #3: last byte of section payload
400x01Section #4: Number of payload frames belonging to this section
410x0cSection #4: Type of this section
420x00
430x00Section #4: End of section header
440x00Section #4: first byte of section payload
450x00..
460x00..
470x00Section #4: last byte of section payload

This example packet contains four sections:

  • Type 0x0A ("Smart Display") with a payload length of 2 frames = 1 element of 8 bytes
  • Type 0x0B ("Error mask") with a payload length of 1 frame = 1 element of 4 bytes
  • Type 0x08 ("Relay speeds") with a payload length of 4 frames = 16 elements of 1 byte each
  • Type 0x0C ("Warning mask") with a payload lenght of 1 frame = 1 element of 4 bytes

Protocol version 2.0

VBus data streams of protocol version 2.0 (called „datagrams“ for short) allow access to all values that can be adjusted using the module's menu system. It's primarily used for remote parameterization.

Each datagram has a length of 16 bytes and allows to access a single data point (adjustable value). Every data point has an ID. IDs are module and version dependant. A complete list of IDs would go far beyond the scope of the document.

OffsetExplanation
0SYNC-Byte (0xAA or 170 decimal)
1Destination address (low-byte)
2Destination address (high-byte)
3Source address (low-byte)
4Source address (high-byte)
5Protocol version (0x20 or 32 decimal)
6Command (low-byte)
7Command (high-byte)
8ID of data point (low-byte)
9ID of data point (high-byte)
10Value of data point (low-byte)
11Value of data point
12Value of data point
13Value of data point (high-byte)
14Septet for offset 8-13
15Checksum for offset 1-14

The header field „Command“ can be one of the following values:

CommandExplanation
0x0100Answer from module with requested value
0x0200Write value, acknowledgement required
0x0300Read value, acknowledgement required
0x0400Write value, acknowledgement required
0x0500VBus clearance by master module
0x0600VBus clearance by slave module

In regular intervals the master broadcasts a datagram containing command 0x0500. This allows slave modules to temporarily take over the bus timing. A PC issuing a parameterization has to wait for such a clearance datagram before starting to send datagrams to read or write the master's data points. On completion of the parameterization the PC sends a datagram containing command 0x0600 to return the bus timing control back to the previous master.

DestinationSourceCommandIDValueDescription
0x00000x72100x050000Broadcast for clearance
0x72100x00200x03000x12340PC reads value for ID 0x1234
0x00200x72100x01000x1234750Master sends value 750 for ID 0x1234
0x72100x00200x03000x12350PC reads value for ID 0x1235
0x00200x72100x01000x345612Master sends value 12 for ID 0x3456
0x72100x00200x060000PC returns bus timing to master

Protocol version 3.x

VBus data streams of protocol version 3.x (called "telegrams" for short) are used to manage and evaluate digital sensors and actors. Telegrams start with a 8 byte header that can annouce a variable amout of additional payload.

OffsetDescription
0SYNC-Byte (0xAA or 170 decimal)
1Destination address (low-byte)
2Destination address (high-byte)
3Source address (low-byte)
4Source address (high-byte)
5Protocol version (0x30 or 48 decimal)
6Command
7Checksum for offset 1-6

The payload is split into blocks of seven bytes and transmitted together with its Septet-Byte and a checksum as a „frame“.

OffsetDescription
i + 0First payload byte, MSB is extracted to Septet-Bit 0
i + 1Second payload byte, MSB is extracted to Septet-Bit 1
i + 2Third payload byte, MSB is extracted to Septet-Bit 2
i + 3Fourth payload byte, MSB is extracted to Septet-Bit 3
i + 4Fifth payload byte, MSB is extracted to Septet-Bit 4
i + 5Sixth payload byte, MSB is extracted to Septet-Bit 5
i + 6Seventh payload byte, MSB is extracted to Septet-Bit 6
i + 7Septet-Byte for offset (i + 0) to (i + 6)
i + 8Checksum for offset (i + 0) to (i + 7)

Since the "Command" also determines the number of payload frames and their structure, the value of the corresponding header field "Command" contains an indication on how many frames are transmitted after the header, using the following structure:

BitDescriptionRange
0-4Command number0x00 - 0x1F
5-6Number of payload frames0 - 3
7Always 0N/A

The header field "Command" can have one of the following values:

ValueCommand numberNumber of payload framesDescription
0x010x010Request slave ID type 1
0x020x020Request slave ID type 2
0x230x031Slave ID response
0x040x040Request slave data
0x240x041Request slave data with control values
0x250x051Slave data response
0x260x061Change baud rate
0x270x071Change sub address
0x080x080Request extended data from slave
0x690x093Slave response with extended data

The reserved address space for sensors and actors using VBus protocol version 3.x is 0x2000 - 0x2F7F. The addresses use the following structure:

BitDescriptionRange
15, 7Always 0 (MSB)N/A
14-12Always 2N/A
11-4Group address0-255 (partially)
0-3Sub address0 - 15

Different types of sensors and actors each have their own group address. Currently the group address can have one of the following values:

ValueAddress patternDescription
00x2000Broadcast (all slaves from all groups)
10x201?VFD 1 - 20 l/min
20x202?VFD 2 - 40 l/min
30x203?VFD 2 - 40 l/min (fast)
40x204?VFD 5 - 100 l/min
50x205?VFD 10 - 200 l/min
60x206?RPD 0 - 10 bar
70x207?VFD 1 - 12 l/min
160x210?FlowCheck 0,5 - 20 l/min
170x211?VBus 3 Meteo
180x212?Pumpenansteuerung
190x213?GIR 7

All slaves have a sub address of 0 after power-up. The VBus master can then assign sub addresses to each of the slaves.

The following table list the possible combinations of destination address and respective slave groups:

Destination addressSlave group
0x2000All slaves with sub address 0
0x2GG0All slaves with group address GG and sub address 0
0x2GGSThe slave with group address GG and sub address S

Adresses between 0x2001 and 0x200F are invalid.

The broadcast address 0x2000 can be used to force all slaves having sub address 0 to process the telegram. Responding slaves have to answer with their respective group address instead (e. g. 0x2010).

Slave detection and sub address assignment

All sensors and actors using VBus protocol version 3.x need to have the following information stored in the device permanently:

  • VBus group address (7 bit)
  • Product identifier (24 bit)
  • Production week (6 bit)
  • Consecutive number (17 bit)

This information is used to detect and configure slaves that are connected to a master.

When the master starts a slave detection cycle it performs the following operations:

  1. (optionally) switches the VBus supply voltage off and on again to reset all slaves to use sub address 0
  2. Sends telegram with command "Request Slave ID type 1" and waits for responses
  3. If a response from 2. was received, assign a sub address to the responding slave and repeat 2.
  4. Sends telegram with command "Request Slave ID type 2" and waits for responses
  5. If a response from 4. was received, assign a sub address to the responding slave and repeat 2.

The telegrams referred to in 2. and 4. can either be broadcasted (to address 0x2000) or group-casted (to address 0x2GG0 where GG is the respective group address). Only slaves that currently have a sub address of 0 and belong to the requested group (if not broadcasted) are allowed to respond to this type of requests.

But since the VBus is a single-master bus only one slave is allowed to answer this request at a time. This is achieved by calculating timeouts based on a slave specific device identifier value derived from the permanently stored values mentioned above.

The slave specific device identifier value and the corresponding timeouts are calculated using:

DeviceIdentifier = ProductionWeek * 2^17 + ConsecutiveNumber
TimeoutType1 = (DeviceIdentifier mod 100) * 8 + 50
TimeoutType2 = ((DeviceIdentifier mod 100) * 8 + ((DeviceIdentifier / 100) mod 100) * 8 + 50

For example: a sensor with the following permanently stored values:

ProductionWeek = 17
ConsecutiveNumber = 116406

calculates the following device identifier and timeout values:

DeviceIdentifier = 17 * 2^17 + 116406 = 2344630
TimeoutType1 = 30 * 8 + 50 = 290 ms
TimeoutType2 = 30 * 8 + 46 * 8 + 50 = 658 ms

If the slave receives a "Request slave ID type 1 / 2" request as a broadcast (to address 0x2000) or group-cast (to address 0x2GG0 where GG is the respective group address) it must wait for the calculated TimeoutType1 / TimeoutType2 respectively. If the slave receives another SYNC-byte during that wait it cancels its outstanding response and waits for another "Request slave ID" request. If no SYNC-byte was received while waiting for the timeout the slave is allowed to send its response.

Commands

Command 0x01 / 0x02: Request slave ID type 1 / 2

The master can send this telegram to a slave (or a group of slaves) to query their slave ID. Depending on the destination address the following slaves may respond:

Destination addressSlavesTimeout?
0x2000All slaves having sub address 0yes
0x2GG0All slaves having group address GG and sub address 0yes
0x2GGSThe slave having group address GG and sub address Sno

If a timeout is necessary the timeout values for both the slave response and the master's maximum wait timeout depend on the command:

Timeout?CommandSlave response timeoutMaster maximum timeout
yes0x01TimeoutType11200 ms
yes0x02TimeoutType22200 ms
noboth0 ms80 ms

The master's maximum timeout is the period the master has to wait for incoming responses after sending the request.

The request itself has no payload frames. An example telegram looks like this:

OffsetValueDescription
00xAASYNC-byte
10x10Destination address (low-byte)
20x20Destination addres (high-byte)
30x31Source address (low-byte)
40x77Source address (high-byte)
50x30Protocol version
60x01Command
70x76Checksum
Command 0x23: Slave ID response

The slave sends this telegram as a response to a "Request slave ID type 1 / 2" telegram sent by the master.

Given a slave with the following permanently stored information:

  • VBus group address: 0x2010
  • Product identifier: 888888
  • Production week: 17
  • Consecutive number: 116406

The calculated device identifier is:

DeviceIdentifier = ProductionWeek * 2^17 + ConsecutiveNumber = 17 * 2^17 + 116406 = 2344630

An example telegram looks like this:

OffsetValueDescription
00xAASYNC-byte
10x31Destination address (low-byte)
20x77Destination addres (high-byte)
30x10Source address (low-byte)
40x20Source address (high-byte)
50x30Protocol version
60x23Command
70x54Checksum
80x38Product identifier (low-byte)
90x10Product identifier
100x0DProduct identifier (high-byte)
110x36Device identifier (low-byte)
120x46Device identifier
130x23Device identifier (high-byte)
140x00Unused (0)
150x1AFrame Septet-Byte
160x71Frame checksum
Command 0x04 / 0x24: Request data from slave

The master send this telegram to request data from the slave and optionally send control values to it.

Depending on the destination address the following slaves may respond:

Destination addressSlaves
0x2000The slave having sub address 0
0x2GG0The slave having group address GG and sub address 0
0x2GGSThe slave having group address GG and sub address S

It must be ensured that only one slave is elegible to respond even if the telegram is send to the boradcast or group-cast address.

An example telegram without control values / payload frames looks like this:

OffsetValueDescription
00xAASYNC-byte
10x10Destination address (low-byte)
20x20Destination addres (high-byte)
30x31Source address (low-byte)
40x77Source address (high-byte)
50x30Protocol version
60x04Command
70x73Checksum
Command 0x25: Slave data response

The slave sends this telegram in response to a "Request data from slave" telegram sent by the master.

An example telegram looks like this:

OffsetValueDescription
00xAASYNC-byte
10x31Destination address (low-byte)
20x77Destination addres (high-byte)
30x10Source address (low-byte)
40x20Source address (high-byte)
50x30Protocol version
60x25Command
70x52Checksum
80x68Data
90x03Data
100x69Data
110x00Data
120x00Data
130x00Data
140x00Data
150x05Frame Septet-Byte
160x26Frame checksum
Command 0x26: Change baud rate

The master sends this telegram to prepare changing the baud rate. The following baudrates are supported:

  • 9600 (default)
  • 19200
  • 38400
  • 57600
  • 115200

An example telegram looks like this:

OffsetValueDescription
00xAASYNC-byte
10x31Destination address (low-byte)
20x77Destination addres (high-byte)
30x10Source address (low-byte)
40x20Source address (high-byte)
50x30Protocol version
60x25Command
70x52Checksum
80x00Baud rate (low-byte)
90x42Baud rate
100x01Baud rate
110x00Baud rate (high-byte)
120x00Unused (0)
130x00Unused (0)
140x00Unused (0)
150x02Frame Septet-Byte
160x3AFrame checksum
Command 0x27: Change slave sub address

The master sends this telegram to change the sub address part of the VBus address of a slave. All addressed slave check whether the product and device identifiers match their own and if it does set their sub address to the value at offset 14.

In VBus protocol version 3.0 slaves only needed to support changing the sub address from 0 to something non-zero. Starting with VBus protocol version 3.1 it is possible to change the sub address multiple times without having to switch power supply off and on again.

An example telegram looks like this:

OffsetValueDescription
00xAASYNC-byte
10x10Destination address (low-byte)
20x20Destination addres (high-byte)
30x31Source address (low-byte)
40x77Source address (high-byte)
50x30Protocol version
60x27Command
70x50Checksum
80x38Product identifier (low-byte)
90x10Product identifier
100x0DProduct identifier (high-byte)
110x36Device identifier (low-byte)
120x46Device identifier
130x23Device identifier (high-byte)
140x01New sub address
150x1AFrame Septet-Byte
160x70Frame checksum
Command 0x08 / 0x28: Request extended data from slave

TBD: for future use in protocol version 3.1

Command 0x69: Slave response with extended data

TBD: for future use in protocol version 3.1

Example telegram flow

The following topology is used in the examples:

  • Slave 1
    • VBus group address: 0x2010
    • Product identifier: 888888
    • Production week: 0
    • Consecutive number: 1023
  • Slave 2
    • VBus group address: 0x2010
    • Product identifier: 888888
    • Production week: 0
    • Consecutive number: 1099
  • Slave 3
    • VBus group address: 0x2020
    • Product identifier: 888889
    • Production week: 0
    • Consecutive number: 1233
  • Slave 4
    • VBus group address: 0x2020
    • Product identifier: 888889
    • Production week: 0
    • Consecutive number: 1333

The time ranges in the column "Time (ms)" represent transmission times for the telegram at 9600 bits per second. The times may vary for other baud rates.

Slave detection (without collision)
Time (ms)MasterSlave 1Slave 2Slave 3Slave 4
(t1 + 0)
...
(t1 + 8,4)
Request slave ID type 1
Master => 0x2010
max. timeout = 1200 ms
t1 + 8,4Timeout = 234 msTimeout = 842 msNot addressedNot addressed
(t1 + 242,4)
...
(t1 + 260,2)
Slave ID response
0x2010 => Master
Cancels timeout
t1 + 260,2Received slave ID
from slave 1
...
(t2 + 0)
...
(t2 + 17,8)
Change sub address
Master => 0x2010
Slave ID 1
t2 + 17,8Received sub adress
...
(t3 + 0)
...
(t3 + 8,4)
Request slave ID type 1
Master => 0x2010
max. timeout = 1200 ms
t3 + 8,4Has sub addressTimeout = 842 msNot addressedNot addressed
(t3 + 850,4)
...
(t3 + 868,2)
Slave ID response
0x2010 => Master
t3 + 868,2Received slave ID
from slave 2
...
(t4 + 0)
...
(t4 + 17,8)
Change sub address
Master => 0x2010
Slave ID 2
t4 + 17,8Received sub adress
...
(t5 + 0)
...
(t5 + 8,4)
Request slave ID type 1
Master => 0x2010
max. timeout = 1200 ms
t5 + 8,4Has sub addressHas sub addressNot addressedNot addressed
t5 + 1208,4Timeout
...
(t6 + 0)
...
(t6 + 8,4)
Request slave ID type 2
Master => 0x2010
max. timeout = 2200 ms
t6 + 8,4Has sub addressHas sub addressNot addressedNot addressed
t6 + 2208,4Timeout
Slave detection (with collision)
Time (ms)MasterSlave 1Slave 2Slave 3Slave 4
(t1 + 0)
...
(t1 + 8,4)
Request slave ID type 1
Master => 0x2020
max. timeout = 1200 ms
t1 + 8,4Not addressedNot addressedTimeout = 314 msTimeout = 314 ms
(t1 + 322,4)
...
(t1 + 340,2)
Slave ID response
0x2020 => Master
Slave ID response
0x2020 => Master
t1 + 340,2Received garbage
from collision
t1 + 1208,4Timeout
...
(t2 + 0)
...
(t2 + 8,4)
Request slave ID type 2
Master => 0x2020
max. timeout = 2200 ms
t2 + 8,4Not addressedNot addressedTimeout = 410 msTimeout = 418 ms
t2 + 418,4
..
t2 + 436,2
Slave ID response
0x2020 => Master
Cancels timeout
t2 + 436,2Received slave ID
from slave 3
...
(t3 + 0)
...
(t3 + 17,8)
Change sub address
Master => 0x2020
Slave ID 3
t3 + 17,8Received sub adress
...
(t4 + 0)
...
(t4 + 8,4)
Request slave ID type 1
Master => 0x2020
max. timeout = 1200 ms
t4 + 8,4Not addressedNot addressedHas sub addressTimeout = 314 ms
(t4 + 322,4)
...
(t4 + 340,2)
Slave ID response
0x2020 => Master
t4 + 340,2Received slave ID
from slave 4
...
(t5 + 0)
...
(t5 + 17,8)
Change sub address
Master => 0x2020
Slave ID 4
t5 + 17,8Received sub adress
...
(t6 + 0)
...
(t6 + 8,4)
Request slave ID type 1
Master => 0x2020
max. timeout = 1200 ms
t6 + 8,4Not addressedNot addressedHas sub addressHas sub address
t6 + 1208,4Timeout
...
(t7 + 0)
...
(t7 + 8,4)
Request slave ID type 2
Master => 0x2020
max. timeout = 2200 ms
t7 + 8,4Not addressedNot addressedHas sub addressHas sub address
t7 + 2208,4Timeout

Appendix A: Schematics

The following schematic shows an example VBus master:

VBus Hardware Master

The following schematics show example VBus slaves:

VBus Hardware SlaveVBus Hardware SlaveVBus Hardware SlaveVBus Hardware Slave

The following schematic shows an example VBus3 slave:

VBus3 Master