FRDM Training Hub

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

FRDM Training Hub

FRDM Training and resources
Refer to here to explore available training materials and resources for FRDM development boards for microcontrollers and i.MX Application Processors to help you identify available content for you.

Discussions

Sort by:
FRDM Training and Resources This article provide a guide of available resources for FRDM Development boards to help you to find and use available resources (Boards, Guides, Hands-On Trainings and more)
View full article
Whether you're a student, hobbyist, or professional developer, the FRDM Development Platform by NXP is your gateway to building powerful embedded applications—quickly and affordably. In this beginner-friendly guide, you’ll learn: What FRDM boards are and how they compare to other NXP evaluation kits Who the platform is designed for How to buy and get started with your first board What’s new in the latest FRDM series featuring MCX microcontrollers and i.MX processors How the FRDM ecosystem supports your development with modular hardware, software tools, and ready-to-use code examples
View full article
Customer may want to deploy Android 14 on FRDM-iMX8MP. This doc gives an introduction about how to deploy Android OS14 on FRDM-iMX8MP   Hardware: FRDM-iMX8MP, Power supply cable, usb cable x2,  Ubuntu PC Outline: Follow the below steps: Setup the Android 14 source environment based on LF6.6.36. Apply FRDM-iMX8MP patches in kernel, uboot, mkimage, and device directory. Build the image for FRDM-iMX8MP Flash the image   1. Setup the environment On the Linux PC, set up the Android Source environment according to Section 2- Section 3 from the Android User’s Guide Rev. android-14.0.0_2.1.0 and do not build the image yet. $ cd ~ (or any other directory you like) $ tar xzvf imx-android-14.0.0_2.1.0.tar.gz To generate the i.MX Android release source code build environment, execute the following commands: $ source ~/imx-android-14.0.0_2.1.0/imx_android_setup.sh Prepare the build environment for U-Boot and Linux kernel. This step is mandatory because there is no GCC cross-compile tool chain in the one in AOSP codebase. An approach is provided to use the self-installed GCC cross-compile tool chain for both AArch32 and AArch64. Change to the top-level build directory and set up the environment for building. This only configures the current terminal $ cd ${MY_ANDROID} $ source build/envsetup.sh 2. Apply FRDM-iMX8MP patches into AOSP   Apply the patch in device/nxp, copy all the patches into android_build/device/nxp, and then running the command: $ git apply --check 0001-device-nxp-add-FRDM-i.MX8MP-Android14-basic-support.patch $ git apply 0001-device-nxp-add-FRDM-i.MX8MP-Android14-basic-support.patch Apply the patches in uboot, copy all the patches into android_build/vendor/nxp-opensource/uboot-imx, and then running the command: $ git am *.patch Apply the patches in kernel, copy all the patches into android_build/vendor/nxp-opensource/kernel-imx, and then running the command: $ git am *.patch Apply the patch in mkimage, copy all the patches into android_build/vendor/nxp-opensource/ imx-mkimage, and then running the command: $ git am *.patch     3. Build the image for FRDM-iMX8MP Execute the Android lunch command: $ lunch frdm_8mp-trunk_staging-userdebug Execute the imx-make.sh script to generate the image. $ ./imx-make.sh -j4 2>&1 | tee build-log.txt NOTE: The following outputs are generated by default in ${MY_ANDROID}/out/target/product/frdm_8mp:   4. Flash the image The board image files can be flashed into the target board using Universal Update Utility (UUU). For the UUU binary file, download it from GitHub: uuu release page on GitHub.  To achieve more flexibility, two script files are provided to invoke UUU to automatically flash all Android images. uuu_imx_android_flash.sh for Linux OS uuu_imx_android_flash.bat for Windows OS For this release, these two scripts are validated on UUU 1.5.179 version. Download the corresponding version from GitHub: For Linux OS, download the file named uuu. For Windows OS, download the file named uuu.exe. Perform the following steps to download the board images: Download the UUU binary file from GitHub as described before. Install UUU into a directory contained by the system environment variable of "PATH". Make the board enter serial download mode. Change the board's SW5 (boot mode) to 0001 (from 1-4 bit) to enter serial download mode. Power on the board. Use the USB cable to connect the USB 3.0 dual-role port (with silkprint "PORT1") on the board to your host PC. On the Linux system, open the shell terminal. For example, you can execute a command as follows: $ sudo ./uuu_imx_android_flash.sh -f imx8mp -p frdm -a -e On the Windows system, open the command-line interface in administrator mode. The corresponding command is as follows: $ uuu_imx_android_flash.bat -f imx8mp -p frdm -a -e NOTE: If you want to change the dtb, you can add -d dtb_feature. Also, you can check all the info by using the command: uuu_imx_android_flash.bat Power off the board and Change the board's SW5 (boot mode) to 0010 (from 1-4 bit) to enter emmc boot mode
View full article
This article will give a brief introduction of FRDM-IMX8MPLUS software release, including Yocto BSP release and Debian release. FRDM-IMX Yocto BSP Release i.MX FRDM Development software release contains prebuilt images, documentation, and i.MX FRDM Yocto layer for FRDM-IMX boards. It also includes support for Matter.  Based on i.MX SW 2024 Q3 BSP release Linux kernel: 6.6.36_2.1.0 u-boot: 2024.04 i.MX FRDM Yocto layer source: https://github.com/nxp-imx-support/meta-imx-frdm For more details, please check i.MX FRDM Software User Guide. FRDM-IMX8MPLUS accessories and corresponding dtb: 7-inch Waveshare LCD: imx8mp-frdm-waveshare.dtb DY1212W-4856 LVDS: imx8mp-frdm-boe-wxga-lvds0-panel.dtb imx8mp-frdm-boe-wxga-lvds1-panel.dtb RPI-CAM-MIPI MIPI CSI: imx8mp-frdm-ap1302.dtb imx8mp-frdm-dual-ap1302.dtb IMX-OS08A20 MIPI CSI: imx8mp-frdm-os08a20.dtb imx8mp-frdm-dual-os08a20.dtb 8MIC-RPI-MX8: imx8mp-frdm-8mic.dtb 2EL M.2 Module: imx8mp-frdm-iw612-otbr.dtb Build FRDM-IMX8MPLUS Yocto image: Download i.MX SW 2024 Q3 release: $ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-scarthgap -m imx-6.6.36-2.1.0.xml $ repo sync Integrate meta-imx-frdm layer into Yocto code base: $ cd ${MY_YOCTO}/sources $ git clone https://github.com/nxp-imx-support/meta-imx-frdm.git Yocto project setup: $ cd ${MY_YOCTO} $ MACHINE=imx8mpfrdm DISTRO=fsl-imx-xwayland source sources/meta-imx-frdm/tools/imx-frdm-setup.sh -b frdm-imx8mp Build images: $ bitbake imx-image-full Flash SD card image using dd: $ zstdcat imx-image-full-imx8mpfrdm.rootfs.wic.zst | sudo dd of=/dev/sdx bs=1M && sync Or use uuu to burn image to SD card: $ uuu -b sd_all imx-image-full-imx8mpfrdm.rootfs.wic.zst FRDM-IMX8MPLUS Matter Support Based on i.MX Matter 2024 Q3 To include Matter support, please follow below steps to include Matter layer into Yocto build. Download i.MX SW 2024 Q3 BSP Release: $ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-scarthgap -m imx-6.6.36-2.1.0.xml $ repo sync Download i.MX Matter Yocto layer: $ cd ${MY_YOCTO}/sources/meta-nxp-connectivity $ git remote update $ git checkout imx_matter_2024_q3 Integrate meta-imx-frdm layer into Yocto code base: $ cd ${MY_YOCTO}/sources $ git clone https://github.com/nxp-imx-support/meta-imx-frdm.git Yocto Project Setup: $ cd ${MY_YOCTO} $ MACHINE=imx8mpfrdm-matter DISTRO=fsl-imx-xwayland source sources/meta-imx-frdm/tools/imx-frdm-matter-setup.sh bld-xwayland-imx8mpfrdm Build images: $ bitbake imx-image-multimedia FRDM-IMX8MPLUS Debian Release FRDM-IMX8MPLUS has support on Debian 12 OS. i.MX Debian Linux SDK distribution is a combination of NXP-provided kernel and boot loaders with a Debian distro user-space image, which includes: Debian-based rootfs Debian Base (basic packages) Debian Server (more packages without GUI Desktop) Debian Desktop (with GNOME GUI Desktop) Linux kernel BSP components various applications (graphics, multimedia, networking, connectivity, security, and AI/ML) For more details of NXP Debian Linux SDK Distribution, please check NXP Debian Linux SDK User Guide. Quick Start with Debian: To create an SD card with Debian for FRDM-IMX8MPLUS, please follow below steps. Download flex-installer on the Linux host $ wget http://www.nxp.com/lgfiles/sdk/lsdk2412/flex-installer $ chmod +x flex-installer $ sudo mv flex-installer /usr/bin Plug the SD card into the Linux host and install the images as below # format SD card $ flex-installer -i pf -d /dev/sdx # automatically download and install images into SD card $ flex-installer -i auto -d /dev/mmcblk1 -m imx8mpfrdm Plug the SD card into FRDM-IMX8MPLUS board and install the extra packages as below  1. Setup Ethernet network interface by DHCP or setting it manually $ dhclient -i end0 2. Set correct system time, for example $ date -s "22 Nov 2024 09:00:00" 3. Install extra packages for GNOME GUI Desktop version $ debian-post-install-pkg desktop 4. Or install extra packages for Server version without GUI Desktop $ debian-post-install-pkg server 5. After finishing the installation, run the reboot command to boot up the Debian Desktop/Server system Building Debian Images with Flexbuild: To build Debian image with Flexbuild for FRDM-IMX8MPLUS, please follow below steps. Set up the build environment $ git clone https://github.com/nxp/flexbuild $ cd flexbuild && source setup.env #Continue to run commands below in case you need to build in Docker due to lack of Ubuntu 22.04 or Debian 12 host $ bld docker $ source setup.env Build image with Flexbuild $ bld -m imx8mpfrdm Flexbuild usage: To build individual part of the image, please check below command list for Flexbuild usage. $ bld uboot -m imx8mpfrdm (compile u-boot image for imx8mpfrdm) $ bld linux (compile linux kernel for all arm64 i.MX machines) $ bld bsp -m imx8mpfrdm (generate BSP firmware) $ bld boot (generate boot partition tarball including kernel, dtb, modules, distro bootscript for iMX machines) $ bld multimedia (build multimedia components for i.MX platforms) $ bld rfs -r debian:server (generate Debian server rootfs) $ bld apps -r debian:server (compile apps against runtime dependencies of Debian server RootFS) $ bld merge-apps -r debian:server (merge iMX-specific apps into target Debian server RootFS) $ bld packrfs -r debian:server (pack and compress target debian server rootfs) Related Documentation i.MX FRDM Software User Guide i.MX Debian Linux SDK User Guide More information about i.MX productions can be found at(http://www.nxp.com/imxlinux) i.MX Yocto Project User’s Guide​ i.MX Linux User’s Guide​ i.MX Linux Reference Manual​ i.MX Porting Guide Debian documents at http://www.nxp.com/nxpdebian
View full article
  FRDM-IMX8MPLUS Hardware Introduction The FRDM i.MX 8M Plus development board is a low-cost and compact development board with NXP i.MX 8M Plus applications processor. On-board NXP IW612 Tri-Radio module supports Wi-Fi 6 + Bluetooth Low Energy 5.4 + 802.15.4. NXP releases Debian every six months and releases Yocto every year for this board. The FRDM i.MX 8M Plus development board is ideal for developing modern Industrial and IoT applications.   Get to know FRDM-IMX8MPLUS Development Boaard     Specifications   4× Arm® Cortex®A53 + 1× Arm Cortex-M7 LPDDR4 32-bit 4GB eMMC 5.1, 32GB QSPI NOR flash, 32 MB Power Management IC (PMIC) MicroSD 3.0 card slot One USB 3.0 Type-C connector One USB 2.0 Type-C for debug One USB 3.0 Type-A connector One USB Type-C PD only Onboard Wi-Fi® 6 + Bluetooth® LE 5.4/802.15.4 module Optional M.2 Key-E for Wi-Fi/ BT/802.15.4 M.2 Key-M for SSD Multiple display interface:               - MIPI-DSI connector           - 2x4 data lane LVDS w/ Backlight           - HDMI connector Two MIPI-CSI connectors One 2x5 Pin NXP custom interface with:          - One CAN port          - I2C expansion Two 1 Gbps Ethernet - Port0 supports POE          - Port1 supports TSN External RTC with coin cell connector 40 pin (2 x 20) expansion I/O   Feature FRDM-IMX8MPLUS eMMC 32GB DRAM Micron 4GB PMIC PCA9450C WiFi Module u-blox MAYA-W276 on-board USB Type-C+Type-A ENET 2xGbE M.2 (Key E) SDIO WiFi / BT Y (rework needed) M.2 (Key M) PCIE Y HDMI Y MIPI DSI Panel 22 Pins FPC HDR LVDS Panel 40 Pins 2mm HDR MIPI CSI camera 22 Pins FPC HDR 2x20 Expansion Interface Y CAN BUS Y MicroSD Y UART Y Audio WM8962B Remote Debug N NXP Connector (CAN, I2C) Y Power Connector Type-C PCB layers 6 Board DIM 12x13cm       NXP Devices On-Board PMIC PCA9450C USB PD TCPC PHY IC PTN5110 High-Voltage USB PD Power Switch NX20P5090UK I2C  Extends  GPIO PCAL6416A USB3.0 Switch CBTL02043A I2C Repeater PCA9509PDP Bi-directional Level Shifter NTS0104 CAN Transceiver TJA1051T/3 USB Sink & Source combo power switch NX20P3483UK USB Type-C CC and SBU Protection IC NX20P0407 Real-time clock/calendar PCF2131 Wi-Fi, BT, 802.15.4 Tri-Radio IW612 (in u-blox Module)     Expansion Boards   RPI-CAM-MIPI: IAS camera to 22 Pins FPC camera adapter Waveshare 7'' DSI LCD: 7inch Capacitive Touch, 1024×600 DY1212W-4856 TFT LCD panel with LVDS interface: 12.1" (WXGA) TFT LCD panel with LVDS interface ​8MIC-RPI-MX8: 8-microphone array proto board for voice enablement   Useful Links −i.MX Yocto Project User’s Guide​ −i.MX Linux User’s Guide ​−i.MX Linux Reference Manual​ −i.MX Porting Guide -i.MX Debian Linux SDK User Guide
