BL654PA Series Long Range Bluetooth Module

Recommended for New Design (RND)

Overview

Building on Laird Connectivity’s expertise with Nordic from the BL654 series comes the most powerful yet - the BL654PA series! It provides OEMs with the maximum design flexibility and performance. A complete multi-protocol embedded wireless offering with exceptional processing capability, all with extended PA/LNA support for even greater range.

Powered by Nordic’s nRF52840 silicon, the small form factor BL654PA modules and DVKs provide for a secure, robust Bluetooth Low Energy (LE) and Cortex-M4F CPU for any OEM’s product design. The BL654 provides you with maximum development flexibility with programming options for a simple, intuitive AT Command Set, as well as Laird Connectivity’s own smartBASIC environment.

  • Bluetooth 5.1 Low Energy (LE) + NFC
  • Integrated Skyworks Power Amplifier - Up to +18 dBm output
  • Ultra-small footprint - 22 mm x 10 mm x 2.2 mm
  • 2 Mbps and LE Long Range

More power so you can go farther. 

The BL654PA features an onboard power amplifier that doubles the output power to as high as 18 dBm, over twice the power of the original BL654 Series. High output power and LE Long Range mean roughly double the range for your Bluetooth applications. 

  • Utilizes Skyworks part # SKY66112-11
  • Provides + 10dBm more than standard BL654 (part # 451-0001 / 451-00002)
  • Range of external antennas certified
  • Complete power control with onboard smartBASIC FW image
BL654PA

Specifications

Antenna Options
PCB trace antenna or IPEX MHF4 connector
Bluetooth Version
5.1
Certifications
FCC, ISED, KC, AS/NZS, Bluetooth SIG
Chipset
Nordic nRF52840
Chipset (MCU)
Cortex-M4F
Logical Interfaces
46 GPIOs to support 2x UART, 8x ADC, 2x I2C, 4x SPI, 1x QPSI, 2x PDM, 2x I2S, NFC
Power Consumption (Tx)
102.2 mA (@ +18 dBm)
Programming Options
smartBASIC programming language, AT Command Set
Receive Sensitivity
-98.5 dBm to -107 dBm
Transmit Power
+18 dBm (maximum), configurable down to -26 dBm. (+14 dBm in LE CODED PHY mode)
Product Type Technology OS/Software System Architecture Chipset (Wireless) Antenna Type Logical Interfaces Frequency Range (Min) Frequency Range (Max) Frequency Range 2 (Min) Frequency Range 2 (Max) Bulk or Single
453-00020C Embedded Module Bluetooth 5.1, Single Mode (BLE), NFC, 802.15.4 / Thread / Zigbee Nordic SDK, smartBASIC, AT Commands, Zephyr Hostless Nordic nRF52840 Internal Serial, GPIO, ADC, I2C, SPI, PCM, I2S, NFC, PWM, USB 2402 MHz 2480 MHz 13.56 MHz 13.56 MHz Bulk - Cut Tape
Product Type Technology OS/Software System Architecture Chipset (Wireless) Antenna Type Logical Interfaces Frequency Range (Min) Frequency Range (Max) Frequency Range 2 (Min) Frequency Range 2 (Max) Bulk or Single
453-00020R Embedded Module Bluetooth 5.1, Single Mode (BLE), NFC, 802.15.4 / Thread / Zigbee Nordic SDK, smartBASIC, AT Commands, Zephyr Hostless Nordic nRF52840 Internal Serial, GPIO, ADC, I2C, SPI, PCM, I2S, NFC, PWM, USB 2402 MHz 2480 MHz 13.56 MHz 13.56 MHz Bulk - Tape and Reel
Product Type Technology OS/Software System Architecture Chipset (Wireless) Antenna Type Logical Interfaces Frequency Range (Min) Frequency Range (Max) Frequency Range 2 (Min) Frequency Range 2 (Max) Antenna Options Bulk or Single
453-00021C Embedded Module Bluetooth 5.1, Single Mode (BLE), NFC, 802.15.4 / Thread / Zigbee Nordic SDK, smartBASIC, AT Commands, Zephyr Hostless Nordic nRF52840 External Serial, GPIO, ADC, I2C, SPI, PCM, I2S, NFC, PWM, USB 2402 MHz 2480 MHz 13.56 MHz 13.56 MHz IPEX MHF4 Connector Bulk - Cut Tape
Product Type Technology OS/Software System Architecture Chipset (Wireless) Antenna Type Logical Interfaces Frequency Range (Min) Frequency Range (Max) Frequency Range 2 (Min) Frequency Range 2 (Max) Antenna Options Bulk or Single
453-00021R Embedded Module Bluetooth 5.1, Single Mode (BLE), NFC, 802.15.4 / Thread / Zigbee Nordic SDK, smartBASIC, AT Commands, Zephyr Hostless Nordic nRF52840 External Serial, GPIO, ADC, I2C, SPI, PCM, I2S, NFC, PWM, USB 2402 MHz 2480 MHz 13.56 MHz 13.56 MHz IPEX MHF4 Connector Bulk - Tape and Reel
Additional Description
453-00062-K1 USB-SWD Programming Kit: Includes mainboard, TC2050-IDC Tag Connect cable, 10-pin flat IDC cable, 1.2 m USB cable, and 2-pin jumper
Product Type Technology OS/Software System Architecture Chipset (Wireless) Antenna Type Logical Interfaces Frequency Range (Min) Frequency Range (Max) Frequency Range 2 (Min) Frequency Range 2 (Max)
455-00022 Development Kit Bluetooth 5.1, Single Mode (BLE), NFC, 802.15.4 / Thread / Zigbee Nordic SDK, smartBASIC, AT Commands, Zephyr Hostless Nordic nRF52840 Internal Serial, GPIO, ADC, I2C, SPI, PCM, I2S, NFC, PWM, USB 2402 MHz 2480 MHz 13.56 MHz 13.56 MHz
Product Type Technology OS/Software System Architecture Chipset (Wireless) Antenna Type Logical Interfaces Frequency Range (Min) Frequency Range (Max) Frequency Range 2 (Min) Frequency Range 2 (Max) Antenna Options
455-00023 Development Kit Bluetooth 5.1, Single Mode (BLE), NFC, 802.15.4 / Thread / Zigbee Nordic SDK, smartBASIC, AT Commands, Zephyr Hostless Nordic nRF52840 External Serial, GPIO, ADC, I2C, SPI, PCM, I2S, NFC, PWM, USB 2402 MHz 2480 MHz 13.56 MHz 13.56 MHz IPEX MHF4 Connector

Photo Gallery

453-00020R

453-00021R

453-00020C

453-00021C

455-00022

455-00023

453-00062-K1

Certified Antennas

  • mFlexPIFA Antenna

    EFA2400A3S-10MH4L

    mFlexPIFA Flexible Adhesive-Backed PIFA Internal Antenna

    FlexPIFA antenna for metal mounting with minimal detuning. 2.4 GHz and dual-band 2.4/5.5 GHz with 2 dBi of gain. 

    Learn More
  • 2.4 GHz Dipole RF Antenna

    001-0001

    2.4 GHz Dipole WiFi & Bluetooth Antenna

    2.4 GHz Dipole Antenna 

    Learn More
  • FlexPIFA and FlexPIFA 6E

    001-0022

    FlexPIFA / FlexPIFA 6E Flexible Adhesive-Backed PIFA Internal Antennas

    Industry-first, flexible, planar inverted-F antennas for curved surfaces.

    2.5-3 dBi gain.

    Available in 2.4 GHz, dual-band 2.4/5 GHz and Wi-Fi 6E 2.4/5/6 GHz.

    Learn More
  • NFC Flex PCB Antenna

    0600-00061

    NFC Flex PCB Antenna

    With a length of 58.93 mm, this small flexible NFC PCB Antenna can be placed in a variety of devices enabling smart communication for contactless payments, door locks, ticketing systems and more.

    Learn More

Become a Laird Connectivity Customer and Gain Exclusive Access to Our Design Services Team

  • Antenna Scans
  • Antenna selection and placement
  • Custom antenna design
  • Worldwide EMC testing / certifications
  • Embedded RF hardware / firmware design
  • Cloud architecture and integration
  • Mobile application development
  • Product & Industrial Design

Talk to an Expert

Documentation

Name Part Type Last Updated
Product Brief - BL654PA All Product Brief 10/11/2021
User Guide - smartBASIC Core Functionality v3.4 All Documentation 06/22/2020
Application Note - Using Direct Test Mode with the BL654PA All Application Note 01/25/2021
Application Note - Low Power Modes - BL654PA All Application Note 08/29/2019
Datasheet - BL654PA All Datasheet 12/22/2021
User Guide - BL654PA DVK All Documentation 05/13/2021
AS/NZS Certifications - BL654PA All Certification 12/16/2020
FCC Certifications - BL654PA All Certification 12/16/2020
ISED Certifications - BL654PA All Certification 12/16/2020
KC Certifications - BL654PA All Certification 12/16/2020
Application Note - Nordic SDK-Based Application Development - BL654PA All Application Note 02/08/2021
3D Model - 453-00020 - BL654PA with Internal Antenna All Technical Drawings 03/13/2020
3D Model - 453-00021 - BL654PA with IPEX MHF4 Connector All Technical Drawings 03/13/2020
BL654PA PCB Footprint (DXF and Altium format) All Technical Drawings 12/22/2021
BL654PA SCH Symbol (Altium format) All Technical Drawings 12/22/2021
Application Note - Bootloader UART Protocol - BL6xx All Application Note 08/16/2021
Datasheet - NFC Flex PCB Antenna All Documentation 03/10/2022
UwFlashX – Serial Firmware Update Utility All Software 04/27/2020
UwTerminalX – Serial Terminal Utility All Software 04/27/2020
Application Note - Using UART Efficiently to Extend Battery Life (BL65x) All Application Note 06/04/2020
BL654/BL654PA Firmware for Upgrade v29.4.6.6 r1 All Software 07/29/2021
PCN_7A-2020 BL654PA Series All Documentation 07/15/2020
Application Note - How to Set Up vSP Service - BLxx All Application Note 07/31/2020
RoHS 3 - Bluetooth All Certification 01/04/2022
Release Notes - BL654/BL654PA v29.5.7.2 r0 All Documentation 01/18/2021
User Guide - BL65x AT Interface Application All Documentation 02/28/2022
BL654/BL654PA Firmware for Upgrade v29.5.7.2.r2 All Software 01/15/2021
Regulatory Information - BL654PA All Certification 05/20/2021
Quick Start Guide - BL65x AT Interface All Documentation 02/12/2021
smartBASIC Applications Migration Guide - BL65x All Documentation 03/09/2021
BL654/BL654PA smartBASIC Extensions Guide v29.5.7.2 All Documentation 03/02/2022
ISED ICES-003 Issue 7 Declaration of Compliance All Certification 05/18/2021
Application Note - GATT Table with AT Interface Application All Application Note 06/09/2021
Application Note - BT 5.x Feature Comparison for Laird Connectivity Bluetooth Modules All Documentation 02/24/2022

FAQ

Getting ERROR: JLinkARM DLL not found. Please reinstall latest JLinkARM when trying to flash BL65x module via the JTAG interface. How can this be resolved?

If you are getting ERROR: JLinkARM DLL not found. Please reinstall latest JLinkARM, you will need to download and install the updated Segger drivers for the J-Link.
Segger J-Link Drivers

What is the easiest way to change the advertised Device Name in a smartBASIC Application?

Changing the advertised device name is accomplished using three different functions prior to calling the BleAdvertStart () function.

First, the BleGapSvcInit () function is used to change the device name from the default, Laird [BL600 | BT900], to the desired device name.
Next, the BleAdvRptInit () funtion must be called to create and initialize the advert report with the new device name.
Finally, the BleAdvRptsCommit () function must be called to commit the changes.

Below is an example of a simplified smartBASIC app which changes the default device name to "My Device":
 

//******************************************************************************
// Laird Connectivity
// Rikki Horrigan
//******************************************************************************

//******************************************************************************
//Definitions
//******************************************************************************

//******************************************************************************
//Global Variable Definitions
//******************************************************************************
dim rc     //result code
dim nameWritable
dim nAppearance
dim nMinConnInterval
dim nMaxConnInterval
dim nSupervisionTout
dim nSlaveLatency

//******************************************************************************
// Initialize Global Variable
//******************************************************************************
nameWritable = 0 //The device name will not be writable by peer.
nAppearance = 1091 //Device will apear as Walking sensor on hip (org.bluetooth.characteristic.gap.appearance.)
nMinConnInterval = 500000 // must be smaller than nMaxConnInterval.
nMaxConnInterval = 1000000 //must be larger than nMinConnInterval
nSupervisionTout = 4000000 //Range is between 100000 to 32000000 microseconds (rounded to the nearest 10000 microseconds)
nSlaveLatency = 0 //value must be smaller than (nSupervisionTimeout/nMaxConnInterval)-1

//******************************************************************************
//Functions & Subroutines
//******************************************************************************

//ERROR HANDLER
SUB assertRC(rc, line)
  IF rc != 0 THEN
    PRINT "\nError on line ";line;", code: ";INTEGER.H'rc
  ENDIF
ENDSUB

// Change Device Name

FUNCTION OnStartup()
print "Default Device Name: "; BleGetDeviceName$ ();"\n"
dim deviceName$ //declare variable for DEVICENAME
deviceName$= "My Device" //Set new DEVICENAME
rc = BleGapSvcInit (deviceName$, nameWritable, nAppearance, nMinConnInterval, nMaxConnInterval, nSupervisionTout, nSlaveLatency )
print "\n New Device Name: "; BleGetDeviceName$ (); "\n"

//Create and Initializing the Advert Report (not advertised until BLEADVRPTSCOMMIT is called)
dim adRpt$ //advert report
adRpt$ = ""
rc = BleAdvRptInit(adRpt$, 2, 0, 16)

//Commit the advert report
dim scRpt$ //scan report
scRpt$ = ""
rc = BleAdvRptsCommit(adRpt$,scRpt$)

//Start Advertising
dim addr$
addr$ = ""
rc = BleAdvertStart(0,addr$,100,0,0)

ENDFUNC 1 // Remain in WAITEVENT
//******************************************************************************
//Handler Definitions
//******************************************************************************

//******************************************************************************
//OnEvent Statements
//******************************************************************************

//******************************************************************************
//Equivalent to Main() in C
//******************************************************************************
rc = OnStartup()

Waitevent

How do you change the BAUD rate in the AT Interface Application for BL65x smartBASIC modules?

The default baud rate in the AT Interface application is 115200. In order to change the baud rate within the AT Interface code there are two modifications required in the AT Interface files as shown below:

  1. Locate the following settings within the $autorun$.AT.Interface.BL652._.sb file which sets the baud to 115200 (highlighted):
    #define SREGINIT_VAL32_0 "\4C\1D\00\00\98\3A\00\00\00\C2\01\00\00\20\00\00\01\20\00\00"
    #define SREGINIT_MIN32_0 "\4C\1D\00\00\4C\1D\00\00\B0\04\00\00\01\00\00\00\01\00\00\00"
    #define SREGINIT_MAX32_0 "\1E\04\3D\00\1E\04\3D\00\40\42\0F\00\FF\FF\00\00\FF\FF\00\00"

     
    Modify the settings to set the Hex value for the desired BAUD rate in little endian format
    The example below will set it to 9600 baud (0x00 0x00 0x25 0x80)  as shown below (highlighted)
    #define SREGINIT_VAL32_0 "\4C\1D\00\00\98\3A\00\00\80\25\00\00\00\20\00\00\01\20\00\00"
    #define SREGINIT_MIN32_0 "\4C\1D\00\00\4C\1D\00\00\B0\04\00\00\01\00\00\00\01\00\00\00"
    #define SREGINIT_MAX32_0 "\1E\04\3D\00\1E\04\3D\00\40\42\0F\00\FF\FF\00\00\FF\FF\00\00"
  2. Locate the settings for S Register 302 in the $LIB$.SRegInterface.sb file: Modify the settings in #cmpif 0x00010000 : rc=BleEncode32(SregCache32$[0],115200,offset) to set the baud rate to the desired baud rate.

 

Do BL65x modules support Boundary Scan function?

Unfortunately, we do not offer Boundary Scan functionality on the BL65x modules.


We do understand it is harder to place and recommend during development the use of an X-ray or some other means to verify to soldering process.

Can I write/encode an NFC tag using the BL65x?

The NFC capability of the BL652 is NFC-A Listen Mode, Type 2. It is exposed as a passive interface. Therefore, the BL652 NFC functionality currently allows for read-only (type 2) tags which can be read from an Active NFC reader, such as a smartphone or Arduino-based shield. It is not able to write or encode external tags.

More information on NFC capability on the BL652 can be found in section 7.1, "Near Field Communication (NFC) on page 314 of the BL652 smartBASIC Extensions User Guide

For the BL654, more information can be found in section 6.1 on page 344 of the BL654 smartBASIC Extensions User Guide

Can a BL65x firmware be updated OTA?

OTA firmware updates are not available for the BL65x modules. While smartBASIC programs (e.g. hello.world.sb) can be uploaded OTA, Laird firmware version (e.g. v28.9.6.0) updates can only be done over JTAG or UART.

I've loaded a Nordic SDK application to the BL654PA and it isn't transmitting anything, why is that?

There is a Skyworks 66112-11 front-end module external to the nRF52840 and control over PA (TX) and LNA (RX) must be included in your application. Please see Application Note - Nordic SDK-Based Application Development - BL654PA for more details on how to utilize the Nordic soft device to control the PA and LNA of the Skyworks front-end module.

Do you have a smartBASIC example for Android or iOS devices such as smartphones or tablets?

smartBASIC is a programming language developed for our BT900 and BL6xx modules to simplify the code required for programming them. It is not used for developing Android or iOS device applications. BLE applications for Android and iOS devices would need to written in code specific to the Android or iOS platform.

Our, Laird Toolkit Application available for iOS and Android is currently in the process of being updated for Android and iOS to work with newer OS platforms.
Once it is complete we expect to make the source code available, to customers working with our smartBASIC modules, for reference when developing Apps for these platforms.
As of the writing of this FAQ the current version of the Laird Toolkit is still available on the App store for iOS and Google Play for Android, however, it may not work with newer versions of iOS or Android until the updates have been made.
Google Play Store
Apple Store

An alternate resource, the Nordic nRF Toolbox is also available from the iOS App Store and Google Play. The source code for this application is available from Nordic's Website.
nRf Toolbox
Android
iOS

How can BL65x module or dongle be used to receive data from a custom service running on another device?

Several Sample Applications are available from the corresponding BL65x-Applications folder on Laird Connectivity's GitHub repository, including an AT Interface sample application.  The AT Interface sample application enables a quick way to configure a smartBASIC BL65x module using the commands available in the AT Interface User Guide to scan, connect, read the GATT table and receive data from the connecting device via the appropriate UUID for the custom service. We recommend referencing the AT Interface Quick Start Guide v1 0.pdf to get started with the AT Interface Application, which walks you through loading the application and a few of the basic commands, including initiating a vSP connection, (vSP is Laird's custom Serial UART application.) A non-vSP connection can be established using AT+LCON  as per page 21 of the AT Interface User Guide.

