Bluetooth LE scan interval and scan window timing diagram

Bluetooth LE scan parameters tell a Bluetooth module how to execute Bluetooth LE scanning. They affect both scanning speed and power consumption during reception of Bluetooth LE advertisements. There are three parameters: scan interval, scan window, and scanning mode.


Scan parameters

Scan interval

The duration of time between two consecutive times the scanner wakes up to receive advertising messages. This parameter is defined in units of 0.625 ms and has a range between 4 and 16384 — that is, from 2.5 ms to 10.24 s. The default is 189, equivalent to 118.125 ms.

Scan window

Defines how long to scan at each interval. This parameter is also defined in units of 0.625 ms and has the same range as the interval — 2.5 ms to 10.24 s. The default is 29, equivalent to 18.125 ms. The scan window must be equal to or smaller than the scan interval.

If the scan window exceeds the scan interval, the framework rejects the configuration before the scan starts, and the watcher fails to start. Applications should validate the pair before assigning it — a good sanity check is 0 < window ≤ interval ≤ 16384.

Scanning mode

Defines how a BLE receiver collects information about advertising Bluetooth LE devices. Two modes are available:

  • Active — after an advertisement is received, the radio sends a scan request, and the advertiser responds with information such as the friendly name and supported profiles.
  • Passive — the radio only listens to other devices' advertisements. When an advertisement is detected, the radio reports the discovered device and all advertisement packets without sending a scan request.

Duty cycle and detection

Scan duty cycle

The relationship between scan window and scan interval is called the duty cycle:

duty cycle = scan window / scan interval × 100%

A scan window of 50 with a scan interval of 100 gives a duty cycle of 50% — the radio listens half the time and sleeps the other half. A window of 10 with an interval of 100 gives 10% — ten times less power, but also ten times less chance of catching a single advertisement.

Two consequences follow:

  • When scan window = scan interval, the scanner is always listening (100% duty). This catches advertisements reliably but draws maximum power.
  • When scan window << scan interval, the scanner spends most of its time asleep. Power drops, but the worst-case detection time grows — an advertisement that only broadcasts once may be missed entirely.

Choosing values that catch the advertisement

A scanner listens on one advertising channel at a time; the peripheral transmits on all three in sequence. To reliably catch every advertising event, the scan window should be at least three times the advertising interval of the peripheral:

scan window ≥ 3 × advertising interval

For background on advertising channels and the advertising interval itself, see Bluetooth LE Beacon Formats.

Example: an iBeacon advertising every 100 ms needs a scan window of at least 300 ms. If the peripheral advertises every 1000 ms, the scan window must be at least 3000 ms. Otherwise a scan that happens to sleep through the packet's channel misses the advertisement entirely.

Common presets

The following combinations cover most practical scenarios. All values are in units of 0.625 ms — for example, 100 = 62.5 ms.

Use case Scan interval Scan window Duty cycle Mode
Near-instant detection 100 100 100% Active
Balanced 100 50 50% Active
Low power 1000 50 5% Passive
Background monitoring 10000 50 0.5% Passive

Support in Bluetooth Framework

Microsoft added the ability to set scan parameters only in recent Windows 11 versions. The Bluetooth Framework provides a unique feature that allows applications to set Bluetooth LE scan parameters even on Windows 10 using the standard Microsoft Bluetooth driver. The BLED112 dongle also supports this, but the ability to do so with native Microsoft drivers is what makes the feature valuable.

Microsoft removed the widely used workaround that allowed setting scan parameters in Windows 11 24H2. The Bluetooth Framework can still do it on that Windows version.

In Windows versions newer than Windows 11 24H2, Microsoft added a documented way to set Bluetooth LE scan parameters, but only two predefined settings are available: Coexistence Optimized and Low Latency. The Bluetooth Framework removes this limitation and allows any custom values.

The framework defines four scan parameter types:

  • Default — the framework does not modify the parameters and lets the system choose.
  • Coexistence Optimized — the framework applies the system's predefined coexistence-optimized parameters.
  • Low Latency — the framework applies the system's predefined low-latency parameters.
  • Custom — scan interval and scan window can be set to any custom values.

To learn how to set Bluetooth LE scan parameters for the wclBluetoothLeBeaconWatcher class, refer to the Beacons sample application in the Bluetooth Framework package.


Configuring scan parameters

The snippet shows how to set the scan parameter type, scan interval, scan window, and scanning mode before starting the scan. This is taken directly from the Beacons sample. For the full watcher start and stop logic, see Bluetooth LE Advertisement.

BeaconWatcher.ScanParametersType := ptCustom;
BeaconWatcher.ScanInterval := 100;
BeaconWatcher.ScanWindow := 50;
BeaconWatcher.ScanningMode := smActive;
BeaconWatcher->ScanParametersType = ptCustom;
BeaconWatcher->ScanInterval = 100;
BeaconWatcher->ScanWindow = 50;
BeaconWatcher->ScanningMode = smActive;
BeaconWatcher.ScanParametersType =
    wclBluetoothLeScanParametersType.ptCustom;
BeaconWatcher.ScanInterval = 100;
BeaconWatcher.ScanWindow = 50;
BeaconWatcher.ScanningMode =
    wclBluetoothLeScanningMode.smActive;
BeaconWatcher.ScanParametersType =
    wclBluetoothLeScanParametersType.ptCustom
BeaconWatcher.ScanInterval = 100
BeaconWatcher.ScanWindow = 50
BeaconWatcher.ScanningMode =
    wclBluetoothLeScanningMode.smActive
BeaconWatcher.ScanParametersType = ptCustom;
BeaconWatcher.ScanInterval = 100;
BeaconWatcher.ScanWindow = 50;
BeaconWatcher.ScanningMode = smActive;

Frequently asked questions

What are Bluetooth LE scan parameters?
They define how a BLE module scans for advertisements and include scan interval, scan window, and scanning mode (active or passive).
Can I set custom scan parameters on Windows 10?
Yes. The Bluetooth Framework provides a unique feature that allows setting custom BLE scan parameters even on Windows 10 using the standard Microsoft Bluetooth driver.
Does Bluetooth Framework still work with Windows 11 24H2 scan restrictions?
Yes. Microsoft removed the old workaround, but the Bluetooth Framework can still apply custom scan parameters, bypassing the limitation.
What is the scan duty cycle?
The duty cycle is the ratio of scan window to scan interval, expressed as a percentage. A window of 50 with an interval of 100 gives 50% duty cycle — the radio listens half the time and sleeps the other half. Higher duty cycle improves detection but drains more power.
Why does my scanner miss BLE advertisements?
Most commonly because the scan window is too short relative to the advertising interval of the target device. To reliably catch an advertisement, the scan window should be at least three times the advertising interval — since the peripheral transmits on three channels in sequence and the scanner listens on one at a time.