New Silex WiFi 802.11ac and BT4.1 module

Published on November 1, 2016

Archived Notice

This article has been archived and may contain broken links, photos and out-of-date information. If you have any questions, please Contact Us.

We are glad to release a new BT & WiFi module based on Qualcomm-Atheros QCA9377-3 chip which supports the latest connectivity standards:

  • 802.11b/g/n: 2.412 - 2.472GHz
  • 802.11a/n/ac: 5.180 - 5.825 GHz
  • Bluetooth 4.1 + HS: 2.402 – 2.480 GHz

This allows to achieve great performances, high transfer rates and more reliable connection in environment polluted with 2.4GHz connections.

Here are some iPerf results:

  • TCP: ~160Mbps
  • UDP: ~220Mbps

You can already find this module on our latest Nitrogen7 platform. This module has the same form-factor as our previous modules and is also FCC-compliant so let us know if you want it on another design.

802.11 ac + BT4.1 for i.MX6 and i.MX7 Single Board Computers 802.11 ac + BT4.1 for i.MX6 and i.MX7 Single Board Computers

For more details on the module capabilities, please visit the product page:

Linux Software support

WiFi Components

Device driver

The Linux driver comes from CodeAurora but has been cloned to our own GitHub repository:

Since its source code is pretty big, we decided to keep it as a module and not integrate it into our base kernel tree. Also, the base driver is meant for 3.10 kernels so it needed to be updated in order to be supported by our recent kernels.

The above driver has been tested against our 3.14.52 and 4.1.15 kernels.

If you want to build this module manually, below are the instructions, assuming that:

  • gcc-arm-linux-gnueabihf toolchain is installed on your system (available for Debian/Ubuntu)
  • The kernel source tree you want to build against is located under 
  • The rootfs you want to install to is located under 
~$ git clone https://github.com/boundarydevices/qcacld-2.0 -b boundary-LNX.LEH.4.2.2.2 ~$ cd qcacld-2.0/ ~/qcacld-2.0$ export ARCH=arm ~/qcacld-2.0$ export CROSS_COMPILE=arm-linux-gnueabihf- ~/qcacld-2.0$ KERNEL_SRC= CONFIG_CLD_HL_SDIO_CORE=y make ~/qcacld-2.0$ KERNEL_SRC= INSTALL_MOD_PATH= make modules_install

That's it, now the wlan.ko file should be located under your target rootfs, with all the modules dependencies updated.

Firmware files

Once the driver is built and ready to go, you need to make sure to copy the firmware files to your target rootfs. Otherwise the driver will fail loading the firmware to the chip and therefore no wlan interface will show up.

Since this WiFi/BT combo just got released publicly, the licensing of the firmware files doesn't allow us to host those files to a public git repository. So just like the NXP proprietary binaries in our Android releases, this repository is hosted in our linode server which requires every client to send its SSH key before having the access granted.

Once the key has been sent, you should receive a confirmation e-mail saying it has been properly added to our server. Then you can freely access our linode repositories and install the firmware files.

~$ git clone git@linode.boundarydevices.com:qca-firmware.git ~$ cd qca-firmware ~/qca-firmware$ DESTDIR= make install

User-space programs

The driver runs fine with standard wpa_supplicant and hostapd, no modification required here.

Bluetooth components

Device driver

The BT part of the QCA9377-3 is fully compliant with the HCI H4 protocol over UART so no further driver is required, support is already present in all our kernels.

Firmware files

The BT firmware files are part of the same repository as the WiFi one, see previous section.

User-space programs

This is where it gets more complicated for Bluetooth support for QCA9377-3. Indeed some patches need to be applied to BlueZ5 in order to support the chip.

The reason is that it has its own way of loading the firmware which isn't part of upstream BlueZ5. Once again, a CodeAurora repository gives the necessary mechanism:

You can see the generated patch in our Yocto layer:

OS integration

Ubuntu/Debian

It is pretty easy, all the work has been done for you, just need to install the Silex packages:

$ sudo apt update $ sudo apt upgrade $ sudo apt install qcacld-module qca-firmware

The upgrade takes care of updating the BlueZ5 package so it contains the necessary hciattach modifications to load the firmware.

Then the two QCA packages are in charges of installing all the firmware files and the WiFi driver.

Yocto

Since the firmware files are not publicly available, the recipes are located in our meta-boundary:

In your local.conf file, add the following lines in order to add Silex support to your image:

IMAGE_INSTALL_append = " kernel-module-qcacld linux-firmware-bdsdmac-bt linux-firmware-bdsdmac-wlan bluez5 "

The firmware files are now publicly available. For pyro and later, it can be found in meta-boundary/recipes-sato/images/boundary-eval-image.bb

CORE_IMAGE_BASE_INSTALL += "kernel-module-qcacld linux-firmware-bdsdmac bluez5 "

Android

Support has been added to our Nitrogen6x Android device for our Marshmallow release.

If you want to build Android for this module, first refer to our Android Getting Started Guide but issue the following command before building the image:

~/myandroid$ sed -i 's/TI/QCA/' device/boundary/nitrogen6x/wifi_config.mk

Then in U-Boot you need to enable the proper rfkill node:

=> setenv cmd_custom 'fdt set bt_kim status disabled; fdt set bt_rfkill status okay' => savee