Difference Between Half-Duplex vs Full-Duplex

Within embedded systems or networks, devices communicate with one another through various modes of data transmission. There is often two-way communication between devices, meaning they both are capable of sending and receiving data. This is referred to as a duplex communication system. Depending on the communication protocol and application, devices are capable of sending data in half-duplex mode or full-duplex mode.

In this blog, we will discuss the differences between half-duplex and full-duplex communication and some examples of each.

Duplex Communication

A duplex communication system uses a bi-directional method of transmitting signals that allows for devices on a network or bus to communicate with each other in opposite directions. This is in contrast to another form of communication known as simplex communication. With simplex, only one signal is transmitted and it can only travel in one direction. The sender can only send the data, and the receiver can only receive the data; it cannot reply to the sender. An example of this can be the relationship between a keyboard and monitor. The keyboard can send input to the monitor where the monitor receives the input and displays it on the screen. The monitor cannot rely back the keyboard.

With duplex communication, both nodes, or devices, in a system are capable of sending and receiving data, either simultaneously or taking turns one at a time. This is categorized as half-duplex or full-duplex communication.

What is Half-Duplex?

Half-duplex means that between two devices, only one device is capable of transmitting and receiving data on a network or bus at one time. Half-duplex is bi-directional, meaning that data can be sent between devices both ways, but the data can only go in one direction at a time. Once one device has finished transmitting its data, another device can then send data in response.

With half-duplex, there is one communication channel that is used to transmit and receive data. Both devices are not able to send and receive data at the same time, as this would result in a collision on the bus or network, causing transmission errors or data loss.

Half-Duplex Example

A common example of half-duplex communication is the use of walkie-talkies. Both people at both ends of the walkie-talkie can speak to one another, but they have to do so one at a time. They are not able to speak concurrently. Once one person at one end has spoken, they may end their message with “over”, signifying the message is complete and the other is free to respond. The same principle applies to half-duplex communication mode.

Man in hardhat using walkie-walkie

What is Full-Duplex?

Full-duplex, on the other hand, means that both devices on a bus or network can transmit and receive data simultaneously. Full-duplex is also bi-directional where it is capable of sending data between devices both ways, but in this case, it can occur at the same time.

Full-duplex uses multiple communication channels where the sender and receiver can transmit data and also receive the incoming data from the other device. With this mode of transmission, it essentially doubles the throughput capacity without the possibility of a data collision, so transmission occurs much more quickly.

Full-Duplex Example

A common example for full-duplex communication is the use of phones. In a telephone conversation, two people can communicate to each other and both are able to speak and listen at the same time.

Examples of Half-Duplex and Full-Duplex in Communication Protocols

Full-Duplex SPI Protocol

The SPI protocol is an example of a communication protocol that operates by default as full-duplex. SPI operates using four signals, including the clock (SCLK), master output/slave input (MOSI), master input/slave output (MISO), slave select (SS).

Single SPI bus with 3 slaves

Through the MOSI and MISO lines, data can be sent and received at the same time between master and slave devices where the data is simultaneously transmitted (shifted out serially onto the MOSI bus) and received (the data is sampled and read in on the MISO bus). The serial clock (SLCK) synchronizes the shifting and sampling of the data.

During each SPI clock cycle, the master sends a bit on the MOSI line and the slave reads it, while the slave sends a bit on the MISO line and the master reads it. Data is always transferred in both directions in SPI, but an SPI device interested in only transmitting data can choose to ignore the received bytes (which are generally dummy bytes in this case).

Each device has its own SS line. The master pulls low on a slave's SS line to select a device for communication.

While SPI by default is full-duplex, there are some variants of SPI that are defined at half-duplex. These include Dual and Quad SPI.

Half-Duplex I2C Protocol

The I2C protocol is an example of a communication protocol that inherently is half-duplex. I2C is a communication protocol that uses two wires: one wire for the data (SDA) and other wire for the clock (SCL). There is a master (or multiple masters) and slave devices connected to each other on the bus via these wires. I2C is bidirectional, meaning data is able to be transmitted and received between master and slave devices.

However, with I2C, the communication between master and slave is not simultaneous. Instead, the master device initiates communication, controls the clock, and terminates the communication. In order for the slave to communicate, the master first must address the slave and request a response. Due to this operation, I2C inherently operates as half-duplex. One device, either the master or slave, transmits data and receives data at one time via the SDA line, and vice versa.

Debugging and Development Tools for Communication Protocols

Total Phase offers debugging and development tools to gain insight into various communication protocols within an embedded system. These tools include host adapters that allow users to emulate master and slave devices to test system performance or quickly program memory devices, as well as protocol analyzers that provide real-time insight into the bus to verify correct communication or pinpoint any errors.

I2C and SPI

For I2C and SPI systems, Total Phase offers various I2C and SPI host adapters fit for different project requirements including the general-purpose Aardvark I2C/SPI Host Adapter, the rapid-programming Cheetah SPI Host Adapter, and the advanced Promira Serial Platform. The Beagle I2C/SPI Protocol Analyzer allows users to capture, monitor, and debug I2C and SPI traffic being sent and received from various devices.

Learn more about the I2C and SPI tools and their different features and capabilities here: I2C/SPI Product Guide

USB

For USB systems, Total Phase offers different models of protocol analyzers to monitor a range of USB bus speeds, including the Beagle USB 12 Protocol Analyzer, the Beagle USB 480 Protocol Analyzer, the Beagle USB 480 Power Protocol Analyzer, and the Beagle USB 5000 v2 SuperSpeed Protocol Analyzer.

These protocol analyzers provide real-time insight into the USB bus, with some offering insight into VBUS and triggers for advanced debugging.

Learn more about our line of USB tools and their features/capabilities here: USB Analyzer Product Guide

CAN

Total Phase offers a CAN interface called the Komodo CAN Duo interface with two customizable channels to allow users to actively transmit and monitor CAN data up to 1 Mbps. Learn more about this tool here: Komodo CAN Duo Interface

eSPI

Total Phase offers an eSPI Analyzer that allows users to monitor eSPI communication between a master and slaves on the bus at clock speeds up to 66 MHz. It also supports single, dual, and quad I/O modes. Learn more about this tool here: eSPI Analysis Application on the Promira Serial Platform