Tutorials - Sterling LWB5+

Introduction

This guide covers tutorials for specific applications with the Sterling-LWB5+ module.

More documentation, ordering information, and resources related to the Sterling-LWB5+ can be found on our website:

https://ezurio.com/sterling-lwb5-plus

LWB5+ Dongle i.MX 8M Plus Yocto Integration

This tutorial will show you how to integrate the LWB5+ Dongle on an i.MX 8M Plus Yocto platform. To watch video tutorial, click here.

Required Tools

  • LWB5+ Dongle (Part No. 450-00137)
  • i.MX 8M Plus EVK (Part No. 8MPLUSLPD4-EVK)
  • Linux PC with a Yocto Build Environment. As a prerequisite for this tutorial, we are going to assume that you know how to setup a Yocto build environment. This is covered very well in NXP's documentation ( i.e. see i.MX_Yocto_Project_User's_Guide.pdf, Rev. L5.4.70_2.3.0 — 31 December 2020 for details on how to install the required host packages and the repo utility, and how to setup git); so we will not cover it here. We will focus on how to add Ezurio's external layer into a Yocto build.

Setup

We will flash our image into a micro SD card. If you prefer, you can use the onboard eMMC, but for this tutorial. we will boot from a micro SD card. The LWB5+ Dongle will plug into J7. Power will be applied via J5, and J23 will be used to connect to a serial terminal (115200, N, 8, 1). If the build works, the drivers will automatically load on power up. We will then connect to an AP and do a ping to demonstrate that Wi-Fi works. For Bluetooth, we will do a scan to show that the module can detect devices that are discoverable or advertising.

  1. Download the i.MX Yocto Project Community BSP recipe layers

    Reminder: Prior to proceeding, make sure the required host packages and repo utility are installed. Git must also be configured properly. Refer to i.MX_Yocto_Project_User's_Guide.pdf, Rev. L5.4.70_2.3.0 — 31 December 2020 for details.

    mkdir ~/projects/imx8mp
    cd ~/projects/imx8mp
    repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-kirkstone -m imx-5.15.32-2.0.0.xml && repo sync 
  2. Setup build configuration

    DISTRO=fsl-imx-wayland MACHINE=imx8mpevk source imx-setup-release.sh -b build-imx8p-wayland 
  3. Modify the ~/projects/imx8mp/build-imx8p-wayland/conf/bblayers.conf file. Add the line below to the file.

    BBLAYERS += "${BSPDIR}/sources/meta-summit-radio/meta-summit-radio" 

    Note: for Yocto projects 3.3 (Hardknott) and earlier the line you add would be

    BBLAYERS += "${BSPDIR}/sources/meta-summit-radio/meta-summit-radio-pre-3.4"
  4. Modify the ~/projects/imx8mp/build-imx8p-wayland/conf/local.conf file. Add the lines below to the file.

    PREFERRED_PROVIDER_wpa-supplicant = "sterling-supplicant" 
    PREFERRED_PROVIDER_wpa-supplicant-cli = "sterling-supplicant" 
    PREFERRED_PROVIDER_wpa-supplicant-passphrase = "sterling-supplicant" 
    
    BBMASK += " \ 
        meta-summit-radio/meta-summit-radio/recipes-packages/openssl \ 
        meta-summit-radio/meta-summit-radio/recipes-packages/.*/.*openssl10.* \ 
        "
    
    PREFERRED_RPROVIDER_wireless-regdb-static = "wireless-regdb" 
    LWB_REGDOMAIN = "US" 

    Note: for Yocto projects 3.3 (Hardknott) and earlier you would add:

    PREFERRED_PROVIDER_wpa-supplicant = "sterling-supplicant" 
    PREFERRED_PROVIDER_wpa-supplicant-cli = "sterling-supplicant" 
    PREFERRED_PROVIDER_wpa-supplicant-passphrase = "sterling-supplicant" 
    
    BBMASK += " \ 
        meta-summit-radio/meta-summit-radio-pre-3.4/recipes-packages/openssl \ 
        meta-summit-radio/meta-summit-radio-pre-3.4/recipes-packages/.*/.*openssl10.* \ 
        "
    
    PREFERRED_RPROVIDER_wireless-regdb-static = "wireless-regdb" 
    LWB_REGDOMAIN = "US" 
  5. Clone the meta-summit-radio layer into ~/projects/imx8mp/sources directory

    cd ~/projects/imx8mp/sources
    git clone https://github.com/Ezurio/meta-summit-radio
  6. Edit the ~/projects/imx8mp/sources/meta-summit-radio/meta-summit-radio/recipes-packages/images/sample-image-cp-lwb5plus.bb recipe by replacing lwb5plus-sdio-div-firmware with lwb5plus-usb-sa-firmware and adding laird-networkmanager. Then save it as mylwb5p.bb. A snippet of the saved file is shown below.

    IMAGE_INSTALL += "\ 
    iproute2 \ 
    rng-tools \ 
    ca-certificates \ 
    tzdata \ 
    alsa-utils \ 
    htop \ 
    ethtool \ 
    iperf3 \ 
    tcpdump \ 
    iw \ 
    kernel-module-lwb5p-backports-summit \ 
    lwb5plus-usb-sa-firmware \ 
    sterling-supplicant-lwb \ 
    summit-networkmanager-st60 \ 
    " 
  7. Next go to the build directory and run menuconfig to configure the Kernel.

    cd ../build-imx8p-wayland 
    bitbake -c menuconfig virtual/kernel
    
    • Disable Wireless LAN drivers. Navigate to Device Drivers -> Network device support and disable Wireless LAN .

    • Disable Bluetooth subsystem support and Wireless. Navigate to Networking support and disable Bluetooth subsystem support and Wireless.

    • Save your changes and exit menuconfig

  8. Build the image

     bitbake mylwb5p
  9. Flash image into SD card. Note: for this particular tutorial the SD card is on /dev/mmcblk0. It may be different for your setup; so make sure you change the command below per your setup.

     bzip2 -dc ~/projects/imx8mp/build-imx8p-wayland/tmp/deploy/images/imx8mpevk/mylwb5p-imx8mpevk.wic.bz2 | sudo dd bs=512K iflag=fullblock oflag=direct status=progress conv=fsync of=/dev/mmcblk0
    
     sync
  10. Connect EVK to Serial Terminal via J23 (115200, N, 8, 1). Note for this tutorial we use /dev/ttyUSB2 port to connect. Your Linux PC might use a different port. Boot device and login as root.

  11. Test Wi-Fi. Create a connection profile with nmcli. Then connect to the AP and ping a website.

      nmcli con add con-name "YourProfile" ifname wlan0 type wifi ssid "YourAP" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "YourPassword" 
      nmcli c u "YourProfile" 
      ping www.google.com

  12. Test Bluetooth. Launch bluetoothctl. Then on the bluetoothctl prompt, type power on and then scan on.

