Wifi connection troubles solved; why does my "fix" work?

Solution 1:

Wifi connection troubles solved, why does my "fix" work?

When bt_coex_active is enabled it prevents bluetooth/wireless interference. When it is disabled it will allow increased bluetooth/wireless interference.

  • bt_coex_active=1 (true) prevents bluetooth/wireless interference.
  • bt_coex_active=0 (false) allows increased bluetooth/wireless interference.

The way the feature works is that when it is on, the wlan transceiver will avoid transmitting at the same time as the bluetooth transciever.

In some buggy implementations, it thinks the Bluetooth is transmitting all the time thus "muting" the WLAN completely, so turning it off will allow WLAN to work again.


802.11 Bluetooth coexistence

An 802.11 device and Bluetooth can interfere with each other when the 802.11 device operates on the 2.4 GHz band. All Bluetooth devices operate at the 2.4 GHz band. This section documents the technical details regarding the causes of interferences and solutions implemented in drivers, the 802.11 stack, and possible future enhancements.

...

Interference

Each 802.11 channel then equals to 20 Bluetooth channels. When communication is enabled on an Bluetooth device you will get interference when the Bluetooth device hops on to any of the 20 Bluetooth channels equivalent to your 802.11 channel. Even if a Bluetooth device hops at the max allowed frequency rate of 1600 frequency hops per second there are only 79 channels available so at this rate each channel will be used around 20 times in a second.

Source 802.11 Bluetooth coexistence


Source code extract:

/*
 * set bt_coex_active to true, uCode will do kill/defer
 * every time the priority line is asserted (BT is sending signals on the
 * priority line in the PCIx).
 * set bt_coex_active to false, uCode will ignore the BT activity and
 * perform the normal operation
 *
 * User might experience transmit issue on some platform due to WiFi/BT
 * co-exist problem. The possible behaviors are:
 *   Able to scan and finding all the available AP
 *   Not able to associate with any AP
 * On those platforms, WiFi communication can be restored by set
 * "bt_coex_active" module parameter to "false"
 *
 * default: bt_coex_active = true (BT_COEX_ENABLE)
 */

Source: iwl-core.c


Further reading

  • Bluetooth coexistence notes