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:
| PHY | Bit rate | Minimum receiver sensitivity |
|---|---|---|
| LE 2M | 2 Mb/s | -70 dBm or better |
| LE 1M | 1 Mb/s | -70 dBm or better |
| LE Coded, S=2 | 500 kb/s | -75 dBm or better |
| LE Coded, S=8 | 125 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)onAdvertisingSetParameters.Builder. - To scan for it, build
ScanSettingswithsetLegacy(false)andsetPhy(BluetoothDevice.PHY_LE_CODED). Android documents that selecting an unsupported PHY makes the scan fail to start. - On a connection,
BluetoothGatt.setPreferredPhytakesPHY_LE_CODED_MASKand a coding option,PHY_OPTION_S2orPHY_OPTION_S8. Android calls this a recommendation: the controller can override it, andonPhyUpdatereports 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.