diff --git a/doc/nrf-bm/app_dev/dfu/bootloader_keys.rst b/doc/nrf-bm/app_dev/dfu/bootloader_keys.rst index 7183072c70..85a59e3cce 100644 --- a/doc/nrf-bm/app_dev/dfu/bootloader_keys.rst +++ b/doc/nrf-bm/app_dev/dfu/bootloader_keys.rst @@ -62,12 +62,16 @@ To boot an image that uses the KMU feature, you must program the MCUboot signing If you do not perform this step, the device will not boot. You can enable this setup through the :kconfig:option:`SB_CONFIG_BM_BOOTLOADER_MCUBOOT_SIGNATURE_USING_KMU` Kconfig option. +.. _ug_bootloader_kmu_autokeys: + Automatic key programming ========================= The configuration option :kconfig:option:`SB_CONFIG_BM_BOOTLOADER_MCUBOOT_GENERATE_DEFAULT_KMU_KEYFILE`, enabled by default, automates the programming of the public key file to the board. -This automation occurs when you use the ``west flash`` command with the ``--erase`` or ``--recover`` arguments. +In |nRFVSC|, this automatically happens when using the :guilabel:`Erase and Flash to Board` option. +If using ``west flash`` on the command line, this automatically happens when using the ``--erase`` or ``--recover`` arguments. It is essential to run this command first after building the project to prepare the board for development. + For more information about KMU on the nRF54L Series, see `Introduction to KMU key provisioning`_ and `Performing KMU provisioning`_. Runtime revocation diff --git a/doc/nrf-bm/app_dev/dfu/memory_partitioning.rst b/doc/nrf-bm/app_dev/dfu/memory_partitioning.rst index 5a28d7943c..fd742a183c 100644 --- a/doc/nrf-bm/app_dev/dfu/memory_partitioning.rst +++ b/doc/nrf-bm/app_dev/dfu/memory_partitioning.rst @@ -46,6 +46,31 @@ The memory in the device is divided into several partitions, each serving a spec - Used for application data storage that persists across resets and firmware updates. - Placement and size are configurable based on application requirements. +.. _ug_memorypartiton_irot: + +Configuring MCUboot to be IRoT +****************************** + +Configuring MCUboot to act as Immutable Root of Trust (IRoT) is done using the immutable boot region configuration register ``UICR.BOOTCONF``. +By default, this functionality is disabled, but it can be enabled with the :kconfig:option:`SB_CONFIG_BM_BOOT_BOOTCONF_LOCK_WRITES` sysbuild Kconfig option. +This is done by by creating a :file:`sysbuild.conf` file in the project's root folder and including ``SB_CONFIG_BM_BOOT_BOOTCONF_LOCK_WRITES=y``. + +Enabling this option sets the ``EXECUTE``, ``READ``, ``SECURE``, and ``LOCK`` bits in the ``UICR.BOOTCONF`` register and sets the ``UICR.BOOTCONF.SIZE`` to the size of the ``boot_partition`` from the board files. +This enables write protection on the bootloader region and locks down the configuration registers for the immutable boot region. + +Programming +=========== + +With IRoT enabled, you must run an Erase All before programming certain parts of the memory. +In |nRFVSC|, this is done by using the :guilabel:`Erase and Flash to Board` option, or, alternatively, by using the ``west flash`` command with the ``--erase`` or ``--recover`` arguments. + +When IRoT is established, the device is blocked from performing write operations on the ``boot_partition`` without performing an erase all operation. +All other regions are open and can be programmed just like before the IRoT was established. + +.. note:: + Use nRF Util device version 2.15.0 or higher as older versions have a known issue related to ERASEALL and UICR.BOOTCONF on nRF54L. + Alternatively, use the ``Recover`` function to erase the device and remove the IRoT protection. + Requirement for MCUboot *********************** @@ -69,7 +94,7 @@ An example of such images are application and firmware loader. The SoftDevice is not affected by this requirement. SoftDevice placement --------------------- +******************** .. figure:: ../../images/dfu_softdevice.svg :alt: Placement of the SoftDevice relative to the top of NVM diff --git a/doc/nrf-bm/images/erase_and_flash_to_board.png b/doc/nrf-bm/images/erase_and_flash_to_board.png deleted file mode 100644 index 77787dfc70..0000000000 Binary files a/doc/nrf-bm/images/erase_and_flash_to_board.png and /dev/null differ diff --git a/doc/nrf-bm/includes/program_sample.txt b/doc/nrf-bm/includes/program_sample.txt deleted file mode 100644 index 87f2b16b84..0000000000 --- a/doc/nrf-bm/includes/program_sample.txt +++ /dev/null @@ -1,22 +0,0 @@ -Programming the sample -====================== - -Follow these steps to program this sample: - -1. Plug in your device to the serial terminal using a USB cable. - Your device appears on the `Connected Devices View`_ list in |VSC|. -#. To flash the application you have built, select your build folder in the `Applications View`_. - Then, click :guilabel:`Flash` in the `Actions View`_ after connecting the device to the terminal. - -.. note:: - - When programming a board for the first time using MCUboot board variants with KMU (default), make sure the KMU is programmed with the necessary keys. - - * Using the command line: Execute ``west flash --erase`` or ``west flash --recover``. - * Using Visual Studio Code: In the Actions View, hover over the :guilabel:`Flash` option. - Click :guilabel:`Erase and Flash to Board`, which appears to the right under :guilabel:`More actions`. - - .. figure:: /images/erase_and_flash_to_board.png - :alt: Erase and flash to board. - -For more details, see `How to flash an application`_ in |VSC| extension documentation. diff --git a/doc/nrf-bm/includes/softdevice_flash.txt b/doc/nrf-bm/includes/softdevice_flash.txt deleted file mode 100644 index 08105c48e0..0000000000 --- a/doc/nrf-bm/includes/softdevice_flash.txt +++ /dev/null @@ -1,3 +0,0 @@ -The SoftDevice is included as part of the build process and output as a separate ``SoftDevice`` image in the build directory. -With the MCUboot board target, the SoftDevice is signed and included as part of the MCUboot image. -When using the ``west flash`` command or the |VSC| Extension :guilabel:`Flash` button to program the application, the SoftDevice image is programmed together with the other images. diff --git a/doc/nrf-bm/links.txt b/doc/nrf-bm/links.txt index 5edf154305..2c7df3e0a5 100644 --- a/doc/nrf-bm/links.txt +++ b/doc/nrf-bm/links.txt @@ -34,6 +34,7 @@ .. _`nRF Connect for Visual Studio Code`: https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/installation/recommended_versions.html#requirements-nrfvsc .. _`Visual Studio Code download page`: https://code.visualstudio.com/download .. _`freestanding application`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/guides/applications.html +.. _`UI overview`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/reference/ui_overview.html .. _`Applications View`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/reference/ui_sidebar_applications.html .. _`Actions View`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/reference/ui_sidebar_actions.html .. _`Details View`: https://docs.nordicsemi.com/bundle/nrf-connect-vscode/page/reference/ui_sidebar_details.html diff --git a/doc/nrf-bm/sample/intro.rst b/doc/nrf-bm/sample/intro.rst new file mode 100644 index 0000000000..612e18a228 --- /dev/null +++ b/doc/nrf-bm/sample/intro.rst @@ -0,0 +1,16 @@ +.. _getting_started_with_the_samples: + +Getting Started with the samples +################################ + +This section is a general description of how you can explore and try out the samples provided with the |BMlong|. +It describes how you can create a copy of a sample, configure it, build it, program it, and run it on a supported Nordic development kit. + +.. toctree:: + :maxdepth: 1 + :caption: Subpages + :glob: + + /sample/intro/create_sample + /sample/intro/configure_and_build_sample + /sample/intro/program_sample diff --git a/doc/nrf-bm/includes/configure_and_build_sample.txt b/doc/nrf-bm/sample/intro/configure_and_build_sample.rst similarity index 84% rename from doc/nrf-bm/includes/configure_and_build_sample.txt rename to doc/nrf-bm/sample/intro/configure_and_build_sample.rst index e6f63681a3..dd69961792 100644 --- a/doc/nrf-bm/includes/configure_and_build_sample.txt +++ b/doc/nrf-bm/sample/intro/configure_and_build_sample.rst @@ -1,14 +1,16 @@ -Configuring and building the sample -=================================== +.. _sample_intro_config_build: -Follow these steps to create your first build configuration for this sample: +Configuring and building a sample +################################# -1. Verify the configuration of this sample. +Follow these steps to create your first build configuration for a sample: + +1. Verify the configuration of the selected sample. You will need the following information: * The |NCS| version and toolchain version that the current |BMshort| release is based on: |ncs_release| - * The board target onto which you want to program the firmware (see `Requirements`_). + * The board target onto which you want to program the firmware (see the Requirements section of each sample description). This information will be used in the steps that follow. @@ -65,6 +67,14 @@ Follow these steps to create your first build configuration for this sample: Build configuration files + When selecting simple board variants, the SoftDevice hex file is automatically included. + When the build process is completed, the `Applications View`_ lists the SoftDevice in addition to the main application. + + .. note:: + This is also the case for the peripheral samples where the SoftDevice is not needed. + This is because the SDK does not include board targets without the SoftDevice, in order to reduce complexity. + + .. group-tab:: MCUboot board variants When the process is complete, the `Actions View`_ appears. diff --git a/doc/nrf-bm/includes/create_sample.txt b/doc/nrf-bm/sample/intro/create_sample.rst similarity index 80% rename from doc/nrf-bm/includes/create_sample.txt rename to doc/nrf-bm/sample/intro/create_sample.rst index e154970a23..484033ae61 100644 --- a/doc/nrf-bm/includes/create_sample.txt +++ b/doc/nrf-bm/sample/intro/create_sample.rst @@ -1,7 +1,11 @@ -Creating a copy of the sample -============================= +.. _sample_intro_copy: -Follow these steps to create a new application based on this sample: +Creating a copy of a sample +########################### + +This procedure is the recommended approach when working with the samples and allows you to add changes without modifying the SDK itself. + +Follow these steps to create a new application based on a sample: 1. Open the |nRFVSC| by clicking its icon. #. From the :guilabel:`Welcome View`, click :guilabel:`Create a new application`. @@ -23,7 +27,7 @@ Follow these steps to create a new application based on this sample: Create New Application from Sample - Quick Pick Menu -#. Click on the name of this sample. +#. Click on the name of the sample you want to work with. A prompt appears asking to enter the location for the application. You can also use the folder button at the top of the quick pick to open a folder picker. diff --git a/doc/nrf-bm/sample/intro/program_sample.rst b/doc/nrf-bm/sample/intro/program_sample.rst new file mode 100644 index 0000000000..8b4ec1170a --- /dev/null +++ b/doc/nrf-bm/sample/intro/program_sample.rst @@ -0,0 +1,42 @@ +.. _sample_intro_program: + +Programming a sample +#################### + +This section describes how you program the DK with all the different firmware modules and the extra data that is needed. +This description assumes you are using |nRFVSC|. +For details, see `UI overview`_. + +* `Applications View`_ - Select what to program. + + 1. Select which application should be the active one. + #. In case the project has multiple build contexts, select the one that should be used. + #. Within the build context, you can select between programming the whole project (all images) by selecting the build folder, or just one of the images within the build context by selecting one of the domains within the build folder. + +* `Actions View`_ - Specify how to program. + + * :guilabel:`Flash` - This will flash the active context selected in the Application View and only replace the memory section specified by the active context. + + * :guilabel:`Erase and Flash to Board` - This will first do a chip Erase All erasing all NVM including UICR and KMU content, before it flashes the active context. + +* Select which target (DK) to program. + + In case there is only one DK connected, only that one will be flashed. + In case you have more than one DK connected, you will be promted and can select one or multiple DKs to be flashed. + +Special cases +************* + +MCUboot +======= + +When running samples with MCUboot and firmware loader included, the project will have signing key(s) included. +It is required to provision the key(s) when programming the board for the first time. +This can be done by programming with the :guilabel:`Erase and Flash to Board` option. +See :ref:`ug_bootloader_kmu_autokeys` for more details. + +Immutable Bootloader (IRoT) configuration +========================================= + +When running a sample with MCUboot set as Immutable Root of Trust (IRoT), you must take special care when programming. +See :ref:`ug_memorypartiton_irot` for more details. diff --git a/doc/nrf-bm/samples.rst b/doc/nrf-bm/samples.rst index 9451381951..3f0eeb8595 100644 --- a/doc/nrf-bm/samples.rst +++ b/doc/nrf-bm/samples.rst @@ -13,6 +13,7 @@ All other samples and applications that are included in the distribution must be :glob: :caption: Subpages: + sample/intro sample/ble sample/dfu sample/nfc diff --git a/samples/bluetooth/ble_bms/README.rst b/samples/bluetooth/ble_bms/README.rst index 355d51b610..be9a1e418a 100644 --- a/samples/bluetooth/ble_bms/README.rst +++ b/samples/bluetooth/ble_bms/README.rst @@ -56,11 +56,6 @@ LED 0: LED 1: Lit when a device is connected. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - .. _ble_bms_sample_testing: Building and running @@ -68,11 +63,7 @@ Building and running This sample can be found under :file:`samples/bluetooth/ble_bms/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/ble_cgms/README.rst b/samples/bluetooth/ble_cgms/README.rst index 6a783ec0cd..4255681e39 100644 --- a/samples/bluetooth/ble_cgms/README.rst +++ b/samples/bluetooth/ble_cgms/README.rst @@ -69,23 +69,12 @@ Overview The Continuous Glucose Monitoring Service (CGMS) is a service that exposes glucose and other data from a personal Continuous Glucose Monitoring sensor. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_cgms_sample_testing: - Building and running ******************** This sample can be found under :file:`samples/bluetooth/ble_cgms/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/ble_hids_keyboard/README.rst b/samples/bluetooth/ble_hids_keyboard/README.rst index 03ff292a2b..7f14643148 100644 --- a/samples/bluetooth/ble_hids_keyboard/README.rst +++ b/samples/bluetooth/ble_hids_keyboard/README.rst @@ -101,23 +101,12 @@ LED 1: LED 3: Lit when Caps Lock is on. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_hids_keyboard_sample_testing: - Building and running ******************** This sample can be found under :file:`samples/bluetooth/ble_hids_keyboard/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/ble_hids_mouse/README.rst b/samples/bluetooth/ble_hids_mouse/README.rst index 59ba62eb04..a6c5af9f71 100644 --- a/samples/bluetooth/ble_hids_mouse/README.rst +++ b/samples/bluetooth/ble_hids_mouse/README.rst @@ -102,24 +102,12 @@ LED 0: LED 1: Lit when a device is connected. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_hids_mouse_sample_testing: - - Building and running ******************** This sample can be found under :file:`samples/bluetooth/ble_hids_mouse/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/ble_hrs/README.rst b/samples/bluetooth/ble_hrs/README.rst index 9e63a1e264..650dbb9406 100644 --- a/samples/bluetooth/ble_hrs/README.rst +++ b/samples/bluetooth/ble_hrs/README.rst @@ -95,23 +95,12 @@ User interface Button 1: Keep the button pressed while resetting the board to delete bonding information for all peers stored on the device. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_hrs_sample_testing: - Building and running ******************** This sample can be found under :file:`samples/bluetooth/ble_hrs/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/ble_hrs_central/README.rst b/samples/bluetooth/ble_hrs_central/README.rst index 68bc837098..34f74f6d43 100644 --- a/samples/bluetooth/ble_hrs_central/README.rst +++ b/samples/bluetooth/ble_hrs_central/README.rst @@ -71,23 +71,14 @@ This sample scans for devices that advertise with the :ref:`lib_ble_service_hrs` When a device is connected, the sample starts the service discovery procedure. If this succeeds, the sample subscribes to the Heart Rate Measurement characteristic to receive heart rate notifications. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - .. _ble_hrs_central_sample_testing: Building and running ******************** -This sample can be found under :file:`samples/bluetooth/ble_hrs/` in the |BMshort| folder structure. - -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt +This sample can be found under :file:`samples/bluetooth/ble_hrs_central/` in the |BMshort| folder structure. -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/ble_lbs/README.rst b/samples/bluetooth/ble_lbs/README.rst index df9a853cb6..7bfabd66a6 100644 --- a/samples/bluetooth/ble_lbs/README.rst +++ b/samples/bluetooth/ble_lbs/README.rst @@ -71,24 +71,12 @@ The LED Button Service (LBS) is a custom service that receives information about You can use the sample to transmit the button state from your development kit to another device. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_lbs_sample_testing: - - Building and running ******************** This sample can be found under :file:`samples/bluetooth/ble_lbs/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/ble_nus/README.rst b/samples/bluetooth/ble_nus/README.rst index 43aed1a473..6ec2cde703 100644 --- a/samples/bluetooth/ble_nus/README.rst +++ b/samples/bluetooth/ble_nus/README.rst @@ -72,26 +72,8 @@ When connected, the sample forwards any data received on the RX pin of the UART Any data sent from the Bluetooth LE unit is sent out of the UART 0 peripheral’s TX pin. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_nus_sample_testing: - -Building and running -******************** - -This sample can be found under :file:`samples/bluetooth/ble_nus/` in the |BMshort| folder structure. - -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt - Building and running with LPUARTE -********************************* +================================= The :file:`lpuarte.conf` file configures the sample to use the :ref:`LPUARTE ` driver for the NUS Service. This is useful for reducing the power consumption. @@ -106,6 +88,13 @@ Make sure the ``REQ`` pin on one board is connected to the ``RDY`` on the other With the LPUARTE configuration, the console is used only for application logging and not for NUS data. Output on the NUS TX line will be handled as input on the NUS RX line on the same device (loopback) or as NUS input to the other device (when using two devices). +Building and running +******************** + +This sample can be found under :file:`samples/bluetooth/ble_nus/` in the |BMshort| folder structure. + +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. + Testing ======= diff --git a/samples/bluetooth/ble_pwr_profiling/README.rst b/samples/bluetooth/ble_pwr_profiling/README.rst index 80f71e73c9..1a6d757be7 100644 --- a/samples/bluetooth/ble_pwr_profiling/README.rst +++ b/samples/bluetooth/ble_pwr_profiling/README.rst @@ -203,21 +203,12 @@ CONFIG_APP_BLE_PWR_PROFILING_NONCONN_ADVERTISING_INTERVAL - Non-connectable adve CONFIG_APP_BLE_PWR_PROFILING_LED - Enable LEDs Enabled by default. The LEDs can be disabled to reduce power consumption. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_pwr_profiling_sample_testing: - Building and running ******************** This sample can be found under :file:`samples/bluetooth/ble_pwr_profiling/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. .. note:: To remove terminal messages (at the benefit of a very small decrease in power consumption), disable the following Kconfig options: @@ -225,8 +216,6 @@ This sample can be found under :file:`samples/bluetooth/ble_pwr_profiling/` in t * :kconfig:option:`CONFIG_CONSOLE` * :kconfig:option:`CONFIG_LOG_BACKEND_BM_UARTE` -.. include:: /includes/program_sample.txt - Testing ======= diff --git a/samples/bluetooth/ble_radio_notification/README.rst b/samples/bluetooth/ble_radio_notification/README.rst index 3d5b878048..34518bf24e 100644 --- a/samples/bluetooth/ble_radio_notification/README.rst +++ b/samples/bluetooth/ble_radio_notification/README.rst @@ -70,23 +70,12 @@ Overview The sample initializes the radio notification library and registers a handler that triggers both when the radio is enabled and when it is disabled. The handler then toggles **LED 0** based on the current state of the radio. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - -.. _ble_radio_notification_sample_testing: - Building and running ******************** This sample can be found under :file:`samples/bluetooth/ble_radio_notification/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/bluetooth/hello_softdevice/README.rst b/samples/bluetooth/hello_softdevice/README.rst index 6d9f1116e0..006fdc864c 100644 --- a/samples/bluetooth/hello_softdevice/README.rst +++ b/samples/bluetooth/hello_softdevice/README.rst @@ -72,21 +72,12 @@ Overview The sample demonstrates the basic management of the SoftDevice in |BMlong|. It shows how to enable and disable the SoftDevice, handle various types of events related to the SoftDevice, and manage the Bluetooth LE functionality. -Programming the S115 SoftDevice -******************************* - -.. include:: /includes/softdevice_flash.txt - Building and running ******************** This sample can be found under :file:`samples/bluetooth/hello_softdevice/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/boot/mcuboot_recovery_entry/README.rst b/samples/boot/mcuboot_recovery_entry/README.rst index 63ca421ebb..0656c98f11 100644 --- a/samples/boot/mcuboot_recovery_entry/README.rst +++ b/samples/boot/mcuboot_recovery_entry/README.rst @@ -53,18 +53,14 @@ Programming the S115 SoftDevice The SoftDevice is automatically flashed when programming the board. No additional steps are needed for programming the SoftDevice when building with MCUboot firmware loader mode enabled. -.. _ble_mcuboot_recovery_entry_sample_testing: - Building and running ******************** -This sample can be found under :file:`samples/boot/mcuboot_recovery_entry` in the |BMshort| folder structure. +This sample can be found under :file:`samples/boot/mcuboot_recovery_entry/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +.. _ble_mcuboot_recovery_entry_sample_testing: Testing ======= diff --git a/samples/boot/mcuboot_recovery_retention/README.rst b/samples/boot/mcuboot_recovery_retention/README.rst index 363536363e..fffc2b3fb0 100644 --- a/samples/boot/mcuboot_recovery_retention/README.rst +++ b/samples/boot/mcuboot_recovery_retention/README.rst @@ -47,18 +47,14 @@ Programming the S115 SoftDevice The SoftDevice is automatically flashed when programming the board. No additional steps are needed for programming the SoftDevice when building with MCUboot firmware loader mode enabled. -.. _ble_mcuboot_recovery_retention_sample_testing: - Building and running ******************** -This sample can be found under :file:`samples/boot/mcuboot_recovery_retention` in the |BMshort| folder structure. +This sample can be found under :file:`samples/boot/mcuboot_recovery_retention/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +.. _ble_mcuboot_recovery_retention_sample_testing: Testing ======= diff --git a/samples/nfc/record_text_t2t/README.rst b/samples/nfc/record_text_t2t/README.rst index 174e0266e9..6cb989caba 100644 --- a/samples/nfc/record_text_t2t/README.rst +++ b/samples/nfc/record_text_t2t/README.rst @@ -56,13 +56,9 @@ LED 0: Building and running ******************** -This sample is located under :file:`samples/nfc/record_text/` in the |BMshort| folder structure. +This sample is located under :file:`samples/nfc/record_text_t2t/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. .. note:: |nfc_nfct_driver_note| diff --git a/samples/nfc/record_text_t4t/README.rst b/samples/nfc/record_text_t4t/README.rst index b875b17d7e..bda95fb632 100644 --- a/samples/nfc/record_text_t4t/README.rst +++ b/samples/nfc/record_text_t4t/README.rst @@ -58,11 +58,7 @@ Building and running This sample is located under :file:`samples/nfc/record_text_t4t/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. .. note:: |nfc_nfct_driver_note| diff --git a/samples/peripherals/buttons/README.rst b/samples/peripherals/buttons/README.rst index e41f4b438a..0428512b06 100644 --- a/samples/peripherals/buttons/README.rst +++ b/samples/peripherals/buttons/README.rst @@ -69,11 +69,7 @@ Building and running This sample can be found under :file:`samples/peripherals/buttons/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/peripherals/leds/README.rst b/samples/peripherals/leds/README.rst index c56d9377dc..b5d4853d9b 100644 --- a/samples/peripherals/leds/README.rst +++ b/samples/peripherals/leds/README.rst @@ -74,11 +74,7 @@ Building and running This sample can be found under :file:`samples/peripherals/leds/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/peripherals/lpuarte/README.rst b/samples/peripherals/lpuarte/README.rst index 9a70566937..e2a2d438a0 100644 --- a/samples/peripherals/lpuarte/README.rst +++ b/samples/peripherals/lpuarte/README.rst @@ -91,11 +91,7 @@ Building and running This sample can be found under :file:`samples/peripherals/lpuarte/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/peripherals/pwm/README.rst b/samples/peripherals/pwm/README.rst index 276befb218..2f5a96d2f1 100644 --- a/samples/peripherals/pwm/README.rst +++ b/samples/peripherals/pwm/README.rst @@ -80,11 +80,7 @@ Building and running This sample can be found under :file:`samples/peripherals/pwm/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/peripherals/timer/README.rst b/samples/peripherals/timer/README.rst index ea520fe81c..92ac0ab72c 100644 --- a/samples/peripherals/timer/README.rst +++ b/samples/peripherals/timer/README.rst @@ -7,7 +7,7 @@ Timer :local: :depth: 2 -The Timer sample demonstrates the use of both single-shot and periodic timers. +The Timer sample demonstrates how to configure and use the Bare Metal Timer (:ref:`lib_bm_timer`) library to generate both single-shot and periodic callback events to your application code. Requirements ************ @@ -74,11 +74,7 @@ Building and running This sample can be found under :file:`samples/peripherals/timer/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/peripherals/uarte/README.rst b/samples/peripherals/uarte/README.rst index 377b257494..ae4ce13c4c 100644 --- a/samples/peripherals/uarte/README.rst +++ b/samples/peripherals/uarte/README.rst @@ -75,11 +75,7 @@ Building and running This sample can be found under :file:`samples/peripherals/uarte/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= diff --git a/samples/subsys/fs/bm_zms/README.rst b/samples/subsys/fs/bm_zms/README.rst index 72d174ae87..dd2fe24f66 100644 --- a/samples/subsys/fs/bm_zms/README.rst +++ b/samples/subsys/fs/bm_zms/README.rst @@ -71,19 +71,14 @@ Kconfig fragments ***************** By default, the sample uses the SoftDevice storage backend. -To build the sample for the RRAM backend, you can use the :file:`backend-rram.conf` Kconfig fragment. -To configure it for this sample, follow the steps outlined in the `Configuring and building the sample`_ section. +To configure it for this sample, follow the steps outlined in :ref:`sample_intro_config_build`. Building and running ******************** -This sample can be found under :file:`samples/bm_zms` in the |BMshort| folder structure. +This sample can be found under :file:`samples/subsys/fs/bm_zms/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= @@ -93,85 +88,42 @@ You can test this sample by performing the following steps: 1. Compile and program the application. #. Observe that the following output is printed: -* For the SoftDevice storage backend: - - .. code-block:: console - - [00:00:00.012,012] app: BM_ZMS sample started - [00:00:00.012,033] nrf_sdh: State change request: enable - [00:00:00.018,839] bm_zms: 4 Sectors of 1024 bytes - [00:00:00.018,849] bm_zms: alloc wra: 0, 3c0 - [00:00:00.018,856] bm_zms: data wra: 0, 0 - [00:00:00.018,869] app: ITERATION: 0 - [00:00:00.018,892] app: Adding IP_ADDRESS 172.16.254.1 at id 1 - [00:00:00.021,326] app: Adding key/value at id beefdead - [00:00:00.022,575] app: Adding counter at id 2 - [00:00:00.023,737] app: Adding Longarray at id 3 - [00:00:00.027,990] bm_zms: 4 Sectors of 1024 bytes - [00:00:00.027,999] bm_zms: alloc wra: 0, 380 - [00:00:00.028,006] bm_zms: data wra: 0, 90 - [00:00:00.028,011] app: ITERATION: 1 - [00:00:00.028,044] app: ID: 1, IP Address: 172.16.254.1 - [00:00:00.028,062] app: Adding IP_ADDRESS 172.16.254.1 at id 1 - [00:00:00.030,471] app: Id: beefdead +.. code-block:: console + + [00:00:00.012,012] app: BM_ZMS sample started + [00:00:00.012,033] nrf_sdh: State change request: enable + [00:00:00.018,839] bm_zms: 4 Sectors of 1024 bytes + [00:00:00.018,849] bm_zms: alloc wra: 0, 3c0 + [00:00:00.018,856] bm_zms: data wra: 0, 0 + [00:00:00.018,869] app: ITERATION: 0 + [00:00:00.018,892] app: Adding IP_ADDRESS 172.16.254.1 at id 1 + [00:00:00.021,326] app: Adding key/value at id beefdead + [00:00:00.022,575] app: Adding counter at id 2 + [00:00:00.023,737] app: Adding Longarray at id 3 + [00:00:00.027,990] bm_zms: 4 Sectors of 1024 bytes + [00:00:00.027,999] bm_zms: alloc wra: 0, 380 + [00:00:00.028,006] bm_zms: data wra: 0, 90 + [00:00:00.028,011] app: ITERATION: 1 + [00:00:00.028,044] app: ID: 1, IP Address: 172.16.254.1 + [00:00:00.028,062] app: Adding IP_ADDRESS 172.16.254.1 at id 1 + [00:00:00.030,471] app: Id: beefdead [00:00:00.030,487] app: Key: - de ad be ef de ad be ef |........ - [00:00:00.030,491] app: Adding key/value at id beefdead - [00:00:00.031,723] app: Id: 2, loop_cnt: 0 - [00:00:00.031,729] app: Adding counter at id 2 - [00:00:00.032,926] app: Id: 3 - [00:00:00.032,946] app: Longarray: - 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |........ ........ - 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |........ ........ - 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f | !"#$%&' ()*+,-./ - 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |01234567 89:;<=>? - 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |@ABCDEFG HIJKLMNO - 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |PQRSTUVW XYZ[\]^_ - 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |`abcdefg hijklmno - 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |pqrstuvw xyz{|}~. - [00:00:00.032,950] app: Adding Longarray at id 3 - [00:00:00.563,183] bm_zms: No space in flash, gc_count 3, sector_count 4 - [00:00:00.630,422] app: Memory is full let's delete all items - [00:00:01.767,151] app: Free space in storage is 2848 bytes - [00:00:01.767,241] app: BM_ZMS sample finished Successfully - -* For the RRAM storage backend: - - .. code-block:: console - - [00:00:00.012,009] app: BM_ZMS sample started - [00:00:00.012,371] bm_zms: 4 Sectors of 1024 bytes - [00:00:00.012,380] bm_zms: alloc wra: 0, 3c0 - [00:00:00.012,387] bm_zms: data wra: 0, 0 - [00:00:00.012,393] app: ITERATION: 0 - [00:00:00.012,415] app: Adding IP_ADDRESS 172.16.254.1 at id 1 - [00:00:00.012,541] app: Adding key/value at id beefdead - [00:00:00.012,657] app: Adding counter at id 2 - [00:00:00.012,772] app: Adding Longarray at id 3 - [00:00:00.013,419] bm_zms: 4 Sectors of 1024 bytes - [00:00:00.013,428] bm_zms: alloc wra: 0, 380 - [00:00:00.013,434] bm_zms: data wra: 0, 90 - [00:00:00.013,439] app: ITERATION: 1 - [00:00:00.013,470] app: ID: 1, IP Address: 172.16.254.1 - [00:00:00.013,487] app: Adding IP_ADDRESS 172.16.254.1 at id 1 - [00:00:00.013,675] app: Id: beefdead - [00:00:00.013,687] app: Key: - de ad be ef de ad be ef |........ - [00:00:00.013,691] app: Adding key/value at id beefdead - [00:00:00.013,841] app: Id: 2, loop_cnt: 0 - [00:00:00.013,846] app: Adding counter at id 2 - [00:00:00.013,970] app: Id: 3 - [00:00:00.013,988] app: Longarray: - 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |........ ........ - 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |........ ........ - 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f | !"#$%&' ()*+,-./ - 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |01234567 89:;<=>? - 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |@ABCDEFG HIJKLMNO - 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |PQRSTUVW XYZ[\]^_ - 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |`abcdefg hijklmno - 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |pqrstuvw xyz{|}~. - [00:00:00.013,992] app: Adding Longarray at id 3 - [00:00:00.090,144] bm_zms: No space in flash, gc_count 3, sector_count 4 - [00:00:00.156,662] app: Memory is full let's delete all items - [00:00:00.357,856] app: Free space in storage is 2848 bytes - [00:00:00.358,163] app: BM_ZMS sample finished Successfully + de ad be ef de ad be ef |........ + [00:00:00.030,491] app: Adding key/value at id beefdead + [00:00:00.031,723] app: Id: 2, loop_cnt: 0 + [00:00:00.031,729] app: Adding counter at id 2 + [00:00:00.032,926] app: Id: 3 + [00:00:00.032,946] app: Longarray: + 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |........ ........ + 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |........ ........ + 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f | !"#$%&' ()*+,-./ + 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f |01234567 89:;<=>? + 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f |@ABCDEFG HIJKLMNO + 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f |PQRSTUVW XYZ[\]^_ + 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f |`abcdefg hijklmno + 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f |pqrstuvw xyz{|}~. + [00:00:00.032,950] app: Adding Longarray at id 3 + [00:00:00.563,183] bm_zms: No space in flash, gc_count 3, sector_count 4 + [00:00:00.630,422] app: Memory is full let's delete all items + [00:00:01.767,151] app: Free space in storage is 2848 bytes + [00:00:01.767,241] app: BM_ZMS sample finished Successfully diff --git a/samples/subsys/storage/bm_storage/README.rst b/samples/subsys/storage/bm_storage/README.rst index 65b01b52f0..6227ed4284 100644 --- a/samples/subsys/storage/bm_storage/README.rst +++ b/samples/subsys/storage/bm_storage/README.rst @@ -71,19 +71,14 @@ Kconfig fragments ***************** By default, the sample uses the SoftDevice storage backend. -To build the sample for the RRAM backend, you can use the :file:`backend-rram.conf` Kconfig fragment. -To configure it for this sample, follow the steps outlined in the `Configuring and building the sample`_ section. +To configure it for this sample, follow the steps outlined in :ref:`sample_intro_config_build`. Building and running ******************** -This sample can be found under :file:`samples/peripherals/storage/` in the |BMshort| folder structure. +This sample can be found under :file:`samples/subsys/storage/bm_storage/` in the |BMshort| folder structure. -.. include:: /includes/create_sample.txt - -.. include:: /includes/configure_and_build_sample.txt - -.. include:: /includes/program_sample.txt +For details on how to create, configure, and program a sample, see :ref:`getting_started_with_the_samples`. Testing ======= @@ -93,67 +88,35 @@ You can test this sample by performing the following steps: 1. Compile and program the application. #. Observe that the following output is printed: -* For the SoftDevice storage backend: - - .. code-block:: console - - [00:00:00.005,789] app: Storage sample started - [00:00:00.005,810] nrf_sdh: State change request: enable - [00:00:00.011,214] app: Reading persisted data - [00:00:00.011,232] app: output A: - 48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 |Hello... ........ - [00:00:00.011,244] app: output B: - 57 6f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 |World!.. ........ - [00:00:00.011,250] app: Erasing in Partition A, addr: 0x0015B000, size: 16 - [00:00:00.011,297] app: Erasing in Partition B, addr: 0x0015C000, size: 16 - [00:00:00.011,304] app: Waiting for writes to complete... - [00:00:00.012,370] app: Handler A: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 1 - [00:00:00.013,444] app: Handler B: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 1 - [00:00:00.013,468] app: output A: - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |........ ........ - [00:00:00.013,481] app: output B: - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |........ ........ - [00:00:00.013,496] nrf_sdh: State change request: disable - [00:00:00.013,531] app: Writing in Partition A, addr: 0x0015B000, size: 16 - [00:00:00.013,659] app: Handler A: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 - [00:00:00.013,664] app: Writing in Partition B, addr: 0x0015C000, size: 16 - [00:00:00.013,769] app: Handler B: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 - [00:00:00.013,775] app: Waiting for writes to complete... - [00:00:00.013,789] app: output A: - 48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 |Hello... ........ - [00:00:00.013,801] app: output B: - 57 6f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 |World!.. ........ - [00:00:00.013,807] app: Storage sample finished. - -* For the RRAM storage backend: - - .. code-block:: console - - [00:00:00.005,783] app: Storage sample started - [00:00:00.005,791] app: Reading persisted data - [00:00:00.005,808] app: output A: - 48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 |Hello... ........ - [00:00:00.005,820] app: output B: - 57 6f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 |World!.. ........ - [00:00:00.005,825] app: Erasing in Partition A, addr: 0x0015B000, size: 16 - [00:00:00.005,835] app: Handler A: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 - [00:00:00.005,886] app: Erasing in Partition B, addr: 0x0015C000, size: 16 - [00:00:00.005,894] app: Handler B: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 - [00:00:00.005,949] app: Waiting for writes to complete... - [00:00:00.005,960] app: output A: - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |........ ........ - [00:00:00.005,972] app: output B: - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |........ ........ - [00:00:00.005,977] app: Writing in Partition A, addr: 0x0015B000, size: 16 - [00:00:00.005,985] app: Handler A: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 - [00:00:00.006,008] app: Writing in Partition B, addr: 0x0015C000, size: 16 - [00:00:00.006,016] app: Handler B: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 - [00:00:00.006,042] app: Waiting for writes to complete... - [00:00:00.006,053] app: output A: - 48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 |Hello... ........ - [00:00:00.006,065] app: output B: - 57 6f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 |World!.. ........ - [00:00:00.006,071] app: Storage sample finished. +.. code-block:: console + + [00:00:00.005,789] app: Storage sample started + [00:00:00.005,810] nrf_sdh: State change request: enable + [00:00:00.011,214] app: Reading persisted data + [00:00:00.011,232] app: output A: + 48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 |Hello... ........ + [00:00:00.011,244] app: output B: + 57 6f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 |World!.. ........ + [00:00:00.011,250] app: Erasing in Partition A, addr: 0x0015B000, size: 16 + [00:00:00.011,297] app: Erasing in Partition B, addr: 0x0015C000, size: 16 + [00:00:00.011,304] app: Waiting for writes to complete... + [00:00:00.012,370] app: Handler A: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 1 + [00:00:00.013,444] app: Handler B: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 1 + [00:00:00.013,468] app: output A: + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |........ ........ + [00:00:00.013,481] app: output B: + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |........ ........ + [00:00:00.013,496] nrf_sdh: State change request: disable + [00:00:00.013,531] app: Writing in Partition A, addr: 0x0015B000, size: 16 + [00:00:00.013,659] app: Handler A: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 + [00:00:00.013,664] app: Writing in Partition B, addr: 0x0015C000, size: 16 + [00:00:00.013,769] app: Handler B: bm_storage_evt: WRITE_RESULT 0, DISPATCH_TYPE 0 + [00:00:00.013,775] app: Waiting for writes to complete... + [00:00:00.013,789] app: output A: + 48 65 6c 6c 6f 00 00 00 00 00 00 00 00 00 00 00 |Hello... ........ + [00:00:00.013,801] app: output B: + 57 6f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 |World!.. ........ + [00:00:00.013,807] app: Storage sample finished. .. note::