Bluetooth Low Energy

What is LE Coded PHY (Bluetooth long range)?

LE Coded PHY is an optional Bluetooth Low Energy physical layer, introduced in Bluetooth Core 5.0, that adds forward error correction so a receiver can decode weaker signals, which extends range. It carries 500 kb/s with S=2 coding or 125 kb/s with S=8, against 1 Mb/s for the standard LE 1M PHY, so it trades data rate for distance.

Learning objectives

After reading this article you will be able to:

  • Explain how forward error correction in LE Coded PHY extends range
  • Compare the S=2 and S=8 coding schemes on bit rate and receiver sensitivity
  • Identify the costs of the coded PHY in throughput, airtime and compatibility

What a PHY is, and what “coded” adds

The physical layer, or PHY, is the bottom of the Bluetooth stack. The Bluetooth SIG describes it as the modulation scheme and other techniques a radio uses to send data, including how channels are used and whether error correction is applied. Bluetooth Low Energy has more than one PHY, and two connected devices can change PHY during a connection.

The Core Specification defines them by symbol rate. The mandatory LE 1M PHY sends 1 megasymbol per second with one symbol per bit, for 1 Mb/s. The optional LE 2M PHY doubles the symbol rate to reach 2 Mb/s. LE Coded PHY keeps the 1 megasymbol rate of LE 1M but adds error correction coding, so several symbols carry each bit of data. It is optional too, so both devices must implement it.

How coding buys range

Range is less about how far radio energy travels than about how far away a receiver can still decode it correctly. As distance grows, the signal gets weaker compared with background noise, and more bits are decoded wrongly. The Bluetooth SIG’s explainer on Bluetooth 5 frames the goal this way: reach the same bit error rate at a lower signal-to-noise ratio, which means improving receiver sensitivity rather than raising transmit power.

LE Coded PHY does this with forward error correction (FEC). The transmitter adds redundant bits from a convolutional encoder, and the receiver uses them to correct some errors itself instead of needing a retransmission. A pattern mapper then spreads each coded bit over more symbols. Coded packets also begin with a longer preamble that is not itself coded, which helps the receiver lock on to a weak signal.

There are two coding schemes, S=2 and S=8. The Bluetooth SIG’s technology overview lists the rates and the minimum receiver sensitivity the specification requires for each PHY:

PHYBit rateMinimum receiver sensitivity
LE 2M2 Mb/s-70 dBm or better
LE 1M1 Mb/s-70 dBm or better
LE Coded, S=2500 kb/s-75 dBm or better
LE Coded, S=8125 kb/s-82 dBm or better

A more negative sensitivity means the receiver can work with a weaker signal. Real chips usually beat the minimum: the SIG’s range page says average implementations of the 125K coded PHY achieve a receiver sensitivity of -103 dBm. In its Bluetooth 5 explainer, the SIG describes S=2 as approximately doubling range and S=8 as approximately quadrupling it compared with Bluetooth 4.0, without more transmit power. Read that as a like-for-like comparison, not a figure for your devices.

What it costs

The redundancy is not free. With S=8, each data bit becomes eight symbols on air instead of one, at the same symbol rate, so the radio stays on much longer to send the same bytes. That has three consequences:

  • Lower throughput. 125 kb/s is the raw bit rate before protocol overhead, so what an application sees is lower still. What throughput does BLE get in practice? covers the rest of the overhead.
  • More airtime per message. Longer packets mean more time transmitting and receiving each byte, and more time occupying the channel. Airtime is a large part of how much battery BLE uses.
  • Compatibility. Not every chipset supports it, and on Android the coded PHY is only available for extended advertising and scanning. Legacy advertising, the format devices built for Bluetooth 4.2 and earlier understand, cannot use it, so a device that advertises only on the coded PHY is invisible to older scanners.

Using it on Android

Android added the coded PHY APIs in API level 26:

  • BluetoothAdapter.isLeCodedPhySupported() reports whether the chipset supports it. Check it first.
  • To advertise on it, use an advertising set with legacy mode off and call setPrimaryPhy(BluetoothDevice.PHY_LE_CODED) on AdvertisingSetParameters.Builder.
  • To scan for it, build ScanSettings with setLegacy(false) and setPhy(BluetoothDevice.PHY_LE_CODED). Android documents that selecting an unsupported PHY makes the scan fail to start.
  • On a connection, BluetoothGatt.setPreferredPhy takes PHY_LE_CODED_MASK and a coding option, PHY_OPTION_S2 or PHY_OPTION_S8. Android calls this a recommendation: the controller can override it, and onPhyUpdate reports the outcome.

Other platforms differ in what they expose to apps, so confirm that your target OS lets an app choose the PHY before designing around it.

When to use it

The coded PHY suits small, infrequent messages over distance: a sensor at the far end of a building or field, a tracker reporting a position, a device that must be found at the edge of range. It is a poor fit for bulk transfer, where the higher bit rate of LE 2M matters more.

Many designs switch between PHYs. The SIG’s explainer notes that the host can pick the transmit and receive PHY independently, for example moving to 2 Ms/s when high data rates are needed and to long range when distance matters. A common pattern is to find and connect on whichever PHY reaches, then move to a faster one while the devices are close.

For phones passing messages across a mesh, longer links mean fewer hops, but each hop carries less data per second. Multi-hop relay and long-range PHYs are two complementary ways to cover distance, and how far BLE reaches depends on far more than the PHY alone.

Frequently asked questions

Is LE Coded PHY the same as Bluetooth 5 long range?

Yes. "Long range" is the common name for the LE Coded PHY that Bluetooth Core 5.0 introduced, and the Bluetooth SIG's own explainer calls it the long-range PHY. The distance you get still depends on transmit power, antennas and surroundings.

Do both devices need to support LE Coded PHY?

Yes. It is optional in the Core Specification, so an advertisement or connection on the coded PHY only works when the chipsets on both sides support it. On Android, BluetoothAdapter.isLeCodedPhySupported() reports whether the local chipset does.

Sources

Build it with Offline Protocol

The Offline Protocol mesh SDK uses Bluetooth LE as its default phone transport. Its transport and routing docs note that range and capacity depend on the radios, environment and workload, and describe multi-hop forwarding for reaching past a single link.

Read the transport and routing docs