System Architecture Overview
The BLE Sniffer application consists of two tightly integrated software components:
-
Firmware on the FRDM-MCXN947 Development Board
This firmware serves as the host controller and manages bidirectional communication with the BLE radio module (MCXW236B) via a dedicated serial manager. It transmits a precise sequence of Host Controller Interface (HCI) commands over UART to configure the MCXW236B Click Board as a Bluetooth Low Energy (BLE) sniffer operating in GAP Central node. Once configured, the firmware continuously receives raw HCI event blocks from the Click Board, enabling the host to capture and process BLE traffic for further decoding and analysis. -
HCI Firmware on the MCXW236B Click Board
The Click Board runs a dedicated HCI image that enables it to function as a BLE packet capture device. It behaves as an HCI black box, meaning it does not interpret or process BLE traffic internally but instead forwards raw HCI event data to the host for decoding.
Data Flow and Processing
- The FRDM-MCXN947 board receives raw HCI event packets from the MCXW236B Click Board.
- These packets are aggregated and parsed to extract relevant sensor data using a custom decoding layer.
- Non-sensor or malformed data is filtered out to optimize processing and visualization.
- The decoded data is structured according to the SBDT (Sensor Beacon Data Types) specification, which maximizes the utility of the 31-byte BLE advertising payload by encoding multiple sensor readings efficiently.
Software Deployment
- The source code provided targets the FRDM-MCXN947 board, including the serial manager, HCI command sequences, and data parsing logic.
- The HCI firmware image for the MCXW236B Click Board must be generated separately using the MCXW236B SDK on Visual Studio Code (latest version). Refer to the TBD section for detailed instructions on building and flashing the HCI image.
Graphical User Interface
- The main GUI of the BLE Sniffer application was developed using GUI Guider, a visual design tool for embedded UIs.
- The GUI displays real-time sensor data captured via BLE, including voltage and temperature readings, and provides controls for initiating single or continuous conversions.
- MCUXpresso IDE v24.12.148 or later
- MCXUpresso SDK 24.12.00 for FRDM-MCXN947
- Visual Studio Code (latest) with MCUXpresso extension for MCXW236B
The following steps will guide you through setting up the software environment.
- Download MCUXPresso and install it following the installer instructions.
- Download the FRDM-MCXN947 SDK and install it in MCUXPresso by draging and droping SDK zip into "Installed SDK" view into MCUXpresso IDE.
- Download Visual Studio Code (target your Operating System) and install it following the installer instruction.
- Download and install Git v2.39.0 or later (for cloning and running west commands).
The Software environment for the MCXW23 MCU is VS Code. Please consider also the Getting started with MCUXpresso for Visual Studio Code as a starting point for VS Code.
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.
In addition to the presented software, the following SDK example applications are required:
- ble_controller/hci_bb/hci_bb_mcxw23 (SDK example for MCXW236B Click board)
- Additional resources: GitHub SDK for Bluetooth Wireless platforms - details . Below a screenshot for SDK project selection:
For the Bluetooth LE Sniffer based on the MCXW23 HCI Black Box, the following hardware is required:
-
NXP FRDM-MCXN947 MCU board
Flashed with the firmware from this repository in MCUXpresso;

-
NXP MCXW236 - Click
Flashed with the SDK example: frdmmcxw23_hci_bb_mcxw23 firmware from the GitHUB SDK package imported from Visual Studio Code.

Below is an overview of the setup using FRDM_MCXN947 and MCXW236 Click Board.

Provisioning the FRDM-MCXN947 Board
The following steps describe how to setup the system and how to flash both boards: the FRDM-MCXN947 board using MCUXpresso and the MCXW236B Click board with Visual Studio Code.
- Check that the switch SW1 In the LCD is set to 010 (16bits 8080) and plug-in the LCD in the board (use the next image like reference) you should connect the LCD in the J8 header with two pins free in the top of the header.
- Plug-in the MCXW236B Click board atop the native mikroe slot of the FRDM board.
- Then plug-in the USB cable between the host PC and the FRDM-MCXN947.
At this point, it is assumed that all required SW was already downloaded and installed (refer to Software section).
- Open MCUXpresso IDE and select a directory to create your workspace.
- Go to "Quickstart Panel" and click on "Import from Application Code Hub".

- Enter "ble_sniffer" in search bar. Select project card.
- Click "GitHub link" within wizard to copy GITHUB information into IDE wizard.

- Continue to follow the default steps of the Wizard. Click Next, Click Next for "main" branch.
- Select the desired destination to store the imported project. Initial branch = main. Click Next.
- Click next to select the discovered Eclipse projects.
- Click Finish to complete the import into workspace.

- Right click on project and select build to start building the project.
Provisioning the MCXN236B Click Board
This section describes the steps required to flash the Bluetooth LE HCI Black Box application using VS Code, user interactions, and testing methods for the BLE Sniffer use case application.
-
Open VS Code and import the MCUSDK repository to a local folder. This action will take some time, wait for its completion before continue...

-
Open the file hci_uart.h and update the Baudrate to 230400 bd.
#define HCI_UART_BAUDRATE (230400u)
- 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), replace <project_path> with your project path:
loadbin C:\<project_path>\hci_bb_mcxw23.bin, 0
Device Behavior After Flashing:
- After flashing, the device enters idle mode, awaiting initialization commands from the FRDM-MCXN947 development board.
- Once the FRDM-MCXN947 boots up, it transmits a configuration sequence to the HCI Black Box (MCXW236B Click Board) to enable BLE scanning mode.
- Upon successfully capturing BLE advertising packets, the device forwards the raw HCI event data to the FRDM-MCXN947 for decoding and filtering
At this step, we are considering that all the boards are correctly flashed.
Below are the steps to run the demo:
- The LCD display presents structured data from nearby sensors broadcasting their parameters via BLE advertising packets. The graphical user interface (GUI) provides a toggle feature that allows users to switch between viewing decoded sensor values and raw data formats for enhanced analysis and debugging.
- The BLUE LED will blink approx. for 200ms each time a sensor advertising package has been detected.
To verify UART communication between the FRDM‑MCXN947 host application and the MCXW236B Click Board (HCI application), connect a logic analyzer to the UART RX and TX pins on the mikroE slot and observe the HCI traffic to confirm proper data exchange.
- 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 | December 17th 2025 |