Alternatively, a custom smartBASIC central application could be developed and loaded to the dongle to connect with the custom service by referencing the Core Functionality smartBASIC and modular Extension User Guides available on the corresponding Product Page for the module, for example:

User Guide - smartBASIC Core Functionality v3.4
BL654 smartBASIC Extensions Guide v29.4.6.0

Please note: the BL654 dongle comes in two variants, smartBASIC variant (451-00003) and Nordic/Zephyr variant (451-00004). If electing to work with the smartBASIC firmware and example applications available on the GitHub repository it will be necessary to purchase the 451-00003 smartBASIC variant, as smartBASIC applications cannot be loaded to the 451-00004 Nordic/Zephyr variant.

Is it possible to use Nordic's UART Serial Port Service when a BL65x module is configured for UART Bridge Mode rather than using Laird's Virtual Serial Port Service?

Yes, if config key 112 set to 1, via the AT+CFG 112 command then the service UUIDs for the UART serial port service is as per Nordic’s implementation. Any other value will use the service UUIDs for Laird’s custom service - vSP (Virtual Serial Port).

Please reference the Virtual Serial Port Service Managed section in the smartBASIC Extensions User Guide of the BL65x module you are working with for additional information.

How Can I Change the BL65x Tx Power Setting

The BL65x is delivered with the smartBASIC runtime FW loaded and no smartBASIC application. The BL65x will boot up in interactive mode and can be configured via AT Commands. In this mode the TX Power for both advertisements and connections is controlled via Config Register 109. This register is read from or written to via the AT+CFG AT command as is described in the BL654 smartBASIC Extensions Users Guide. However, Config register 109 is valid for Tx Power adjustment when Virtual Serial Port services is enabled.