References

Testing A2DP with LWB5+ Dongle on i.MX 8M Plus using Yocto

This tutorial will show you how to integrate the LWB5+ Dongle on an i.MX 8M Plus DVK using Yocto with pulseAudio included. You can test A2DP by streaming music from a smartphone to LWB5+ on imx8 board or vice versa.

Required Tools

  • LWB5+ Dongle (Part No. 450-00137)
  • i.MX 8M Plus EVK (Part No. 8MPLUSLPD4-EVK)
  • Linux PC with a Yocto Build Environment. As a prerequisite for this tutorial, we are going to assume that you know how to setup a Yocto build environment. This is covered very well in NXP's documentation ( i.e. see i.MX_Yocto_Project_User's_Guide.pdf, Rev. L5.4.70_2.3.0 --- 31 December 2020 for details on how to install the required host packages and the repo utility, and how to setup git); so we will not cover it here. We will focus on how to add Ezurio's external layer into a Yocto build.

Setup

We will flash our image into a micro SD card. If you prefer, you can use the onboard eMMC, but for this tutorial. we will boot from a micro SD card. The LWB5+ Dongle will plug into J7. Power will be applied via J5, and J23 will be used to connect to a serial terminal (115200, N, 8, 1). If the build works, the drivers will automatically load on power up. We will then connect to an AP and do a ping to demonstrate that Wi-Fi works. Then, we will download audio file and test audio locally on imx8 first with pulseaudio. After that, we will connect to a smartphone via Bluetooth and stream music from a phone to LWB5+ so that we can hear it with earphone from imx8 plus EVK.

