Using 2M and LE Coded PHY
Bluetooth 5.0 introduces three new PHYs beside of the default 1M symbol rate:
- 2M PHY which ensures higher data throughput and
- A new long range PHY (LE Coded PHY) with 125kbps and 500kbps coding which gives range gains of 1.5-2x with improved sensitivity of 4 to 6dB.
The LE Coded PHY uses 1Mbit PHY but payload is coded at 125kbps or 500kbps. It also adds Forward Error Correction and Pattern Mapper.
Note: 2M and LE Coded PHY is only supported on specific devices.
Changing to 2M or LE Coded PHY can be requested from either slave or master device using the command gecko_cmd_le_connection_set_preferred_phy(uint8 connection, uint8 preferred_phy, uint8 accepted_phy), where the
preferred_phy value maps as follows:
- 0x01: 1M PHY
- 0x02: 2M PHY
- 0x04: 125k Coded PHY (S=8)
- 0x08: 500k Coded PHY (S=2)
accepted_phy signifies the accepted PHYs in remotely-initiated PHY update requests and its value maps as follows:
- 0x01: 1M PHY
- 0x02: 2M PHY
- 0x04: Coded PHY
- 0xff: Any PHYs (default)
Multiple PHYs can be selected both as preferred PHY and as accepted PHY. The connected devices will negotiate which PHY to use based on this information.
For compatibility reasons, the default PHY is always 1Mbit on a connection. Also by default this PHY should be used for advertising, as well. After the connection is formed, either side (master or slave) can request a new PHY to be used. Once the PHY changes, it is reported in a le_connection_phy_status event.
Note: It is also possible to scan and advertise on LE Coded PHY and therefore the connections can also be established using coded PHY. See Advertising and Scanning with LE Coded PHY.
Note: When a new PHY is requested it will take a minimum of 6 connection intervals for the device to switch to the new PHY.
le_connection_phy_status will be raised on both devices in the following situations (if the new PHY request is accepted by the receiving device):
- Switching to/from LE Coded PHY from/to another PHY (1Mbit/2Mbit)
- Switching from 1Mbit to 2Mbit PHY and vice-versa
le_connection_phy_status will only be raised on the requesting device when:
- The new PHY request is not accepted (e.g., the receiving device doesn’t support it)
- Switching LE Coded PHY coding (from S=2 to S=8 and vice-versa) when LE Coded PHY is already in use
- The reason is that changing the coding is not negotiated over-the-air, it’s done only locally on the requesting device and the receiving device continues using the same coding. At the RX stage the radio detects the coding based on the packet preamble and it can use a different coding for the TX stage.
An additional note is that the default coding for LE Coded PHY is S=8 (125kbit). This means that when an EFR32BG13 accepts a PHY change request to LE Coded PHY it will default to S=8. It is up for the application to change the coding if desired and the new coding will then be used if the PHY is again changed to 1Mbit/2Mbit and then back to LE Coded PHY.
Here are a few examples of changing between the PHYs using 2 EFR32xG13 devices in NCP mode and controlled with BGTool.
Changing to LE Coded PHY (S=8, 125kbit)
Changing the Coding While in LE Coded PHY
As explained earlier in this article changing the coding is not negotiated over-the-air between the devices and for that reason the event
le_connection_phy_status is only raised on the requesting side and very shortly after the command is sent. The receiving device will continue using the same coding.
Attempted Change to LE Coded PHY
In the example below a new PHY request is attempted but the other device is an EFR32BG1 which only supports 1Mbit PHY so the event
le_connection_phy_status is immediately raised on the requesting device to notify that the PHY has not been changed and no event is raised on the receiving device.
Impact on Energy Consumption
Using 2M PHY will lead to smaller current consumption due to shorter RX/TX periods, while using LE Coded PHY will lead to higher current consumption due to the longer RX/TX periods. The next images show the current profile of a notification packet with 20 bytes of data payload on all the PHYs. The red blocks are highlighting the duration of the entire wake-up period and the average current consumption for said period.
These measurements were made from the slave device (RX precedes TX) with TX Power of 0dBm and the images are sorted from shortest to longest RX/TX periods: 2Mbit, 1Mbit, LE Coded S=2 (500kpbs) and LE Coded S=8 (125kpbs).
Note: When using LE Coded PHY the packet header is always coded with S=8 but the payload can be S=2 or S=8 coded and that is indicated by a bit in the header. This means that empty packets will not have a significant difference between S=8 and S=2 coding in terms of TX duration.
LE Coded PHY (S=2, 500kbps)
LE Coded PHY (S=8, 125kbps)