If Virtual Serial Port Services is not enabled TX Power is configured via the BleTxPowerSet() function within a users smartBASIC application code. In this mode the current setting of Tx Power can be obtained from ATI register 2008 as described in the BL654 smartBASIC Extensions Users Guide

How can I update and send Extended or Normal Advertisement data using AT Interface application?

In AT Interface there are just a few commands for modifying and sending Extended or Normal Advertisement data. Extended Advertisement Data is provided from the Server to the Scanner via Scan Request and Response PDU’s. An AD Element needs to be created to add the AD report that is returned after a scan request is received. To add AD Elements to the Advert Report use AT Command:

AT+AARA tag,”payload”

Tag refers to the Data Type Value specified in the Bluetooth SIG Generic Access Profile document. Using a tag of Data Type Value of 0xFF <Manufacturing Specific Data> the command will look like:

AT+AARA 0xFF “payload”

Or

AT+AARA 255 “payload”

Once the AD Report is updated it must be committed using:

AT+ACMT

To begin Extended Advertisements use AT Command:

AT+EADV <advProp>,<advIntvlMs>,<maxCount>,<priSecPhy>,<peerAddr>, <chanMask>

Refer to AT Interface Guide for more details of parameters.

For now the key parameter is <advProp>. <advProp> is a bitmask where bit 0 is set for connectable adverts, bit 1 is set for scannable adverts, bit 2 for directed adverts and in that case ‘peerAddr’ must be a valid 14 hex digit string and bit 3 is set for extended adverts. For this example AT Command:

AT+EADV 8

This command will begin sending non-connectable Extended Advertisements using default values for remaining fields which are taken from their corresponding S Registers.

To clear AD Elements when new advertisement data needs to be sent use AT Commands:

AT+ARST 1

followed by

AT+ARST 0.

This will clear existing AD Elements. If the need to maintain current AD Elements for the Advert report but additional AD Elements need to be added to the Advert Report then simply continue adding AD Elements using

AT+AARA

and

AT+ACMT

commands.

Is achieving the theoretical throughput of 2 Mbps possible with BLE radio with 2M PHY?

Unfortunately, no. At the time of this writing, even with 2M PHY enabled, BLE 5.x radios have a limitation of 1.2 - 1.5 Mbps due to the packet format. In order to achieve throughput of 2Mbps or higher you would have to use a different RF Technology, such as Wi-Fi.

Please see the Application Note for Throughput Testing with Bluetooth 5 LE 2M PHY Feature for the BL65x module.

(Note: The above Application Notes have not yet been added to the BL653 or BL654PA Product Pages, however, they do apply to those modules as well. The only difference is the DVK setup.)

 

How to open multiple BLE connection simultaneously with the SmartBASIC AT interface?

While it is not possible to open multiple virtual serial port (VSP) connection at a time, it is possible to open more than one regular BLE connection.

The SmartBASIC AT interface application provides configuration S registers for setting certain BLE parameters, which are accessible by the ATS command. The default configuration is optimized for establishing one VSP connection with high throughput between two BLE modules. Given this, certain S register have to be modified to accomodate for different applications.