image

  1. Download the i.MX Yocto Project Community BSP recipe layers

    Reminder: Prior to proceeding, make sure the required host packages and repo utility are installed. Git must also be configured properly. Refer to i.MX_Yocto_Project_User's_Guide.pdf, Rev. L5.4.70_2.3.0 --- 31 December 2020 for details.

    mkdir ~/projects/imx8mp
    cd ~/projects/imx8mp
    repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-kirkstone -m imx-5.15.32-2.0.0.xml && repo sync
    
  2. Setup build configuration

    DISTRO=fsl-imx-wayland MACHINE=imx8mpevk source imx-setup-release.sh -b build-imx8p-wayland
    
  3. Modify the ~/projects/imx8mp/build-imx8p-wayland/conf/bblayers.conf file. Add the line below to the file.

    BBLAYERS += "${BSPDIR}/sources/meta-summit-radio/meta-summit-radio"
    

    Note: for Yocto projects 3.3 (Hardknott) and earlier the line you add would be

    BBLAYERS += "${BSPDIR}/sources/meta-summit-radio/meta-summit-radio-pre-3.4"
    
  4. Modify the ~/projects/imx8mp/build-imx8p-wayland/conf/local.conf file. Add the lines below to the file.

    PREFERRED_PROVIDER_wpa-supplicant = "summit-supplicant-lwb"
    PREFERRED_PROVIDER_wpa-supplicant-cli = "summit-supplicant-lwb"
    PREFERRED_PROVIDER_wpa-supplicant-passphrase = "summit-supplicant-lwb"
    
    BBMASK += "\
        meta-summit-radio/meta-summit-radio/recipes-packages/openssl\
        meta-summit-radio/meta-summit-radio/recipes-packages/.*/.*openssl10.*\
        "
    
    PREFERRED_RPROVIDER_wireless-regdb-static = "wireless-regdb"
    LWB_REGDOMAIN = "US"
    

    Note: for Yocto projects 3.3 (Hardknott) and earlier you would add:

    PREFERRED_PROVIDER_wpa-supplicant = "summit-supplicant-lwb"
    PREFERRED_PROVIDER_wpa-supplicant-cli = "summit-supplicant-lwb"
    PREFERRED_PROVIDER_wpa-supplicant-passphrase = "summit-supplicant-lwb"
    
    BBMASK += "\
        meta-summit-radio/meta-summit-radio-pre-3.4/recipes-packages/openssl\
        meta-summit-radio/meta-summit-radio-pre-3.4/recipes-packages/.*/.*openssl10.*\
        "
    
    PREFERRED_RPROVIDER_wireless-regdb-static = "wireless-regdb"
    LWB_REGDOMAIN = "US"
  5. Clone the meta-summit-radio layer into ~/projects/imx8mp/sources directory

    cd ~/projects/imx8mp/sources
    git clone https://github.com/Ezurio/meta-summit-radio -b lrd-11.39.0.x
  6. Edit the ~/projects/imx8mp/sources/meta-summit-radio/meta-summit-radio/recipes-packages/images/sample-image-cp-lwb5plus.bb recipe by replacing lwb5plus-sdio-div-firmware with lwb5plus-usb-sa-firmware and adding laird-networkmanager. Then save it as mylwb5p-v11.bb. A snippet of the saved file is shown below.

    IMAGE_INSTALL += "\
    iproute2\
    rng-tools\
    ca-certificates\
    tzdata\
    alsa-utils\
    htop\
    ethtool\
    iperf3\
    tcpdump\
    iw\
    kernel-module-lwb5p-backports-summit\
    lwb5plus-usb-sa-firmware\
    summit-supplicant-lwb \
    summit-supplicant-libs-lwb \
    summit-networkmanager-lwb \
    summit-networkmanager-lwb-nmcli \
    packagegroup-fsl-tools-audio \
    packagegroup-tools-bluetooth \
    bluez5 \
    pulseaudio \
    pulseaudio-module-dbus-protocol \ 
    pulseaudio-client-conf-sato \
    "
  7. Next go to the build directory and run menuconfig to configure the Kernel.

    cd ../build-imx8p-wayland
    bitbake -c menuconfig virtual/kernel

    Backports will replace the Wireless and Bluetooth stack. The CONFIG_FW_LOADER_USER_HELPER_FALLBACK needs to be removed to allow for faster loading of the firmware at boot.

    Make the following modifications:

    In the menuconfig use / to search for each of the below configuration parameters in all caps.

    WLAN
    - deselect Device Drivers -> Network device support -> Wireless LAN
    
    CONFIG_BT
    - deselect Networking support -> Bluetooth subsystem support
    
    WIRELESS
    - deselect Networking support -> Wireless 
    
    CONFIG_FW_LOADER_USER_HELPER_FALLBACK
    - deselect Device Drivers -> Generic Driver Options -> Firmware Loader 
        -> Firmware loading Facility ->Force the firmware sysfs fallback mechanism when possible
    
    CONFIG_IMX_SDMA
    - set to module Device Drivers -> DMA Engine support -> i.MX SDMA support
        -   Save your changes and exit menuconfig
  8. Build the image

     bitbake mylwb5p-v11
  9. Flash image into SD card.

    Note: for this particular tutorial, the SD card is on /dev/sda1. It may be different for your setup; so make sure that you change the command below per your setup.

     bzip2 -dc ~/projects/imx8mp/build-imx8p-wayland/tmp/deploy/images/imx8mpevk/mylwb5p-imx8mpevk.wic.bz2 | sudo dd bs=512K iflag=fullblock oflag=direct status=progress conv=fsync of=/dev/sda1
    
     sync

    Or alternatively, you can use balenaEtcher to burn wic image to sd card.

  10. Connect EVK to Serial Terminal via J23 (115200, N, 8, 1). Note for this tutorial we use /dev/ttyUSB2 port to connect. Your Linux PC might use a different port. Boot device and login as root.

  11. Create a Wi-Fi profile with nmcli and then test with ping after making a connection to that AP. Use the following format of commands if using WPA PSK.

     nmcli con add con-name "YourProfile" ifname wlan0 type wifi ssid "YourAP" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "YourPassword"
     nmcli c u "YourProfile"
     ping www.google.com
  12. List available audio output and choose the one for headphone on imx8plus EVK. In this example, we chose sink #2.

    root@imx8mpevk:~# pactl list sinks
        Sink #0
            State: SUSPENDED
            Name: alsa_output.platform-sound-bt-sco.mono-fallback
            Description: Built-in Audio Mono
            Driver: module-alsa-card.c
    
        ...
    
        Sink #1
            State: SUSPENDED
            Name: alsa_output.platform-sound-hdmi.stereo-fallback
            Description: Built-in Audio Stereo
            Driver: module-alsa-card.c
        ...
    
        Sink #2
            State: SUSPENDED
            Name: alsa_output.platform-sound-wm8960.stereo-fallback
            Description: Built-in Audio Stereo
            Driver: module-alsa-card.c        
        ...
    
        Sink #3
            State: SUSPENDED
            Name: alsa_output.platform-sound-xcvr.iec958-stereo
            Description: Built-in Audio Digital Stereo (IEC958)
            Driver: module-alsa-card.c
    
    root@imx8mpevk:~# pacmd set-default-sink 2 
    
  13. Download an audio file to test playing it out with aplay. You can choose your own audio file instead of the link below.

    wget https://www2.cs.uic.edu/~i101/SoundFiles/BabyElephantWalk60.wav 
  14. Play audio with the audio device name specified (-D) first. Then, play the audio to PulseAudio sound server which is prerequisite of BT audio streaming.

    root@imx8mpevk:~# aplay -D sysdefault:CARD=wm8960audio BabyElephantWalk60.wav 
    Playing WAVE 'BabyElephantWalk60.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
    
    root@imx8mpevk:~# aplay -D pulse BabyElephantWalk60.wav 
    Playing WAVE 'BabyElephantWalk60.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Mono
  15. Now it is ready to connect Bluetooth and stream audio sound. Enter bluetoothctl and power up Bluetooth radio and put it in discoverable mode.

    root@imx8mpevk:~# bluetoothctl
        Agent registered
        [CHG] Controller C0:EE:40:82:6A:53 Pairable: yes
    
    [bluetooth]# power on
        [CHG] Controller C0:EE:40:82:6A:53 Class: 0x00200000
        Changing power on succeeded
        [CHG] Controller C0:EE:40:82:6A:53 Powered: yes
    [bluetooth]# discoverable on
        Changing discoverable on succeeded
        [CHG] Controller C0:EE:40:82:6A:53 Discoverable: yes
    
  16. Then, scan from your smartphone to connect to the imx8mpevk device in the Bluetooth scan list under the Setting. Pair with numeric comparison and authorize services by typing yes on the terminal for imx8 EVK.

    image

  17. Play audio (e.g., mp3 music) from the smartphone and you should be able to hear through earphone plugged into headphone aux port on imx8 EVK.

References