.. zephyr:board:: rd_rw612_bga

Overview
********

The RW612 is a highly integrated, low-power tri-radio wireless MCU with an
integrated 260 MHz ARM Cortex-M33 MCU and Wi-Fi 6 + Bluetooth Low Energy (LE) 5.3 / 802.15.4
radios designed for a broad array of applications, including connected smart home devices,
gaming controllers, enterprise and industrial automation, smart accessories and smart energy.

The RW612 MCU subsystem includes 1.2 MB of on-chip SRAM and a high-bandwidth Quad SPI interface
with an on-the-fly decryption engine for securely accessing off-chip XIP flash.

The advanced design of the RW612 delivers tight integration, low power and highly secure
operation in a space- and cost-efficient wireless MCU requiring only a single 3.3 V power supply.

Hardware
********

- 260 MHz ARM Cortex-M33, tri-radio cores for Wifi 6 + BLE 5.3 + 802.15.4
- 1.2 MB on-chip SRAM

Supported Features
==================

.. zephyr:board-supported-hw::

.. note::

   Power modes 1, 2 and 3 are supported when using System Power Management.

Display Support
***************

The rd_rw612_bga board supports several in-tree display modules. Setup for
each module is described below:

GoWorld 16880 LCM
=================

This module does not connect directly to the board, and must be connected
via an adapter board and jumper wires. Connections are described in
:zephyr_file:`boards/nxp/rd_rw612_bga/dts/goworld_16880_lcm.overlay`. The
display sample can be built for this board like so:

.. zephyr-app-commands::
   :board: rd_rw612_bga
   :gen-args: -DDTC_OVERLAY_FILE=goworld_16880_lcm.overlay
   :zephyr-app: samples/drivers/display
   :goals: build
   :compact:

Adafruit 2.8 TFT
================

The :ref:`adafruit_2_8_tft_touch_v2` connects to the board's Arduino headers
directly, but some modifications are required (see
:zephyr_file:`boards/shields/adafruit_2_8_tft_touch_v2/boards/rd_rw612_bga.overlay`
for a list). The display sample can be built for this module like so:

.. zephyr-app-commands::
   :board: rd_rw612_bga
   :shield: adafruit_2_8_tft_touch_v2
   :zephyr-app: samples/drivers/display
   :goals: build
   :compact:

NXP LCD_PAR_S035
================

The :ref:`lcd_par_s035` does not connect directly to the board, and must be
connected via jumper wires. Connections and required board changes are
described in
:zephyr_file:`boards/shields/lcd_par_s035/boards/rd_rw612_bga.overlay`. The
display sample can be built for the module like so:

.. zephyr-app-commands::
   :board: rd_rw612_bga
   :shield: lcd_par_s035_8080
   :zephyr-app: samples/drivers/display
   :goals: build
   :compact:

Fetch Binary Blobs
******************

To support Bluetooth or Wi-Fi, rd_rw612_bga requires fetching binary blobs, which can be
achieved by running the following command:

.. code-block:: console

   west blobs fetch hal_nxp

Programming and Debugging
*************************

.. zephyr:board-supported-runners::

Build and flash applications as usual (see :ref:`build_an_application` and
:ref:`application_run` for more details).

Configuring a Debug Probe
=========================

A debug probe is used for both flashing and debugging the board. This board is
configured by default to use the JLink Firmware.

Configuring a Console
=====================

Connect a USB cable from your PC to J7, and use the serial terminal of your choice
(minicom, putty, etc.) with the following settings:

- Speed: 115200
- Data: 8 bits
- Parity: None
- Stop bits: 1

Flashing
========

Here is an example for the :zephyr:code-sample:`hello_world` application. This example uses the
:ref:`jlink-debug-host-tools` as default.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: rd_rw612_bga
   :goals: flash

Open a serial terminal, reset the board (press the RESET button), and you should
see the following message in the terminal:

.. code-block:: console

   ***** Booting Zephyr OS v3.4.0 *****
   Hello World! rd_rw612_bga

Debugging
=========

Here is an example for the :zephyr:code-sample:`hello_world` application. This example uses the
:ref:`jlink-debug-host-tools` as default.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: rd_rw612_bga
   :goals: debug

Open a serial terminal, step through the application in your debugger, and you
should see the following message in the terminal:

.. code-block:: console

   ***** Booting Zephyr OS zephyr-v3.6.0 *****
   Hello World! rd_rw612_bga

Bluetooth
*********

BLE functionality requires to fetch binary blobs, so make sure to follow
the ``Fetch Binary Blobs`` section first.

rd_rw612_bga platform supports the monolithic feature. The required binary blob
``<zephyr workspace>/modules/hal/nxp/zephyr/blobs/rw61x_sb_ble_a2.bin`` will be linked
with the application image directly, forming one single monolithic image.

Wi-Fi
*****

Wi-Fi functionality requires to fetch binary blobs, so make sure to follow
the ``Fetch Binary Blobs`` section first.

rd_rw612_bga platform supports the monolithic feature. The required binary blob
``<zephyr workspace>/modules/hal/nxp/zephyr/blobs/rw61x_sb_wifi_a2.bin`` will be linked
with the application image directly, forming one single monolithic image.

Board variants
**************

Ethernet
========

To use ethernet on the RD_RW612_BGA board, you first need to make the following
modifications to the board hardware:

Add resistors:

- R485
- R486
- R487
- R488
- R489
- R491
- R490

Remove resistors:

- R522
- R521
- R520
- R524
- R523
- R508
- R505

Then, build for the board target ``rd_rw612_bga//ethernet``.

.. include:: ../../common/board-footer.rst.inc

Resources
*********

.. target-notes::

.. _RW612 Website:
   https://www.nxp.com/products/wireless-connectivity/wi-fi-plus-bluetooth-plus-802-15-4/wireless-mcu-with-integrated-tri-radiobr1x1-wi-fi-6-plus-bluetooth-low-energy-5-3-802-15-4:RW612