The default configuration has set bit 3 in S register 100 (Start-up Flags), which gives max bidirectional throughput of about 127kbps. As a consequence the number of simultaneous BLE connections is being limited to 1. If you want to use more than one non-VSP BLE connections, bit 3 in S register 100 needs to be cleared and then max connections in S register 126 can be increased.

  • ATS 100=1  (if you want to keep the VSP service being active)
  • ATS 100=0  (if you want to disable the VSP service)

If you need to set other bits in S register 100, like data length extension or phy rate, add them as required. You can use ATS 100? to retrieve the current settings before changing.

Now the number of simultaneous BLE connections can be set in S register 126.

  • ATS 126=8  (set max connections to eight or some other value, the actual maximum number might depend on your particular BLE module)

Then make sure to save and apply the new settings.

  • AT&W  (this will store S register settings permanently)
  • ATZ  (does a soft reset and apply changed settings of S registers)

After the soft reset the new settings are active and you can open several BLE connections simultaneously with AT+LCON command.

See BL65x AT Interface User Guide for more information on S register settings and AT commands.

Is there protection from Hacking when using smartBASIC modules?

Our Bluetooth 5.0 smartBASIC modules (BL652, BL653, BL654) have the capability of supporting LE Secure Connections Pairing as well as encryption. LE Secure Connection is an enhanced security feature introduced in Bluetooth v4.2. It uses a Federal Information Processing Standards (FIPS) compliant algorithm called Elliptic Curve Diffie Hellman (ECDH) for key generation. 
 
LE Secure Connections, supports four association models: 

  • Just Works
  • Numeric Comparison (Only for LE Secure Connections)
  • Passkey Entry
  • Out of Band (OOB)

Additional information about LE Secure Connections and the models can be found here: www.bluetooth.com.
 

Our Bluetooth 4.0 smartBASIC modules (BT900 /BL600 /BL620) support Simple Secure Pairing and Encryption 
Additional information about Simple Secure Pairing can be found here:
lairdconnect.com/resources/newsroom/secure-ble-pairing-iot
lairdconnect.com/resources/white-papers/ble-and-lairds-bl6x0-series-bt900-modules-guide-security-and-privacy
 
We recommend reviewing the Pairing, Bonding and Security Manager functions in the BL6xx/BT900 smartBASIC Extensions User Guides. The full security of the Bluetooth/Bluetooth Low Energy connection will depend largely on how the smartBASIC application is written, and what the input/output capabilities are of the devices that are connecting. If either device will not have any input/output capabilities then pairing will have to default to Just Works, which is the least secure pairing method. However there are additional layers of security that can be added to increase protection from hacking when the Just Works pairing model is used.

With Bluetooth Low Energy, to further secure the connection, it is recommended that the metadata for the characteristic attributes are configured for Encryption with man-in-the-middle protection for characteristic value access. This will prevent anyone from accessing data on the module without proper encryption keys. (See BleAttrMetadataEx in the BL6xx/BT900 smartBASIC Extensions User Guides.) Additionally, when using Just Works pairing, or any time additional security is required, we recommend adding a challenge/response question to the application layer, with a timer, which expects the connecting device to respond to the challenge question in a specified period of time after a connection has occurred. If the correct response is not received within that time period the application would force a disconnection. Finally, whisper mode pairing can be used during the pairing process as an additional layer of security. This is accomplished by reducing the Tx power while pairing using BleTxPwrWhilePairing as per the BL6xx/BT900 smartBASIC Extensions User Guide, which will reduce the radius which a hacker would need to breach in order to capture or spoof the encryption procedure.

What are the production programming options for the BL65x modules when using smartBASIC?

For production programming we recommend the following options:

  1. FLASH cloning: Instructions for FLASH cloning can be found in the firmware Zip files, which can be downloaded from the BL65x Product Page. There are two README files contained in the "Firmware" folder of the files, as well as the utilities required to create the cloned image. The first option, ____READ_ME_TO_CLONE_FILESYSTEM___, captures only the flash file and data system and does not include the firmware. The second option,  READ_ME_TO CLONE FIRMWARE_&_APP__, clones the flash file and data system as well as the firmware. When possible, we recommend cloning the firmware as well as the flash and data systems.
  2. MultideviceLoader, which is a command-line application for Windows, Linux and Mac that can be used to XCompile an application (Windows only) and download it to multiple Laird devices at the same time and provides options for: renaming the file, running it after download and other functions. This is a companion application for UwTerminalX and is mostly suited to production/end-stage testing purposes. Command line arguments are available in the Wiki on the GitHub repository.

Note: UwFlashx and Uwflash_embed are for firmware upgrades, and cannot be used to program smartBASIC applications.

Does Laird have example code for a Windows Demo App which enables scanning and connecting to Bluetooth Low Energy peripheral IoT devices?

Unfortunately, we do not have an example of a Windows Bluetooth Low Energy application. If you require assistance with developing a Windows Bluetooth Low Energy application please contact one of our Sales Experts and let them know you are interested in a Design Services engagement and we will be happy to discuss your application requirements and provide a quote.

How many I2C ports does the BL65x support

The BL65x Data sheet lists two I2C controllers (up to 400 Kbps) are supported. The data sheet is provided as a hardware guide and refers to the hardware itself. The Nordic nRF528xx BLE mcu’s support multiple I2C controllers. However, the actual number of I2C interfaces depends on what SW is used for application development. If using smartBASIC for development there is one I2C instance and that instance is a master, there is no slave support.

Referring to the smartBASIC Extensions guide for the various BL65x modules it states:

Note I2COpenEx() allows for SCL and SDA to be routed to other GPIO pins.

This function uses the same I2C instance but allows changing the pins it is operating on. The smartBASIC I2C driver does not support a second instance. The intent of this function is so multiple devices with the same I2C address can be used. Some devices support a single address, some have multiple addresses they can use. If a sensor with 2 possible addresses is used then a third cannot be added on the same bus because the address of 2 devices will clash, but it can be used on different pins. Another example is if one sensor only supports 100KHz mode but another that supports 250KHz. Different busses would need to be used so that the 250KHz signals do not cause undefined operation for the 100KHz sensor

For applications developed using Nordic SDK or Nordic Zephyr SDK then I2C interfaces supported by the particular nRF528xx BLE MCU can be used. Both master and/or slave operation is also supported. Refer to the nRF828xx data sheet for details.

