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.
For more details on the module capabilities, please visit the product page:
Linux Software support
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.
If you want to build this module manually, below are the instructions, assuming that:
gcc-arm-linux-gnueabihftoolchain 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.126.96.36.199 ~$ cd qcacld-2.0/ ~/qcacld-2.0$ export ARCH=arm ~/qcacld-2.0$ export CROSS_COMPILE=arm-linux-gnueabihf- ~/qcacld-2.0$ KERNEL_SRC=<kernel_path> CONFIG_CLD_HL_SDIO_CORE=y make ~/qcacld-2.0$ KERNEL_SRC=<kernel_path> INSTALL_MOD_PATH=<rootfs_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.
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.
- Note that if you already registered your key for Android release, no need to do it again
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 firstname.lastname@example.org:qca-firmware.git ~$ cd qca-firmware ~/qca-firmware$ DESTDIR=<rootfs_path> make install
The driver runs fine with standard
hostapd, no modification required here.
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.
The BT firmware files are part of the same repository as the WiFi one, see previous section.
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:
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.
Since the firmware files are not publicly available, the recipes are located in our
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 "
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