View full article
MCX W series are secure, wireless MCUs designed to enable more compact, scalable and innovative designs for the next generation of smart and secure connected devices. The MCX W series, based on the Arm® Cortex®-M33, offers a unified range of pin-compatible multiprotocol wireless MCUs for Matter™, Thread®, Bluetooth® Low Energy and Zigbee®. MCX W enables interoperable and innovative smart home devices, building automation sensors and controls and smart energy products.   MCX W71 Hands on Training   FRDM-MCXW71: NBU and User Firmware Update Using ISP:   This hands-on describes how to update the code in NBU and the User firmware using the ISP. FRDM-MXCW71: Recognize NBU Incompatible Versions            The objective in this hands-on, is to learn how to recognize when the NBU firmware does not match with the SDK version. FRDM-MCXW71: Run Hello World SDK Demo           In this lab we will first import the MCUXpresso SDK for the MCX W71 Freedom board into MCUXpresso IDE and then we will build, flash and debug the hello world project to make sure the environment is set for the following Labs. FRDM-MCXW71: Run Blinky LED SDK Demo          In this lab we make some experience with the FRDM-MCXW71 board using the SDK project to implement a simple LED blinking. Once we will get familiar with the example project, we will integrate simple modifications FRDM-MCXW71: Wireless UART IoT Toolbox Demo          Goal of this lab is to show the SDK example implementing the wireless UART profile and we will move forward in making some meaningful modifications to the example itself with the goal to show where in the code the end user should enter the relevant application software for the application. FRDM-MCXW71: Low Power Reference Desing SDK Demo          This hands-on describes how to run the Low Power Reference Design demo on FRDM-MCXW71. Two low-power reference design applications are provided in the SDK reference_design folder, these applications aim at providing: • A reference design application for low power/timing optimization on a Bluetooth Low Energy application. These can be used in first intent for porting a new application on low power. • A way for measuring the power consumption, wake-up time, and active time in various power modes.   MCX W72 Hands on Training  Coming Soon!   MCX W23 Hands on Training  FRDM-MCXW23: LED Blinky In this lab we make some experience with the FRDM-MCXW23 board using the SDK project to implement a simple LED blinking. Once we will get familiar with the example project, we will integrate simple modifications. FRDM-MCXW23: Wireless UART IoT ToolBox the Goal of this lab is to show the SDK example implementing the wireless UART profile and we will move forward in making some meaningful modifications to the example itself with the goal to show where in the code the end user should enter the relevant application software for the application. FRDM-MCXW23: Hello World In this lab we will first import the MCUXpresso for Visual Studio Code SDK for the MCX W23 Freedom board into the MCUXpresso extension for Visual Studio Code and then we will build, flash and debug the hello world project to make sure the environment is set for the following Labs. FRDM-MCCXW23: Low Power Reference Design This hands-on describes how to run the Low Power Reference Design demo on FRDM-MCXW23. Two low-power reference design applications are provided in the reference design folder for the MCXW23: Low power peripheral application demonstrating the low power feature on an advertiser peripheral Bluetooth LE device. Low power central application demonstrating the low power feature on a scanner central Bluetooth LE device. Wireless Connectivity Trainings Bluetooth Low Energy  Introduction to Thread Network
View full article
Hands On This hands-on describes how to run the Low Power Reference Design demo on FRDM-MCXW23. Two low-power reference design applications are provided in the reference design folder for the MCXW23: Low power peripheral application demonstrating the low power feature on an advertiser peripheral Bluetooth LE device. Low power central application demonstrating the low power feature on a scanner central Bluetooth LE device. These applications aim at providing: A reference design application for low power/timing optimization on a Bluetooth Low Energy application. These can be used in first intent for porting a new application on low power. A way for measuring the power consumption, wake-up time, and active time in various power modes. The default low-power mode used in different modes are shown as follows: CM33 (core main power domain) and RADIO (core radio power domain) could be active in of the state as follows: – Sleep mode – Deep-sleep mode – Power-down mode – Deep-power down mode CM33 is woken up (core wake-up power domain) and performs system initialization and some pre-processing RADIO woke-up and transceiver are ready to operate. If the software allows, the CM33 can enter in Inactive mode: The transceiver is performing one or more RX/TX sequences CM33 is processing the received or transmitted packets The transceiver is put back in Sleep mode CM33 enters low-power (Deep-sleep mode)   Running the Health care IoT reference design application Once the MCXW23 device is programmed with the low-power reference design demo project, and after a power cycle, it starts to advertise every 1000 mS as soon as the hardware and software initializations are completed. When advertising stops the main domain and radio domain will go to Deep-sleep mode. The MCU stays in this mode until the wake-up from one of the wake up sources. By default, the wake up sources are the wake up button, timer IRQ watchdog IRQ. At wake-up, the device starts to advertise immediately, just like waking up from a Power-On-Reset. Running the low-power central reference design application   The application behavior is as follows: At POR, start scanning immediately, scanning stops on connection establishment. It establishes automatically a connection with a low-power reference design application (lp refdes app) or a temperature sensor by checking the temperature sensor service's UUID in the advertising message and retrieves the temperature value. Note that Low Power Reference Design needs to connect to the peripheral application having an RSSI value lower than the threshold, to accomplish this try to keep the boards close to each other at the beginning. On disconnect, the Application core and radio core go to Deep Sleep mode with full RAM retention. If gAppRestartScanAfterConnect is set to 1, the radio core restarts the scan activity. Application core still goes to Deep Sleep mode between messages from CM3. SW2 button has no effect. Shell over LPUART peripheral outputs scanning, connection information, and temperature value.   Hardware Requirements   FRDM-MCX23 Board x 2 Personal Computer Type C USB Cable x 2 Ammeter to measure current (Optional)   Software Requirements   IDE: Visual Studio Code 1.91.1 SDK: SDK v2.16.100 for FRDM-MCXW71 SPSDK Tool Windows OS (It was used Windows 10 for this hands-on) NXP IoT Toolbox (For Android or iOS device) Hardware changes to measure current In order to measure the current consumption in FRDM-MCX23 we have the following options: Measure current in JP4. This will give you the overall consumption of the board, but this will not require hardware modifications. Measure current in JP1. This is the current for peripheral circuits in the board. For this option JP1 must be populated and SH200 must be cut. Measure current in JP2. This is the MCU current consumption. For this option JP2 must be populated and SH201 must be cut.     For this hand on we will measure current in JP2 to get the MCU consumptions in low power.   Note: In order to make downloads in NXP website, it is necessary to have an account. Please, register and log-in for moving forward. MCUXpresso for Visual Studio Code MCUXpresso for Visual Studio Code (VS Code) provides an optimized embedded developer experience for code editing and development. The extension enables NXP developers to use one of the most popular embedded editor tools and provides an easy and fast way to create, build and debug applications based on MCUXpresso SDK or Zephyr projects.               Install it following the next steps: Download Visual Studio Code from Microsoft Store or visual studio code web page Download Visual Studio Code - Mac, Linux, Windows Access to vscode for MCUX wiki and download MCUXpresso Installer  Dependency Installation · nxp-mcuxpresso/vscode-for-mcux Wiki · GitHub Run MCUXpresso Installer and for this Hands On install at least MCUXpresso SDK Developer Arm GNU Toolchain PEmicro   Installing the FRDM-MCXW23 SDK v 25.06.00. Each MCU has its own SDK that includes driver, examples, middleware, docs and other components. To get and build the demo, let’s install the SDK into VS Code:        Once MCUXpresso for Visual Studio Code is installed open VS Code. Go to MCUXpresso for VS Code extension that is on the tools column at the left. Look for INSTALLED REPOSITORIES option and press ‘+’. Detail steps are described in                                                    Use the steps for import a remote Git repository wiki page. Working with MCUXpresso SDK · nxp-mcuxpresso/vscode-for-mcux Wiki · GitHub Search for Revision v25.06.00 or newer and complete installation.   Installing SPSDK. The SPSDK is a unified, reliable, and easy to use Python SDK library working across the NXP MCU portfolio providing a strong foundation from quick customer prototyping up to production deployment. The library allows the user to connect and communicate with the device, configure the device, prepare, download, and upload data including security operations. Follow next steps for installation: Create python virtual environment. Open a Command Prompt window Write  python -m venv <name>​ Active the virtual environment: cd <name> cd Scripts activate Make sure that your prompt starts with the selected “<name>”                                                                         Install SPSDK from Github into your Python virtual environment. pip install -U spsdk Wait until the installation is completed. From now on you can use the virtual environment when it is needed, just open cmd open the Scripts or bin folder and write activate as in previous steps. Make a Full flash erase using Blhost SPSDK. Open SPSDK virtual environment Open a command prompt Change directory to open Scripts folder under SPSDK virtual environment Write activate Make sure your prompt starts with virtual environment name                                                              Move command prompt to Virtual environment folder                                                                                          Open Device Manager to check the MCU-Link COM                                                                                                        In your board set the jumpers JP13 and JP14 to connect pin 2 to 3.                                                                          Plug your board to your computers USB port, then press SW3, while keep pressing SW3 press Reset button (SW1) for a second, then make sure to release SW1 first, then release SW5.                                                                                                                                                   Use Blhost command to make sure board communication is set up correctly                             a. >blhost -p comxx get-property 1 ​   7. Use this Blhost command to erase your on-board flash                                                               b. >blhost -p comxx flash-erase-all ​   8. Restore JP13 and JP14 to connect to pin 1 to 2   Section 1. Run Low Power Reference Design Open VS code Go to MCUXpresso for VS Code extension that is on the tools column at the left. Go to PROJECTS section and select “Import Example Application from and Installed Repository”                                                                                                                                                                                               Select “frdmmcxw23_health_care_iot_peripheral_bm” project as in the next image and create the project                                                                                                                                          Repeat previous step for “frdmmcxw23_health_care_iot_central” Go back to Projects view and build the projects clicking “Build Selected” icon                                         Connect USB cable to MCU-LINK (J10) connector on both boards Open a Serial terminal on PC for the serial device with these settings on the two boards: - 115200 baud rate - No parity - One stop bit - No flow control To identify the appropriate COM, open the Device Manager and look for MCU-Link VCom Port                                                                                                                                                                                                        9. Select “frdmmcxw23_health_car_iot_central” and click on debug to flash the code into one board   Click on “Continue” button or press “F5” key on your keyboard to continue running the downloaded program on device. 11. Click on “Stop” button or press “Shift + F5” to terminate the debug session.        12. Open a Serial terminal on PC for the serial device with these settings on the two boards: - 460800 baud rate - No parity - One stop bit - No flow control To identify the appropriate COM, open the Device Manager and look for MCU-Link VCom Port 13. Repeat the steps from 9 to 11 with the "frdmmcxw23_health_care_iot_peripheral_bm" project into the second board Clean serial terminals Click SW1 button to reset the central board. Click SW5 button to start the Health care IoT peripheral demo. In the terminal you will see that the boards are communicating each other each second after the boards stablish connection. Central Device Peripheral Device       As expected the Peripheral device connects to the central device send the temp information. The peripheral device will keep advertising each second to report temperature and battery status, after this time it goes to Deep sleep mode. The next step is to measure the current, connect the ammeter on JP2 in the peripheral device. Figure 1 measuring an advertising interval Figure 2 Board after pressing sw5 Figure 3 Board init services and start advertising until central scan connection You can have more information about the Reference application Health Care IoT Central/Peripheral and how to modify the project to change adv interval or disable services on the application note: AN14659 MCX W23 Bluetooth Low Energy Power Consumption Analysis  
View full article
Hands On In this lab we will first import the MCUXpresso for Visual Studio Code SDK for the MCX W23 Freedom board into the MCUXpresso extension for Visual Studio Code and then we will build, flash and debug the hello world project to make sure the environment is set for the following Labs. Hardware Requirements Personal Computer FRDM-MCXW23 Board Type C USB Cable Software Requirements IDE: Visual Studio Code 1.91.1 Extension: MCUXpresso for VS Code v25.06.97 or newer SDK: SDK next gen v25.06.00 or newer Windows OS (Windows 11 was used for this hands-on) Serial Terminal program, like PuTTY or Tera Term Note: In order to make downloads in NXP website, it is necessary to have an account. Please, register and log-in for moving forward. MCUXpresso for Visual Studio Code MCUXpresso for Visual Studio Code (VS Code) provides an optimized embedded developer experience for code editing and development. The extension enables NXP developers to use one of the most popular embedded editor tools and provides an easy and fast way to create, build and debug applications based on MCUXpresso SDK or Zephyr projects.               Install it following the next steps: Download Visual Studio Code from Microsoft Store or visual studio code web page Download Visual Studio Code - Mac, Linux, Windows Access to vscode for MCUX wiki and download MCUXpresso Installer  Dependency Installation · nxp-mcuxpresso/vscode-for-mcux Wiki · GitHub Run MCUXpresso Installer and for this Hands On install at least MCUXpresso SDK Developer Arm GNU Toolchain PEmicro   Installing the FRDM-MCXW23 SDK v 25.06.00. Each MCU has its own SDK that includes driver, examples, middleware, docs and other components. To get and build the demo, let’s install the SDK into VS Code:        Once MCUXpresso for Visual Studio Code is installed open VS Code. Go to MCUXpresso for VS Code extension that is on the tools column at the left. Look for INSTALLED REPOSITORIES option and press ‘+’. Detail steps are described in                                                                                                            Use the steps for import a remote Git repository wiki page. Working with MCUXpresso SDK · nxp-mcuxpresso/vscode-for-mcux Wiki · GitHub Search for Revision v25.06.00 or newer and complete installation. Lab Section . Run Hello World Demo Open VSCode Go to MCUXpresso for VS Code extension that is on the tools column at the left.     Go to PROJECTS section and select “Import Example Application from and Installed Repository”                                                                                                                                                                        Select “frdmmcxw23_hello_world” project as freestanding as shown in the next image and create the project                                                                                                                                                     Now you should have the “frdmmcxw23_hello_world” in your workspace. Before moving to the building and testing phase of the project, we want to do a small modification, go to line 39 of the hello_world.c file and change the line PRINTF("hello world.\r\n"); to PRINTF("hello world, this is MCXW23 from NXP Semiconductors.\r\n"); 7.Build the projects clicking “Build Selected” icon to make sure the build process succeeds with zero errors and warnings or you can right click on the project’s name and press “Build Project button”.   The build project process starts, follow its progress in the Console tab located in the bottom center of the window. If the build process will successfully end you will see something like “build finished successfully” in the Terminal window:   To start the debug session, connect the FRDM-MCXW23 board debugger port to your host PC, using the USB A to USB C cable provided with the FRDM board as per the picture below on MCU-Link USB port and then the other end to a free USB port on the host PC.                                                                                   Open a Serial terminal on PC for the serial device with these settings on the two boards: - 115200 baud rate - No parity - One stop bit - No flow control To identify the appropriate COM, open the Device Manager and look for MCU-Link VCom Port   To start debugging, simply click on Debug icon or you can right click on projects name and press “Debug” Button.   All is set to start debugging the project, click on “Continue” button or press “F5” key on your keyboard to continue running the downloaded program on device.   The execution of the example starts and “hello world, this is MCXW23 from NXP Semiconductors.” is printed in the Terminal window as per the below picture:   Enter any character + <enter> to see the examples echoes every character that is entered through the terminal. Click on the Stop button (red square) to end the debug session. Congratulations you have successfully completed the hello world lab.
View full article
Hands On  Goal of this lab is to show the SDK example implementing the wireless UART profile and we will move forward in making some meaningful modifications to the example itself with the goal to show where in the code the end user should enter the relevant application software for the application.    Hardware Requirements  Personal Computer  FRDM-MCXW23 Board   Type C USB Cable    Smartphone    Software Requirements  IDE: Visual Studio Code 1.91.1  SDK: SDK v2.16.100 for FRDM-MCXW23  SPSDK Tool  Windows OS (It was used Windows 10 for this hands-on)  NXP IoT Toolbox (For Android or iOS device)  Terminal program, like PuTTY or Tera Term  Note:  In order to make downloads in NXP website, it is necessary to have an account. Please, register and log-in for moving forward.  MCUXpresso for Visual Studio Code  MCUXpresso for Visual Studio Code (VS Code) provides an optimized embedded developer experience for code editing and development. The extension enables NXP developers to use one of the most popular embedded editor tools and provides an easy and fast way to create, build and debug applications based on MCUXpresso SDK or Zephyr projects.   Install it following the next steps:  Download Visual Studio Code from Microsoft Store or visual studio code web page Download Visual Studio Code - Mac, Linux, Windows  Access to vscode for MCUX wiki and download MCUXpresso Installer  Dependency Installation · nxp-mcuxpresso/vscode-for-mcux Wiki · GitHub  Run MCUXpresso Installer and for this Hands On install at least  MCUXpresso SDK Developer  Arm GNU Toolchain   PEmicro    Installing the FRDM-MCXW23 SDK v25.06.00.  Each MCU has its own SDK that includes driver, examples, middleware, docs and other components. To get and build the demo, let’s install the SDK into VS Code:   Once MCUXpresso for Visual Studio Code is installed open VS Code.  Go to MCUXpresso for VS Code extension that is on the tools column at the left.  Look for INSTALLED REPOSITORIES option and press ‘+’. Detail steps are described in                                     -Use the steps for import a remote Git repository                                   -wiki page.               4.Search for FRDM-MCXW23 v 25.06.00 SDK and complete installation.  Section 1. Wireless of simply less wires?  Open VS code   Go to MCUXpresso for VS Code extension that is on the tools column at the left.    Go to PROJECTS section and select “Import Example Application from and Installed Repository”            4.Select “frdmmcxw23_wireless_uart_bm” project as in the next image and create the project    5. Now you should have the “frdmmcxw23_wireless_uart_bm” in your workspace. Build the projects clicking “Build Selected” icon to make sure the build process succeeds with zero errors and warnings.      6. To make sure your board becomes “unique” we need to change the name of it as it appears in the BLE scanning process. To do this we need to modify a line of code in the app_config.c . In some SDK this file is only referenced from the SDK project. To avoid problems with the future projects we need to have selected the Freestanding option when importing the project.   In project explorer go to your project “frdmmcxw23_wireless_uart_bm” and open this explorer to find the “app_config.c” file.    Once opened, browse to line 76 and make the following modification  From  .aData = (uint8_t*)"NXP_WU" to  .aData = (uint8_t*) "Custom_string"   IMPORTANT: Custom_string can be any string that is supposed to be unique in the class (your initials, name of your dog, anything meaningful to you only) Please note the string needs to be 7 characters maximum to avoid any other modifications in the code. In this Lab guide we will modify the string using “NXP_DT”  We will then do the following modification  .aData = (uint8_t*)"NXP_DT" 7. Verify that the modification succeeded by Building the project again and making sure you don’t get any error or warning.   8. Let us, at this point, get familiar with the board and the switches that we need to use to have the application running in the correct way.  The application makes use of two switches, the ROLESW-SW5 (Role Switch) and the SCANSW-SW2 (scan Switch), the establishment of a BLE connection is shown by the CONNLED (connection LED), please refer to the picture below to see where the switches and the LEDs are located on the FRDM-MCXW71 board.    9. Open a Serial terminal on PC for the serial device with these settings on the two boards:   115200 baud rate   No parity   One stop bit  No flow control   To identify the appropriate COM, open the Device Manager and look for MCU-Link VCom Port    10. We are now ready to start evaluating the example, Select “frdmmcxw23_wireless_uart_bm” and click on debug to flash the code into one board    11.Click on “Continue” button or press “F5” key on your keyboard to continue running the downloaded program on device.     You will immediately start noticing two things, the RGB LED (showing white color) and the BLUE LED on the board will start blinking at the same rate and you will see the “Wireless UART Starting as GAP Central” on the terminal.    12. The microcontroller is acting at this stage with the role that your smartphone is supposed to take in the example, to change the role click now the ROLESW=SW4 on the board to change the role to peripheral, the “switched role to GAP Peripheral” message on the terminal should be shown       13. It is now time to make the board visible to a Bluetooth scan, to do this press once the SCANSW=SW2 switch, you should notice now the RBG LED on the board stops blinking and only the CONNLED will continue. The “Advertising…” message should be now prompted on the terminal     14. It is time now to access the IoT Toolbox app on your smartphone and select Wireless UART    15. Once you click on “Wireless_UART” you should see a list of Wireless UART compatible devices advertising in that moment in the region around you (only the one under use at this stage in the picture below identified by NXP_DT)    16. If everything went correctly the BLE communication is in place, and you will observe the following three conditions: A. The BLUE LED on the board becomes solid blue  B.The terminal will report the communication is in place by prompting “Connected to device 0 as peripheral”    C. The screen on your app will look like the following, please note the DICONNECT button at the top right of the screens that shows your smartphone is connected to the FRDM board     17. Type any character(s) into the text box on the IoT toolbox and press the Send button to wirelessly transmit character between the App and the MCXW71 device. Every character you will send from the app will be prompted on the console. At this point we have verified the basic way of working of the Wireless UART app that comes as part of the device’ s SDK.   Congratulations you have reached the end of the first part of the lab, you can now close the IoT Toolbox app on your smartphone and click on Terminate to stop debugging the application on the MCXW23 board.  18. It is now time to make some modifications on out of the box example to add additional interactions between the app and the board at hardware level, the goal is to become more familiar with the software stack in use and the available hardware resources.   As first step, we need to identify the right file where we will incorporate the modifications, the file we need to work on is called wireless_uart.c, same as with app_config.c this file is in the SDK folder so to avoid modifications on the SDK source we have to had imported the example as a freestanding application as show in the first parb of the lab. In window explorer go to your project “frdmmcxw23_wireless_uart_bm” and open the explorer to find the “wireless_uart.c” & “wireless_uart.h” files.      19. In the wireless_uart.c file we need to add the declarations, variables and includes to configure the LEDs commands. Let us start with the variables declarations, somewhere around line 267 (doesn’t really matter the exact number of the line you add the declaration on) add the following lines:  uint8_t command_uart; uint8_t command_lenght; 20. We now need a more complex function to be declared to handle the LED’s behavior as well as the initialization of the ports and pins used, we will command the RGB LED located on the FRDM-MCXW23 board. In the Public functions section of the file (around line 271) place the following commandLed() function (use the copy_and_paste.txt file provided for this lab to avoid any formatting issues)    static void command_led(void) {     if( (command_uart >= '0' && command_uart <= '4') && (command_lenght <= 2))     {         switch(command_uart)         {             case '0':                     GPIO_PortClear(GPIO, 0U, 1<<0); //Turn on Green LED                     GPIO_PortClear(GPIO, 0U, 1<<1); //Turn on Red LED                     GPIO_PortClear(GPIO, 0U, 1<<4); //Turn on Blue LED                 break;             case '1':                     GPIO_PortSet(GPIO, 0U, 1<<0); //Turn off Green LED                     GPIO_PortClear(GPIO, 0U, 1<<1); //Turn on Red LED                     GPIO_PortSet(GPIO, 0U, 1<<4); //Turn off Blue LED                 break;             case '2':                     GPIO_PortClear(GPIO, 0U, 1<<0); //Turn on Green LED                     GPIO_PortSet(GPIO, 0U, 1<<1); //Turn off Red LED                     GPIO_PortSet(GPIO, 0U, 1<<4); //Turn off Blue LED                 break;             case '3':                     GPIO_PortSet(GPIO, 0U, 1<<0); //Turn off Green LED                     GPIO_PortSet(GPIO, 0U, 1<<1); //Turn off Red LED                     GPIO_PortClear(GPIO, 0U, 1<<4); //Turn on Blue LED                 break;             case '4':                     GPIO_PortSet(GPIO, 0U, 1<<0); //Turn off Green LED                     GPIO_PortSet(GPIO, 0U, 1<<1); //Turn off Red LED                     GPIO_PortSet(GPIO, 0U, 1<<4); //Turn off Blue LED                 break;             default:             break;         }     } } 21. To make use of the instructions that manipulate the GPIOs in the wireless_uart.c file we need to make sure they are reachable from the file itself, we ensure this with the following include statement which needs to be added in the include file section of the wireless_uart.c file (around line 30)  #include "fsl_gpio.h" 22. It is now necessary to call the above defined commandLed function in the whole BLE software flow, and, in particular it needs to be called in the BleApp_ReceivedUartStream function defined in the wireless_uart.c files somewhere around line 1440. Include then the commandLed() function just after the following line(s) of code (highlighted in yellow the function to be added and the position)   #if (defined(SERIAL_MANAGER_NON_BLOCKING_MODE) && (SERIAL_MANAGER_NON_BLOCKING_MODE > 0U)) serial_manager_status_t status = SerialManager_InstallTxCallback((serial_write_handle_t)s_writeHandle, Uart_TxCallBack, pBuffer); (void)status; assert(kStatus_SerialManager_Success == status); (void)SerialManager_WriteNonBlocking((serial_write_handle_t)s_writeHandle, pBuffer, streamLength); #endif /*SERIAL_MANAGER_NON_BLOCKING_MODE > 0U*/ } command_led(); /* update the previous device ID */ previousDeviceId = peerDeviceId; } 23. As last modification we need to ensure the commands sent by the user through the IoT toolkit App are correctly captured in the application. Locate the BleApp_GattServerCallback function in the wireless_uart.c file and add the two lines highlighted in yellow below considering the exact position in the code      static void BleApp_GattServerCallback ( deviceId_t deviceId, gattServerEvent_t *pServerEvent ) { uint16_t tempMtu = 0; switch (pServerEvent->eventType) { case gEvtAttributeWrittenWithoutResponse_c: { if (pServerEvent->eventData.attributeWrittenEvent.handle == (uint16_t)value_uart_stream) { command_uart=*pServerEvent->eventData.attributeWrittenEvent.aValue; command_lenght = pServerEvent->eventData.attributeWrittenEvent.cValueLength; BleApp_ReceivedUartStream(deviceId, pServerEvent->eventData.attributeWrittenEvent.aValue, pServerEvent->eventData.attributeWrittenEvent.cValueLength); } break; } case gEvtMtuChanged_c: { /* update stream length with minimum of new MTU */ (void)Gatt_GetMtu(deviceId, &tempMtu); tempMtu = gAttMaxWriteDataSize_d(tempMtu); mAppUartBufferSize = mAppUartBufferSize <= tempMtu ? mAppUartBufferSize : tempMtu; } break; default: { ; /* No action required */ } break; } }   24. We are now done with the code modifications, let us repeat the steps we need to build, Debug and connect through the IoT Toolkit Wireless UART option to see if the modifications are working as expected. Once you are connected to the FRDM-MCXW23 board through the App you can enter, as done before, any character and it will be prompted back through the terminal, now, entering 1 will turn the RBG RED LED on, 2 will turn the RGB BLUE LED on, 3 will turn the RGB GREEN on, 0 will turn the RBG LED white and 4 will turn the RBG LED off.     NOTE: you can see from the code, in the commandLed() function that we are setting up and configuring the GPIOs every time the UART receives the characters, 1, 2, 3 or 0.     BONUS: Change the code and use/add other trigger commands. Change the LED colors you can showcase. Send messages though UART once a special character (or a combination of them) is received.   Congratulations, you have reached the end of the Wireless or simply less wires. 
View full article
Hands On In this lab we make some experience with the FRDM-MCXW23 board using the SDK project to implement a simple LED blinking. Once we will get familiar with the example project, we will integrate simple modifications.   Hardware Requirements Personal Computer FRDM-MCXW23 Board Type C USB Cable   Software Requirements IDE: Visual Studio Code 1.91.1 or newer Extension: MCUXpresso for VS Code v25.06.97 or newer SDK: SDK next gen v25.06.00 or newer SPSDK Tool Windows OS (It was used Windows 11 for this hands-on) Note: In order to make downloads in NXP website, it is necessary to have an account. Please, register and log-in for moving forward.   MCUXpresso for Visual Studio Code   MCUXpresso for Visual Studio Code (VS Code) provides an optimized embedded developer experience for code editing and development. The extension enables NXP developers to use one of the most popular embedded editors tools and provides an easy and fast way to create, build and debug applications based on MCUXpresso SDK or Zephyr projects.               Install it following the next steps: Download Visual Studio Code from Microsoft Store or visual studio code web page  Access to vscode for MCUX wiki and download MCUXpresso Installer  Run MCUXpresso Installer and for this Hands On install at least MCUXpresso SDK Developer Arm GNU Toolchain PEmicro   Installing the FRDM-MCXW23 SDK v 25.06.00 Each MCU has its own SDK that includes driver, examples, middleware, docs and other components. To get and build the demo, let’s install the SDK into VS Code:        Once MCUXpresso for Visual Studio Code is installed open VS Code. Go to MCUXpresso for VS Code extension that is on the tools column at the left. Look for INSTALLED REPOSITORIES option and press ‘+’. Detail steps are described in Use the steps for import a remote Git repository wiki page.      4.Search for FRDM-MCXW23 v25.06.00 SDK and complete installation. Lab Section: LED it Shine Open VSCode and follow the steps in this section to import the led_blinky example from SDK, belonging to the demo_apps section in the MCUXpresso SDK as per the following snapshot:       Click on Import button to import the full project into your workspace. Check the frdmmcxw23_led_blinky_lpc project in the Project explorer tab.                                   Build and Debug the project, follow the steps explained in the previous lab. Start the Debug session and hit the breakpoint at the first instruction in main, then click on Continue (F5) to start the debug session and you will see the RGB GREEN LED blinking at one second rate. Click on Stop (red square button) to stop the debugging. Note: User BLUE LED will continue blinking at the same rate as before because the Debug takes care about flashing the memory. Now is time to play with the code. In the next steps we will add a new blinking LED. Having a look at the schematic of the FRDM-MCXW23 board in the RGB LED section, we notice RED is connected to GPIO0_0 and BLUE is connected to GPIO0_4 while the RED LED (digging a little more in depth in the document) is connected to GPIO0_1.     What we want to do is to have a RED LED blinking at the same one second rate but will blink in the inverse time as the GREEN LED, this means when RED is on BLUE is off and vice versa.  To do this we will add few code modification. 1. Let us first explore a couple of defines part of the example. Open led_blinky.c file, at line 13 you will add the following two defines: #define RED_LED_PIN 1U #define RED_LED_PORT 0 Respectively these two are defining the new LED under control in the application, GPIO0 and pin 1 as per the schematic portion provided above. Have a look then in the code and you will see that at line 65 you will encounter the following function call GPIO_PortToggle(GPIO, BOARD_LED_PORT, 1u << BOARD_LED_PIN; This is the function that effectively toggles the LED under control. Let's modify the code to toggle the second LED and also add the name of the color. GPIO_PortToggle(GPIO, BOARD_LED_PORT, 1u << BOARD_LED_PIN; GPIO_PortToggle(GPIO, RED_LED_PORT, 1<< RED_LED_PIN; 2.Now, open the pin_mux.c file and look for BOARD_InitPins on line 67. In line 70 and 72 code enables the clock for the Iocon and GPIO0   /* Enables the clock for the I/O controller.: Enable Clock. */ CLOCK_EnableClock(kCLOCK_Iocon; /* Enables the clock for the GPIO0 module */ CLOCK_EnableClock(kCLOCK_Gpio0; Since BLUE LED is on the same port and GPIO group as RED LED we will not need to add a new one. 3. In line 76 we have the configuration for the GREEN LED  gpio_pin_config_t LED_BLUE_config = { .pinDirection = kGPIO_DigitalOutput, .outputLogic = 0U }; const uint32_t LED_BLUE = (/* Pin is configuBLUE as PIO0_19 */ IOCON_PIO_FUNC0 | /* No addition pin function */ IOCON_PIO_MODE_INACT | /* Standard mode, output slew rate control is enabled */ IOCON_PIO_SLEW_STANDARD | /* Input function is not inverted */ IOCON_PIO_INV_DI | /* Enables digital function */ IOCON_PIO_DIGITAL_EN | /* Open drain is disabled */ IOCON_PIO_OPENDRAIN_DI); /* PORT0 PIN19 (coords: 7) is configuBLUE as PIO0_19 */ IOCON_PinMuxSet(IOCON, BOARD_INITPINS_LED_BLUE_PORT, BOARD_INITPINS_LED_BLUE_PIN, LED_BLUE); Now we need to add the configuration for the RED LED, add the next code after BLUE LED configuration. Notice that default output logic is 1 the opposite of BLUE LED this will be use to have the opposite state when LEDs toggle. /* Initialize GPIO functionality on pin PIO0_1 */ GPIO_PinInit(BOARD_INITPINS_LED_RED_GPIO, BOARD_INITPINS_LED_RED_PORT, BOARD_INITPINS_LED_RED_PIN, &LED_RED_config); const uint32_t LED_RED = (/* Pin is configuBLUE as PIO0_19 */ IOCON_PIO_FUNC0 | /* No addition pin function */ IOCON_PIO_MODE_INACT | /* Standard mode, output slew rate control is enabled */ IOCON_PIO_SLEW_STANDARD | /* Input function is not inverted */ IOCON_PIO_INV_DI | /* Enables digital function */ IOCON_PIO_DIGITAL_EN | /* Open drain is disabled */ IOCON_PIO_OPENDRAIN_DI); /* PORT0 PIN19 (coords: 7) is configuBLUE as PIO0_19 */ IOCON_PinMuxSet(IOCON, BOARD_INITPINS_LED_RED_PORT, BOARD_INITPINS_LED_RED_PIN, LED_RED); 4. If you tried to compile now you will get some errors this is because we use some defines that are not created yet. Go to pin_mux.h, in this file we have definitions for BLUE LED as well starting on line 45. /* Symbols to be used with GPIO driver */ #define BOARD_INITPINS_LED_BLUE_GPIO GPIO /*!<@brief GPIO peripheral base pointer */ #define BOARD_INITPINS_LED_BLUE_GPIO_PIN_MASK (1U << 19U) /*!<@brief GPIO pin mask */ #define BOARD_INITPINS_LED_BLUE_PORT 0U /*!<@brief PORT peripheral base pointer */ #define BOARD_INITPINS_LED_BLUE_PIN 19U /*!<@brief PORT pin number */ #define BOARD_INITPINS_LED_BLUE_PIN_MASK (1U << 19U) /*!<@brief PORT pin mask */ Create defines for REDS LED, copy next test after BLUE LED defines #define BOARD_INITPINS_LED_RED_GPIO GPIO /*!<@brief GPIO peripheral base pointer */ #define BOARD_INITPINS_LED_RED_GPIO_PIN_MASK (1U << 1U) /*!<@brief GPIO pin mask */ #define BOARD_INITPINS_LED_RED_PORT 0U /*!<@brief PORT peripheral base pointer */ #define BOARD_INITPINS_LED_RED_PIN 1U /*!<@brief PORT pin number */ #define BOARD_INITPINS_LED_RED_PIN_MASK (1U << 1U) /*!<@brief PORT pin mask */ 5. Follow the steps described at point 3 to Build and Debug the application and hit the Continue button to start the debugging session. You will see the BLUE LED blinking at the same one second rate alternating with GREEN one. What if we want to change the blinking rate? Having a look at the led_blinky.c file, we notice there one special function called SysTick_Handler(void) defined at line 33. This is the interrupt routine associated to the so called Systick timer which is a timer embedded within the Cortex-M33 core typically used as a system tick for many RTOSes. The interrupt routine toggles the LED in use at a specific moment. We do not see any initialization function of it, though. The Systick Timer in this particular implementation is initialized by the function SysTick_Config(SystemCoreClock/1000U); invoked at line 59, this function simply initialize the internal SysTick Timer to a certain value taken as time base. The blinking delay is ensured by the  SysTick_Config(1000U) function called at line 69. Check what happens if you change the value of 1000U to another value.  6. Navigate to the ultimate call, and let us see what happens if we modify the call at line 69 like this: SysTick_DelayTicks(1000U/2); 7. Save the modification (CTRL+S), Build and start the debugging. What are you observing? Has the blinking rate changed, if yes, is it faster or slower? Congratulations, you have mastered the LED it shine Lab.  
View full article
Hands-on training utilizing NVIDIA's TAO toolkit and FRDM-IMX93
View full article
Customer may want to debug FRDM-IMX93 with the SWD interface of Jtag. This doc give an introduction about how to do that. Hardware: FRDM-IMX93,J-link. 1.Rework FRDM-IMX93 board and get the VREF(1.8V) from TP707 for SWD, show as the following picture.     2. Remove the  R3017 and R3018 in the following picture.     3.Connect FRDM-IMX93 and PC through J-link as the following pictures.     4.Switch the sw1 to 1001 to the serial download of the M33, then run the J-link commander.   The command is as following: J-Link>device MIMX9352_M33 J-Link>speed 4000 Selecting 4000 kHz as target interface speed J-Link>si swd Selecting SWD as current target interface. J-Link>power on J-Link>connect   The full log is as following: SEGGER J-Link Commander V8.10 (Compiled Sep 26 2024 08:38:41) DLL version V8.10, compiled Sep 26 2024 08:37:48 Connecting to J-Link via USB...O.K. Firmware: J-Link V10 compiled Jan 30 2023 11:28:07 Hardware version: V10.10 J-Link uptime (since boot): N/A (Not supported by this model) S/N: 600109556 License(s): RDI, FlashBP, FlashDL, JFlash, GDB VTref=1.800V Type "connect" to establish a target connection, '?' for help J-Link>device MIMX9352_M33 J-Link>speed 4000 Selecting 4000 kHz as target interface speed J-Link>si swd Selecting SWD as current target interface. J-Link>power on J-Link>connect Device "MIMX9352_M33" selected. Connecting to target via SWD ConfigTargetSettings() start ConfigTargetSettings() end - Took 12us InitTarget() start InitTarget() end - Took 2.53ms Found SW-DP with ID 0x5BA02477 DPIDR: 0x5BA02477 CoreSight SoC-400 or earlier AP map detection skipped. Manually configured AP map found. AP[0]: AHB-AP (IDR: Not set, ADDR: 0x00000000) AP[1]: MEM-AP (IDR: Not set, ADDR: 0x00000000) AP[2]: MEM-AP (IDR: Not set, ADDR: 0x00000000) AP[3]: AHB-AP (IDR: Not set, ADDR: 0x00000000) AP[3]: Core found AP[3]: AHB-AP ROM base: 0xE00FF000 CPUID register: 0x411FD210. Implementer code: 0x41 (ARM) Feature set: Mainline Cache: No cache Found Cortex-M33 r1p0, Little endian. Cortex-M (ARMv8-M and later): The connected J-Link (S/N 600109556) uses an old firmware module that does not handle I/D-cache correctly. Proper debugging functionality cannot be guaranteed if cache is enabled FPUnit: 8 code (BP) slots and 0 literal slots Security extension: implemented Secure debug: enabled CoreSight components: ROMTbl[0] @ E00FF000 [0][0]: E000E000 CID B105900D PID 000BBD21 DEVARCH 47702A04 DEVTYPE 00 Cortex-M33 [0][1]: E0001000 CID B105900D PID 000BBD21 DEVARCH 47701A02 DEVTYPE 00 DWT [0][2]: E0002000 CID B105900D PID 000BBD21 DEVARCH 47701A03 DEVTYPE 00 FPB [0][3]: E0000000 CID B105900D PID 000BBD21 DEVARCH 47701A01 DEVTYPE 43 ITM [0][5]: E0041000 CID B105900D PID 002BBD21 DEVARCH 47724A13 DEVTYPE 13 ETM [0][6]: E0042000 CID B105900D PID 000BBD21 DEVARCH 47701A14 DEVTYPE 14 CSS600-CTI Memory zones: Zone: "Default" Description: Default access mode Cortex-M33 identified. J-Link>   5.You can also switch the sw1 to 0011 boot the A55 and stop at U-boot, then run the J-link commander The following is the command: J-Link>device MIMX9352_M33 J-Link>speed 4000 Selecting 4000 kHz as target interface speed J-Link>si swd Selecting SWD as current target interface. J-Link>power on J-Link>connect   The following is the full log: SEGGER J-Link Commander V8.10 (Compiled Sep 26 2024 08:38:41) DLL version V8.10, compiled Sep 26 2024 08:37:48 Connecting to J-Link via USB...O.K. Firmware: J-Link V10 compiled Jan 30 2023 11:28:07 Hardware version: V10.10 J-Link uptime (since boot): N/A (Not supported by this model) S/N: 600109556 License(s): RDI, FlashBP, FlashDL, JFlash, GDB VTref=1.806V Type "connect" to establish a target connection, '?' for help J-Link>device MIMX9352_M33 J-Link>speed 4000 Selecting 4000 kHz as target interface speed J-Link>si swd Selecting SWD as current target interface. J-Link>power on J-Link>connect Device "MIMX9352_M33" selected. Connecting to target via SWD ConfigTargetSettings() start ConfigTargetSettings() end - Took 27us InitTarget() start InitTarget() end - Took 3.89ms Found SW-DP with ID 0x5BA02477 DPIDR: 0x5BA02477 CoreSight SoC-400 or earlier AP map detection skipped. Manually configured AP map found. AP[0]: AHB-AP (IDR: Not set, ADDR: 0x00000000) AP[1]: MEM-AP (IDR: Not set, ADDR: 0x00000000) AP[2]: MEM-AP (IDR: Not set, ADDR: 0x00000000) AP[3]: AHB-AP (IDR: Not set, ADDR: 0x00000000) AP[3]: Core found AP[3]: AHB-AP ROM base: 0xE00FF000 CPUID register: 0x411FD210. Implementer code: 0x41 (ARM) Feature set: Mainline Cache: No cache Found Cortex-M33 r1p0, Little endian. Cortex-M (ARMv8-M and later): The connected J-Link (S/N 600109556) uses an old firmware module that does not handle I/D-cache correctly. Proper debugging functionality cannot be guaranteed if cache is enabled FPUnit: 8 code (BP) slots and 0 literal slots Security extension: implemented Secure debug: enabled CoreSight components: ROMTbl[0] @ E00FF000 [0][0]: E000E000 CID B105900D PID 000BBD21 DEVARCH 47702A04 DEVTYPE 00 Cortex-M33 [0][1]: E0001000 CID B105900D PID 000BBD21 DEVARCH 47701A02 DEVTYPE 00 DWT [0][2]: E0002000 CID B105900D PID 000BBD21 DEVARCH 47701A03 DEVTYPE 00 FPB [0][3]: E0000000 CID B105900D PID 000BBD21 DEVARCH 47701A01 DEVTYPE 43 ITM [0][5]: E0041000 CID B105900D PID 002BBD21 DEVARCH 47724A13 DEVTYPE 13 ETM [0][6]: E0042000 CID B105900D PID 000BBD21 DEVARCH 47701A14 DEVTYPE 14 CSS600-CTI Memory zones: Zone: "Default" Description: Default access mode Cortex-M33 identified. J-Link>device MIMX9352_A55_0 Disconnecting from J-Link...O.K. Device "MIMX9352_A55_0" selected. Connecting to target via SWD ConfigTargetSettings() start ConfigTargetSettings() end - Took 19us Found SW-DP with ID 0x5BA02477 DPIDR: 0x5BA02477 CoreSight SoC-400 or earlier AP map detection skipped. Manually configured AP map found. AP[0]: AHB-AP (IDR: Not set, ADDR: 0x00000000) AP[1]: APB-AP (IDR: Not set, ADDR: 0x00000000) AP[2]: MEM-AP (IDR: Not set, ADDR: 0x00000000) AP[3]: AHB-AP (IDR: Not set, ADDR: 0x00000000) Using preconfigured AP[1] as APB-AP AP[1]: APB-AP found DebugRegs + CTI manually specified. ROM table scan skipped. Cortex-A55 @ 0x80810000 (configured) CoreCTI @ 0x80820000 (configured) Debug architecture: ARMv8.2 6 code breakpoints, 4 data breakpoints Processor features: EL0 support: AArch64 + AArch32 EL1 support: AArch64 + AArch32 EL2 support: AArch64 + AArch32 EL3 support: AArch64 + AArch32 FPU support: Single + Double + Conversion + single arithmetic ARMv8-A/R: The connected J-Link (S/N 600109556) uses an old firmware module V0 with known problems / limitations. Add. info (CPU temp. halted) Current exception level: EL2 Exception level AArch usage: EL0: AArch32 EL1: AArch32 EL2: AArch64 EL3: AArch64 Non-secure status: Non-secure Cache info: Inner cache boundary: none LoU Uniprocessor: 0 LoC: 0 LoU Inner Shareable: 0 VMSAv8-64: Supports 48-bit VAs Memory zones: Zone: "Default" Description: Default access mode Zone: "AP0" Description: MEM-AP (AHB-AP) Zone: "AP1" Description: MEM-AP (APB-AP) Zone: "AP3" Description: MEM-AP (AHB-AP) Cortex-A55 identified. Memory zones: Zone: "Default" Description: Default access mode Zone: "AP0" Description: MEM-AP (AHB-AP) Zone: "AP1" Description: MEM-AP (APB-AP) Zone: "AP3" Description: MEM-AP (AHB-AP) J-Link>  
View full article
Bring up Wi-Fi and Bluetooth interface. Configure and bring up Bluetooth A2DP sink profile. Configure and bring up Wi-Fi STA mode and perform throughput test. Bluetooth A2DP Sink profile configurations STA mode creation Connection of STA device to Ext AP Execution of udhcp client to receive the dynamic IP address from Ext AP iPerf server execution on Ubuntu/Windows machine iPerf client execution on FRDM i.MX 93 board 802.15.4 configuration on FRDM i.MX 93 board Wi-Fi Bluetooth LE and OT COEX Hands-on Demo Guide  Community Support If you have questions regarding this training, please leave your comments in our Wireless MCU Community! here 
View full article
In this lab, you will learn how to: Load wireless module into board Bring-up Bluetooth + 802.15.4 firmware Initialize the 802.15.4 interface on the FRDM-i.MX93 board. Configure and bring up the 802.15.4 interface. Create a thread network. Add nodes to the thread network. Verify thread network connectivity. Exchange data between thread nodes.   OpenTread Hands-on Demo Guide  Community Support If you have questions regarding this training, please leave your comments in our Wireless MCU Community! here 
View full article
Load drivers of wireless module into board Bring-up Bluetooth Scan/pair/connect Bluetooth with smartphone Hands-on Bluetooth A2DP sink/source profile demo play audio on remote Bluetooth headset or speaker using Bluetooth A2DP source profile play audio on FRDM i.MX 93 board from smart phone using Bluetooth A2DP sink profile Bluetooth A2DP Source and Sink Profile Demo    Community Support If you have questions regarding this training, please leave your comments in our Wireless MCU Community! here 
View full article
In this lab, you will learn how to: Bring up Wi-Fi interfaces. Run basic Wi-Fi scan Configure and bring up Wi-Fi STA mode using WPA_SUPPLICANT. Configure and bring up UDHCP server for dynamic IP assignment for associated client devices. Run UDHCP client to get dynamic IP address. Configure and bring up Wi-Fi AP mode using hostapd. Connect STA to external AP Connect AP to external STA Start ping  Wi-Fi Basic Hands-on Demo Guide  Community Support If you have questions regarding this training, please leave your comments in our Wireless MCU Community! here 
View full article
The FRDM-i.MX93 development board is designed to support advanced applications such as Industrial and Consumer HMI, Edge AI, Interconnected Devices, and High-Performance IoT Solutions. Built with NXP's i.MX 93 applications processor, it offers robust features like efficient machine learning acceleration, enhanced multimedia capabilities, and advanced connectivity options. This document provides a detailed guide on setting up the FRDM-i.MX93 development board. It includes hardware connections, flashing the Linux image, and accessing the debug console for seamless development and prototyping. FRDM-IMX93 Board Flashing Guide  Community Support If you have questions regarding this training, please leave your comments in our Wireless MCU Community! here 
View full article
This document assumes FRDM-iMX91 board is flashed with a Linux image. For flashing instructions, refer to FRDM-MX93_Board_Flashing guide. Then, follow this document to download software applications to test Wi-Fi, Bluetooth, and 802.15.4 performance. Hardware Prerequisites Windows or Linux PC with 64-bit OS 2 spare USB ports on PC FRDM-iMX91 Development Board Bluetooth LE device: Mobile phone which can configured as central or peripheral Wi-Fi Access Point: Standalone or mobile hotspot Wi-Fi Station: Mobile phone used as a station OPENTHREAD: 1 Another OT enabled board   Required PC Software Serial Terminal program Setting for terminal: Baud rate:115200, Parity: none, Data bits: 8, Stop bits: 1 Windows:   PUTTY or teraterm  and USB Device driver  Linux:           Minicom (Command to download the tool : sudo apt-get install minicom)   Iperf Windows:    Download Iperf version 3.0.11 from here. Linux:            Download Debian package of IPerf 3.0.11 for Ubuntu 16.04 from here. $ wget https://iperf.fr/download/ubuntu/iperf3_3.0.11-1_amd64.deb   Install the package using the command below. $ sudo dpkg -i /path/to/package/iperf3_3.0.11-1_amd64.deb   Required Mobile Software Iperf Application (iperf 3) Android:                  HE.NET Network Tools on Google Play iOS:                HE.NET Network Tools on AppStore   nRF Connect Application Android:                   nRF Connect on Google Play iOS:               nRF Connect on App Store   Required EVK Software Linux BSP Image  Version: L6.6.52_2.2.0 Link: https://www.nxp.com/webapp/sps/download/license.jsp?colCode=L6.6.52_2.2.0_MX91&appType=file1&DOWNLOA...   To download the pre-built image, please refer to https://www.nxp.com/design/design-center/software/embedded-software/i-mx-software/embedded-linux-for...   hands-on Labs Lab1 - WIFI Basic Hands-on Lab2 - Bluetooth A2DP Source and Sink Profile Demo Lab3 - OpenThread  Hands-on Lab4- WiFi Bluetooth and OT COEX Demo   Community Support If you have questions regarding this training, please leave your comments in our Wireless MCU Community! here 
View full article
FRDM-IMX91 Hardware Introduction The FRDM i.MX 91 development board is a low-cost and compact development board with NXP i.MX91 applications processor. On-board NXP IW610 Tri-Radio module supports Wi-Fi 6 + Bluetooth Low Energy 5.4 + 802.15.4. NXP releases Debian every six months and releases Yocto every year for this board. The FRDM i.MX 91 development board is ideal for developing modern Industrial and IoT applications. Get to know FRDM-IMX 91 Development Board   Specifications: 1x Arm® Cortex®-A55​ MAYA-W476-00B, Wi-Fi + BLE 5.4 + 802.15.4​​ Module on-board, IW610 2x GbE Ethernet (1xETER, 1xTSN) M.2 Key-E for Wi-Fi/BLE/802.15.4​ LPDDR4 16-bit 1GB eMMC 5.1, 8GB MicroSD 3.0 card slot 3x USB 2.0 Type-C connector (1-Debug, 1-PD, 1-USB2.0) + One USB 2.0 Type-A​ 40 pin (2x20) Expansion I/O One 2x5 Pin NXP interface (1- CAN, Two channels for ADC, I2C/I3C expansion)   Features FRDM-IMX91 eMMC 8GB DRAM NANYA 1GB PMIC PCA9451 WiFi Module u-blox MAYA-W476-00B on-board USB TYPE Type-C+Type-A ENET 2xGbE M.2 (Key E) SDIO Wi-Fi / BLE Y (rework needed) HDMI N Display (Parallel RGB LCD) 2x20 EXPI Camera (Parallel Camera) 2x20 EXPI 2x20 Expansion Interface Y CAN BUS Y MicroSD Y UART Y Audio  MQS Remote Debug N Power Connector Type-C PCB layers 10 Base Board DIM 6.5x10.5cm     NXP Devices On-board   PMIC PCA9451AHNY Real time clock/calendar PCF2131 WIFI/BLE/802.15.4 Tri-Radio IW610 in u-blox module CAN Transceiver TJA1051T/3 USB Type-C CC and SBU Protection IC NX20P0407  High-Voltage USB PD Power Switch NX20P5090UK USB PD and Type-C High-Voltage Sink/Source Combo Switch with Protection NX20P3483UK IIC Extends GPIO PCAL6524/ PCAL6408A Expansion Boards TM050RDH03-41: LCD display module 5” TFT 800X480, RGB, 120.7 mm x75.8 mm7inch MX93AUD-HAT: Audio expansion board with multiple features ​8MIC-RPI-MX8: 8-microphone array proto board for voice enablement Trainings   FRDM-IMX91 SW Release Package    Documentation  −FRDM-IMX91 Quick Start Guide −FRDM-IMX91 Board User Manual -FRDM-IMX91 Software User Guide   Useful Links −i.MX Yocto Project User’s Guide​ −i.MX Linux User’s Guide ​−i.MX Linux Reference Manual​ −i.MX Porting Guide -i.MX Debian Linux SDK User Guide
View full article
i.MX FRDM Development (FRDM) software release contains prebuilt images, documentation, and i.MX FRDM Yocto layer for FRDM-IMX boards. It also includes support for Matter and Debian release. This article will give a brief introduction of FRDM-IMX91 software release. For more details, please check i.MX FRDM Software User Guide. FRDM-IMX91 Yocto BSP Release Based on i.MX SW 2024 Q3 BSP release Linux kernel: 6.6.36_2.1.0 u-boot: 2024.04 i.MX FRDM Yocto layer source: https://github.com/nxp-imx-support/meta-imx-frdm FRDM-IMX91 BSP changes: U-boot: Add basic support for FRDM-IMX91 Kernel: Add basic support for FRDM-IMX91 and add support for kinds of accessories FRDM-IMX91 Yocto layer: Add Yocto layer for FRDM-IMX91 and integrate u-boot/kernel patches FRDM-IMX91 accessories and corresponding dtb: 5 inch Tianma LCD: imx91-11x11-frdm-tianma-wvga-panel.dtb RPI-CAM-INTB: imx91-11x11-frdm-mt9m114.dtb MX91AUD-HAT or MX91AUD-HAT + 8MIC-RPI-MX8: imx91-11x11-frdm-aud-hat.dtb 8MIC-RPI-MX8: imx91-11x11-frdm-8mic.dtb 2LL M.2 Module: imx91-11x11-frdm.dtb Build FRDM-IMX91 Yocto Image: Download i.MX SW 2024 Q3 Release: $ repo init -uhttps://github.com/nxp-imx/imx-manifest-b imx-linux-scarthgap -m imx-6.6.36-2.1.0.xml $ repo sync Integrate meta-imx-frdm layer into Yocto code base: $ cd ${MY_YOCTO}/sources $ git clone https://github.com/nxp-imx-support/meta-imx-frdm.git Yocto Project Setup: $ cd ${MY_YOCTO} $ MACHINE=imx91frdm DISTRO=fsl-imx-xwayland source sources/meta-imx-frdm/tools/imx-frdm-setup.sh -b frdm-imx91 Build images: $ bitbake imx-image-full Flashing SD card image using dd: $ zstdcat imx-image-full-imx91frdm.rootfs.wic.zst | sudo dd of=/dev/sdx bs=1M && sync Or using uuu to burn image to SD card: $ uuu -b sd_all imx-image-full-imx91frdm.rootfs.wic.zst FRDM-IMX91 Matter Support Based on i.MX Matter 2024 Q3 To include Matter support, please follow below steps to include Matter layer into Yocto build. Download i.MX SW 2024 Q3 BSP Release: $ repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-scarthgap -m imx-6.6.36-2.1.0.xml $ repo sync Download i.MX Matter Yocto layer: $ cd ${MY_YOCTO}/sources/meta-nxp-connectivity $ git remote update $ git checkout imx_matter_2024_q3 Integrate meta-imx-frdm layer into Yocto code base: $ cd ${MY_YOCTO}/sources $ git clone https://github.com/nxp-imx-support/meta-imx-frdm.git Yocto Project Setup: $ cd ${MY_YOCTO} $ MACHINE=imx91frdm-iwxxx-matter DISTRO=fsl-imx-xwayland source sources/meta-imx-frdm/tools/imx-frdm-matter-setup.sh bld-xwayland-imx91 Build images: $ bitbake imx-image-multimedia FRDM-IMX91 Debian Release FRDM-IMX91 has support for Debian 12 OS. i.MX Debian Linux SDK distribution is a combination of NXP-provided kernel and boot loaders with a Debian distro user-space image, which includes: Debian-based rootfs Debian Base (basic packages) Debian Server (more packages without GUI Desktop) Debian Desktop (with GNOME GUI Desktop) Linux kernel BSP components various applications (graphics, multimedia, networking, connectivity, security, and AI/ML) For more details of NXP Debian Linux SDK Distribution, please check NXP Debian Linux SDK Distribution for i.MX and Layerscape. Quick Start with Debian: To create an SD card with Debian for FRDM-IMX91, please follow below steps. Download flex-installer on the Linux host $ wget http://www.nxp.com/lgfiles/sdk/lsdk2412/flex-installer $ chmod +x flex-installer $ sudo mv flex-installer /usr/bin Plug the SD card into the Linux host and install the images as below # format SD card $ flex-installer -i pf -d /dev/sdb # automatically download and install images into SD card $ flex-installer -i auto -d /dev/mmcblk1 -m imx91frdm Plug the SD card into the FRDM-IMX91 board and install the extra packages as below         1. Setup Ethernet network interface by DHCP or setting it manually $ dhclient -i end0         2. Set correct system time, for example $ date -s "22 Nov 2024 09:00:00"         3. Install extra packages for GNOME GUI Desktop version $ debian-post-install-pkg desktop         4. Or install extra packages for Server version without GUI Desktop $ debian-post-install-pkg server         5. After finishing the installation, run the reboot command to boot up the Debian Desktop/Server system  Building Debian Images with Flexbuild: To build Debian image with Flexbuild for FRDM-IMX91, please follow below steps. Set up the build environment $ git clone https://github.com/nxp/flexbuild $ cd flexbuild && source setup.env #Continue to run commands below in case you need to build in Docker due to lack of Ubuntu 22.04 or Debian 12 host $ bld docker $ source setup.env Build image with Flexbuild $ bld -m imx91frdm Flexbuild usage: To build individual part of the image, please check below command list for Flexbuild usage $ bld uboot -m imx91frdm (compile u-boot image for imx91frdm) $ bld linux (compile linux kernel for all arm64 i.MX machines) $ bld bsp -m imx91frdm (generate BSP firmware) $ bld boot (generate boot partition tarball including kernel, dtb, modules, distro bootscript for iMX machines) $ bld multimedia (build multimedia components for i.MX platforms) $ bld rfs -r debian:server (generate Debian server rootfs) $ bld apps -r debian:server (compile apps against runtime dependencies of Debian server RootFS) $ bld merge-apps -r debian:server (merge iMX-specific apps into target Debian server RootFS) $ bld packrfs -r debian:server (pack and compress target debian server rootfs) Related Documentation FRDM-IMX91 Documents: FRDM-IMX91 Quick Start Guide FRDM-IMX91 Board User Manual i.MX FRDM Software User Guide More information about i.MX productions can be found at(http://www.nxp.com/imxlinux) i.MX Yocto Project User’s Guide​ i.MX Linux User’s Guide​ i.MX Linux Reference Manual​ i.MX Porting Guide Debian documents at http://www.nxp.com/nxpdebian i.MX Debian Linux SDK User Guide
View full article