Issues with Flashing custom firmware to BL65x using Segger Embedded Studios IDE

The BL652, BL653, and BL654 modules come preloaded with our smartBASIC firmware. When flashing custom firmware using Segger IDE it is necessary to do a full erase of the Laird BL65x module before programming the module. This can be accomplished using the NRFJPROG command line tool to send the command nrfjprog --eraseall.

What is the maximum number of characteristics that can be supported using smartBASIC?

The maximum number of characteristics is not a limitation in smartBASIC but a limitation in the underlying Nordic SoftDevice SDK. The SoftDevice has a maximum RAM allowance of 64KB, adding more characteristics will increase RAM usage and depending on other configuration, will determine how many characteristics can be supported within the 64KB allowed RAM space.

The maximum number of characteristics supported in smartBASIC is roughly 24. This is a product of the combination of the total RAM allowance of 64K for SoftDevice, GATT Table configuration as well as the GATT Table size as is specified in Configuration Key 204 (refer to BL654 smartBASIC Extension Guide). The default GATT table size is 1792 bytes (Config 204)) which will allow for roughly 11 characteristics.

If using the AT Interface application the maximum number of characteristics is set to 24 by default. The default configuration can be found in $autorun$.AT.interface.BL654._.sb file:

 //This defines the maximum number of characteristics we can manage

 

 

#define MAX_CHARACTERISTICS 24


As mentioned previously this is the max number of characteristics that can be supported but Out of Box the GATT table size is 1792 bytes resulting in roughly 11 characteristics.

 

Can I use Windows to scan for my BLE Peripheral and Connect to it?

Laird does not provide a Windows utility for scanning and connecting to BLE devices. We are also not aware of any existing third party apps to do this either. Android and iOS are the best options for scanning for and connecting to BLE radios. 

Can the BL5340 or BL65x use a different stack to support a hosted application?

Theoretically as long as whoever 3rd party BLE stack is used is tested and supported on Nordic nRF5340 or nRF528xx used on BL65x modules.

Laird would not have tested anything other than Zepher/nRF SDK.

A 3rd party CODEC could be used as well as long as it is targeted for nRF5340. However, licensing would need to be considered.

How do I select the 32.768kHz Low Power Clock Source in the new nRF Connect SDK

Customers using the new nRF Connect SDK from Nordic will need to change the low power 32kHz clock source when working with the BL65x family of products.

To do this in the new SDK using the Segger IDE follow the instructions here;

  1. In Segger Embedded Studio select Project --> Configure nRF Connect SDK Project 
  2. Filter the list for 'osc' or drill down in the list to the Device Drivers --> Hardware clock controller support --> NRF Clock controller support --> 32KHz clock source
  3. Select the clock source based on your configuration/design:
    1. Without the optional external 32khz xtal, default configuration for our modules, select 'RC Oscillator'
    2. With the external 32Khz xtal connected to the module, select 'Crystal Oscillator'

 

With the correct value selected your code should build with the right clock source configuration and your application should run smoothly.

How many bytes can BL65x modules support for Extended Advertising using smartBASIC?

BL65x modules can support up to 255 Bytes when using extended advertising. This equates to an advertisement packet being sent on one secondary channel.

Extended Advertisement were introduced in Bluetooth SIG v5.0 specification. Advertisement channels 37, 38 and 39 are now qualified as Primary Advertisement Channels with channels 0 to 36 now qualified for use as Secondary Advertisement Channels. Each secondary channel can have up to 255 bytes of payload and the v5.0 specification allows for chaining up to 6 packets for up to 1650 bytes total. However, receiving all of those chained packets may be unreliable resulting in many stack vendors not offering the full chaining capacity.

What does the Bluetooth message "advertised data length corrected" indicate?

This is effectively a Bluetooth SPAM message. It indicates the advert data being parsed is less than a full advert record can be, in other words trailing zeroes were removed.

Can Pullups or Pulldowns be Disabled on Default UART Pins

The BL65x is delivered with the smartBASIC runtime FW loaded and no smartBASIC application. In this configuration the module will boot into smartBASIC Interactive mode and the default pins for the UART at startup are set as per:

  • RTS: digital out, no pull, default high
  • TXD: digital out, no pull, default high
  • CTS: digital in, pull down
  • RXD: digital in, pull up

Startup flow is as follows:

  • sB engine starts
  • If there is no autorun application - UART is opened (default parameters)
  • If there is an autorun application - UART is not opened
    • If the autorun application uses print - UART is opened (default parameters)
    • If the autorun application uses UARTOPEN - UART is opened (custom parameters)

 

The pull up/down options can be changed in the smartBASIC application only when the UART is not open. If the $autorun application has opened the UART by using a print statement or calling UARTOPEN() then the UART must first be closed by calling the UARTCLOSE() function.

In the smartBASIC application when the UART port has been closed the code can call GpioSetFunc() to configure the desired GPIO parameters.

The smartBASIC application can use UARTOPEN() function to now enable the UART port. UARTOPEN() does not configure GPIO pull up/down configurations keeping the desired GPIO configurations intact.

How can I connect a Bluetooth Low Energy Device to a PC?

Bluetooth Low Energy uses Services as opposed to the set of standardized profiles that exists for Classic Bluetooth. While some Bluetooth Low Energy services have been standardized by the Bluetooth SIG, the development of custom services is allowed to meet custom application requirements.
 
Because Bluetooth Low Energy uses a completely different protocol than Classic Bluetooth and supports custom services, Bluetooth Low Energy devices cannot connect to a computer through the typical Bluetooth configuration of a computer. Therefore, connecting to a PC requires writing and running a Bluetooth Low Energy Central Role/Client application to collect the data sent from the Bluetooth Low Energy peripheral modules. Application development for PCs and Mobile devices is outside the scope of our support. Alternatively, a BL654 USB dongle could be used as a BLE Central Role device, to collect the BLE data and pass it to the PC over a COM Port. However, you would still need an application to view and process the data received over that COM Port.
 
We generally recommend customers who are new to Bluetooth Low Energy obtain a copy of Getting Started with Bluetooth Low Energy to help them understand the Bluetooth Low Energy protocol and the GATT table. There are also many resources available online which explain this. 

