The Bluetooth LE FSCI Host application demonstrates a host-side implementation for the Health Thermometer use case. It is designed to work alongside the FSCI Blackbox application, which runs on platforms such as the MCXW236 Click Board, FRDM-MCXW236, or other compatible Bluetooth LE wireless MCUs.
In this setup, the Host application runs on the FRDM-MCXN947 board and communicates with the FSCI Blackbox via the FSCI protocol over UART. This protocol enables structured messaging between the host and the wireless MCU, allowing for control and data exchange in Bluetooth LE scenarios.
- FSCI protocol Overview: FSCI Protocol Documentation
- Complete list of FSCI Bluetooth LE Host Commands: BLE Host Stack FSCI APIs
This setup is suitable for developers designing modular Bluetooth LE systems where the host MCU and radio MCU are implemented on separate hardware platforms. It demonstrates how NXP standardized FSCI messaging over UART can be used to manage BLE communication between the host and the wireless MCU. By following this approach, developers can integrate and expand the Bluetooth LE functionality into host-controlled applications with enhanced flexibility, scalability and maintainability.
The software presented in this package is a standalone example based on the GitHub SKD 25.06.00.
The application behaves as a GAP central node. It enters the GAP Limited Discovery Procedure and searches for Health IoT Peripheral devices to pair with. After pairing, it configures the characteristic descriptor to report the temperature on the peer device and displays the received temperature values on a terminal connected to the UART(USB) port.
The application uses pairing with bonding by default. When connected with the Health IoT Peripheral application, it sends the 999999 passcode to the host stack by default.
Supported development and build environments are:
- Linux OS
- Windows OS
The build system uses cmake
and gcc
for ARM. For more details, please refer to the mcuxsdk repository.
For debugging, software download and development purpose, VS Code with MCUXpresso plugin and Segger Jlink version 8.44a or newer needs to be installed.
Please consider also the Getting started with MCUXpresso for Visual Studio Code as a starting point for VS Code.
In addition to the presented software, the following SDK example applications are required:
-
ble_fsci_black_box SDK example for the FRDM-MCXWxx board.
Note The MCXW236-Click board comes pre-flashed with this firmware.
-
health_care_iot_peripheral SDK example for the FRDM-MCXW236 board, which operates as a Bluetooth LE Peripheral device, implementing the Bluetooth SIG Health Thermometer Service:
/*! Health Thermometer Service UUID */
#define gBleSig_HealthThermometerService_d 0x1809U
GitHub SDK for Bluetooth Wireless platforms - details . Below a screenshot for SDK project selection:
For the Bluetooth LE FSCI hosted application the following hardware is required:
- NXP FRDM_MCXN947 - flashed with the firmware from this repository;
- [NXP MCXW236 - Click] or other NXP wireless Bluetooth LE FRDM board ( FRDM-MCXW71, FRDM-MCXW72, FRDM-MCXW236 ) - flashed with SDK example: ble_fsci_black_box firmware from the SDK package.
The Connection between FRDM_MCXN947 and FSCI BB application is done via UART5 available on the J5/J6 Headers (Mikro-Bus Header)
Below is an overview of the setup using FRDM_MCXN947 and MCXW236 Click Board:
For the peer device, the NXP FRDM-MCXW236 is required - flashed with health_care_iot_peripheral SDK Example:
This section describes the steps required to flash the Bluetooth LE FSCI Host application using VS Code, user interactions, and testing methods for the health care use case application:
-
clone the repository to a local folder;
-
Open VS Code, select File -> Open Folder...
-
Select the folder containing the fsci_host_frdmmcxn947 you want to import:
- Select Toolchain and press Import button:
- Source code is under armgcc folder:
- For documentation, please refer to README file -> Preview option:
- Select the project, right click and press Pristine Build.
- Result of the build is in the Terminal Window:
- VS Code flashing - Select Debug Probes, Select project and press Run -> Run Without Debugging (CTRL+F5):
- Alternative option is to use Segger/j-link (if the board is flashed with Jlink firmware):
loadbin C:\work\fsci_host_frdmmcxn947\armgcc\fsci_host_ble_frdmmcxn947.bin, 0
- VS Code debug - Select Debug Probes, Select project and press Run -> Start Debugging (F5):
Device Behavior After Flashing:
- Once the board is flashed, the device enters idle mode, indicated by the RGB LED flashing White.
- To begin scanning, press the SW3 button.
- During the GAP Limited Discovery Procedure (part of GAP General Discoverable Mode), the RGB LED changes to flashing Blue.
- When the node successfully connects to a peer device, the RGB LED turns solid Green.
- To disconnect the node, press and hold the SW3 button for 2–3 seconds. The RGB LED will return to flashing White, indicating the device is back in idle mode.
At this step, we are considering that all the boards are correctly flashed.
Below are the steps to run the demo:
- Open a serial port terminal for FRDM-MCXN947 (Baudrate 115200). The following screen will be displayed after reset:
- Open a serial port terminal for FRDM-MCXW236 (Baudrate 460800). After reset the device is automatically starting the advertising and measuring and displaying the temperature.
- Press the SW3 button on the FRDM-MCXW236 board to initiate scanning.
- Once the RGB LED turns solid green, the device has successfully connected, and pairing begins automatically.
- The application uses pairing with bonding by default. When connected to the Health IoT Peripheral app, it automatically sends the passcode 999999 to the host stack.
- After pairing, the application configures the characteristic descriptor to enable temperature reporting from the peer device and displays the received temperature values on the terminal.
Note The Long-Term Key (LTK) for the connection is displayed in the serial log. This key can be used to decode over-the-air packet exchanges for debugging or analysis purposes.
- To disconnect, press and hold the SW3 button for 2–3 seconds. The RGB LED will switch back to flashing white, indicating the device has returned to idle mode.
- A disconnect message will be displayed in the serial log for confirmation.
Note Non-Volatile memory is enabled by default on this application, after reset of the board the pairing details are restored. To erase the stored data, use an external J-Link debugger or use the GAPRemoveAllBondsRequest FSCI command.
For a detailed description of the application's behavior, please refer to Section 3.2 – Step 4.
Using an over-the-air sniffer, the following logs were captured during the application's operation:
- initial connection:
- behavior after reset (pairing restored):
To check the UART communication between FRDM-MCXN947(FSCI Host application) and MCXWxx (FSCI BB Application) connect a logic analyzer on the J5 header - pin4 and pin5 and confirm the FSCI communication:
- Reach out to NXP Wireless Community page for more support - NXP Wireless Community
Questions regarding the content/correctness of this example can be entered as Issues within this GitHub repository.
Warning: For more general technical questions regarding NXP Microcontrollers and the difference in expected functionality, enter your questions on the NXP Community Forum
Version | Description / Update | Date |
---|---|---|
1.0 | Initial release on Application Code Hub | August 29th 2025 |