When Bluetooth Low Energy was first introduced and we launched our BL6xx product line (predecessors to the BL65x series) we produced the BL600 and BL620 smartBASIC Application Walkthrough document, which provides an overview of how Bluetooth Low Energy works and how a GATT table is constructed. 

How many SPI Interfaces does the BL65x support

The BL654 Data sheet lists four SPI Interfaces (up to 8 Mbps) are supported. The data sheet is provided as a hardware guide and refers to the hardware itself. The Nordic nRF52840 MCU supports up to 4 SPI instances. However, the actual number of SPI interfaces depends on what SW is used for application development. If using smartBASIC for development there is one SPI instance that can be configured as SPI master.

The SPI port is opened via smartBASIC function SPIOPEN(). This function includes parameters that allow configuration of SPI Mode, SPI Clock Rate and SPI Flags. SPI pins cannot be configured and use the pins that are specified in the BL65x Data Sheet. Refer to smartBASIC Core Functionality Specification. SPI_CS is not controlled in smartBASIC firmware and must be controlled by the application through use of SIO pins.

For applications developed using Nordic SDK or Nordic Zephyr SDK the nRF528xx MCU supports up to 4 SPI Instances. There can be up to 4 SPI Master interfaces (SPIM Master) and up to 3 SPI Slave interfaces (SPIS) but not all at once. There are four total SPI interfaces and master/slave combinations are shared across those four instances. The nRF528xx also contains two I2C Instances which are shared with the two lower SPI instances via TWI. Refer to the latest nRF52xx data sheet for details.

What influence does the client have when it comes to notifications?

The Client must initiate the ability of the Server to send Notifications by writing to the CCCD descriptor for the Notified Characteristic on the Server.
 

What is the battery recommendation if need to use battery to power up BL654PA?

The power input in data sheet is 3.0v~5.5v, and at least need to have 2.8v to make the internal LDO work.

Li-ion, Li-poly nominal battery voltage is 3.6V fully charged, and are recommended to power BL654PA.  3*AAA battery is also recommended as well.

Where can I find the appropriate arguments/parameters to use with the BleAttrMetadata() function used in many examples in the BL65x User Guide, as I only see BleAttrMetadataEx() listed which appears to have different arguments/parameters?

The BLEATTRMETADATA () function is intentionally not documented in the BL65x Extension User Guides for our BL65x series smartBASIC modules, as it is preferred that the ‘EX’ variant BLEATTRMETADATAEX () is used going forward. The two functions are primarily the same, however, the EX version enables more functionality with the nFlags argument as compared to the FlsVariableLen argument in the deprecated BLEATTRMETADATA () function. The non-EX version is still supported to ensure old apps using it still work, including the code examples referred to in the user guide.

If you are looking for specifics about the BLEATTRMETADATA () function, such as the arguments and returns specific to that function these can still be found in the BT900 smartBASIC Extensions User Guide (pg 228), or BL600 smartBASIC Extensions User Guide (pg 110).

Do I still have to list/qualify my product with the BT SIG even if I don't use the BT logo?

Yes, you need to qualify/list any product that uses BT SIG intellectual property, even if you do not use the logo or require interoperability with other BT devices. see here for more details. Qualify Your Product | Bluetooth® Technology Website

 

How do I set parity on the BL65x?

Setting parity is not possible using smartBASIC on the BL652 and BL654. However, setting parity is supported when working with the Nordic SDK. Therefore, if parity setting is required, the module will have to be programmed using the Nordic SDK and the Nordic examples instead of Laird's smartBASIC examples.

Please refer to the Using the DVK-BL652 and Nordic SDK v14.0.0 with Eclipse & GCC or the Using the BL654 and Nordic SDK v16.0.0 with Eclipse and GCC  application note for assistance in setting up the BL652-DVK or BL654-DVK using the Nordic SDK. Please note that Nordic examples work with the external crystal as the clock source. The DVK-BL652 uses the internal RC Oscillator as the clock source, therefore if you will not be fitting the low frequency external crystal please be sure to modify the Nordic examples as explained in the above application note. You may also wish to refer to the BL652 Dev Kit User Guide or the BL654-DVK User Guide & Quick Start Guide

Why are multiple EMPTY_PDU are being sent from the Master per connection interval?

The communications protocol for Bluetooth is a ping pong type style, so every connection event begins with the Master sending the slave a packet and the Slave then responds to that packet with any data it may have. Therefore, when the Master has no data to transmit it will send an EMPTY_PDU to the Server and the Server, if it has data to send, will send back the data in response. You can see this readily where there is no data transmissions, the Master and Slave ping pong EMPTY_PDU’s back and forth on every connection event, if Slave Latency was incorporated then during these periods of no data transmissions you would see Master send EMPTY_PDU and no response from Slave because it has no data to send and was allowed to skip the connection event because of it.
 

Error received when flashing custom Nordic application to DVK-BL65x: SVCALL(SD_SOFTDEVICE_ENABLE, uint32_t, sd_softdevice_enable(nrf_clock_lf_cfg_t const * p_clock_lf_cfg, nrf_fault_handler_t fault_handler)); Programming custom Nordic App to DVK-BL65x

This error indicates and issue with the clock source referenced in your code. We recommend referencing the appropriate Application Note for Using the DVK-BL65x and Nordic SDK linked below:

As noted in the Application Note, by default the DVK-BL65x uses the on-chip RC oscillator as its clock source, as opposed to Nordic's development kit or dongle which use an external crystal. The difference in oscillator source should therefore be reflected in the SDK as shown Application Note. Alternatively, you can connect an external crystal as per BL65x DVK User Guide

How can I read out the MAC address from a BLE module during test/production?

A fast and convenient way to read out the MAC address of each module during a test/production process would be through SWD from FICR (Factory information configuration registers) registers DEVICEADDR[0] and DEVICEADDR[1]. The following command will read the MAC address from our BLE modules:

nrfjprog --memrd 0x100000A4 --w 8 --n 6

Please note that reading from memory through SWD will halt the CPU. If you need your application firmware to start afterwards (like for performing some test sequence) you would have to run the CPU with

nrfjprog –run

More information on FICR registers are available in the respective data sheets, like this for nRF52840 / BL654.

Is it possible to have multiple connections as a peripheral device on the BL65x modules?

Multiple connections as a peripheral device is currently not supported in smartBASIC on the BL65x modules. This functionality is supported in Nordic SDK beginning with SoftDevice S132 v.4.0.0.

However, as of the writing of this FAQ, this functionality has been brought out as an experimental feature in the smartBASIC firmware for the BL654/BL654PA only, as per the Release Notes for the v29.5.7.2.0 fw It is not documented in the smartBASIC Extensions User Guide at this time due to it being an experimental feature, and no additional support is currently available for this functionality.

If interested in testing with this experimental feature, the below test can be performed using two/three mobile devices (tablets/phones) as the central devices to demonstrate that two (or more) central role devices can connect to the BL654 configured as a peripheral at the same time. (This does not test GATT functionality or anything else.) While in interactive command mode:

at+cfg 205?   // Query the current MAX number of peripheral role connections  (User Guide still indicates the MAX this can be set to is 1)
at+cfg 206?   // Query the current MAX number of central role connections
 
27 0x00000001 (1)      //Response to MAX Peripheral role connections
00
27 0x0000000F (15)   //Response to MAX Central role connections
00

Increase the MAX Peripheral role connections and decrease the MAX Peripheral role connections and then reset the module for the settings to take effect:
at+cfg 205 3        //Configure Max Peripheral to 3
at+cfg 206 3       //Configure Max Central to 3
atz                       //Reset

In our testing we used the cmd.manager.sb sample application available from the BL654 Sample Application Repository on GitHub. After setting the MAX connection parameters and resetting the device load and run the cmd.manager.sb sample application.

The commands and parameters for cmd.manager are found in the comments section of the code: To simplify this for testing purposes enter the following command to start adverts:

 advert undirected 250 30000 0 

Explanation of the command from the code:

advert undirected #INTintervalms# #INTtimeoutms# #INTfilterpolicy#
// - Use this to start adverts of type ADV_IND using the parameters specified
// - #INTfilterpolicy# is 0=no filtering, otherwise set 1 to 4 which is the
// - whitelist handle created using the 'whitelist' command

This will start adverts for 30 seconds, adjust the INTtimeoutms setting if you want to advertise for longer. Then while it is advertising, connect to it using your phones/tablets (central role devices). If the advert times out before you connect the additional devices you can restart it with the advert
undirected 250 30000 0 command.

 

TX power of 1M and 2M in BL654PA is able to achieve 18dBm, and why TX power of LE CODED limit to 14dBm?

This is due to the PSD (power spectrum density) limitation in FCC and IC.

How do I program BL65x modules in production or in the field (Tag-Connect)?

Consider using a PCB pad layout with support for Tag-Connect for JTAG which allows for easy, low cost programming in production or in the field.

Note: Laird recommends you use JTAG (2-wire interface) to handle future BL65x module firmware upgrades. You MUST wire out the JTAG (2-wire interface) on your host design , where four lines should be wired out, namely SWDIO, SWDCLK, GND and VCC. Firmware upgrades can still be performed over the BL65x UART interface, but this is slower (60 seconds using UART vs. 10 seconds when using JTAG) than using the BL65x JTAG (2-wire interface).

What factors influence the actual TX rate of the controller?

The actual TX rate is influenced by the PDU and MTU sizes along with the Connection Intervals and Slave Latency.

Do I have to use the Segger branded debugger to program over the 2-wire SWD interface (JTAG) of the Nordic-based modules?

Yes, any programmer/debugger that supports the SWD 2-wire interface and the Cortex M4F processor should work with the Nordic-based modules. You can find information about the memory map in the nRF5xxxx Product Specification under the Memory and NVMC sections.

Is there a way to extend the shelf life of Laird modules?? If the shelf life cannot be extended in any way, what are the consequences of using modules after shelf life?

The shelf life statements are essentially to prevent mishandling of the product and not storing it properly. If the modules are still sealed in the package, stored at the proper temperature and have not been exposed to moisture they should be fine. However, when working with modules beyond their shelf life you MUST bake the modules before populating the them to your board. Failure to bake the modules could result in the yield rate dropping down lower than expectation due to popcorn or de-lamination on the modules. It is recommended that you follow IPC/JEDEC J-STD-033 which is the general standard for the handling, packing, shipping and use of moisture/reflow sensitive surface mount devices.

Our main concern is around the castellation/pads which solder the module to the board. It is imperative those pads do not get tarnished, as this would cause soldering issues. Humidity can affect solderability as well, as if there is any excess moisture in the solder on the module, during reflow of the module to the board, steam balls can essentially explode the solder and sometimes result in an open circuit (or possibly a short circuit).

As long as all of the moisture handling and temperature guidelines are being followed you will likely have no issues. It is further recommended that when you do the build with modules that have exceeded their shelf life that you start with a handful to perform a test run and do a final test to make sure all is working as expected. As long as there are no issues with the initial test run we would expect that you will not experience any problems.

Why is the data I am sending in an advertisement PDU seem to be received as converted ASCII data?

When sending extended or normal advertisements by setting AD Elements for scan or advertise response PDU’s using AT+AARA tag,<payload> or At+ASRA tag, <payload> the parser is expecting the payload to be a string enclosed by quotes.

However, how do you differentiate between a normal text string and a string of ASCII hex?

Is FF 0x46 0x46

Or is it

0xFF.

For example if the data added in the response packet is:

T+AARA tag, “BEEF”

The parser interprets this as a four byte string of 0x42, 0x45, 0x45, 0x46

If the command is changed to:

At+AARA tag, “\BE\EF” the parser would interpret this as a two byte string of 0xBE, 0xEF. The slash interprets the following two characters as ONE hex byte.

What could be causing additional power draw when in standby doze state?

There are several functions within an application that can increase current consumption above the measurement indicated in the Datasheet for standby doze, low power mode.

  • Timers
  • GPIOs held in an asserted state
  • LEDs
  • Nested functions - which keep the module from entering the standby doze state
  • UART (when open)