From c72e8bb6b9270d9a8d15d5d1b8e528a9e01464f0 Mon Sep 17 00:00:00 2001 From: Jan Kowalewski Date: Tue, 10 Dec 2024 17:44:20 +0100 Subject: [PATCH] boards: ct: ctcc: connectivity cards documentation update * Add documentation about nRF9161 SoC variant * Modify example apps to include both nRF9161 and nRF52840 * Switch from DFU to MCUmgr in example apps Signed-off-by: Jan Kowalewski --- .../ct/ctcc/doc/img/ctcc_nrf9161_mpcie.webp | Bin 0 -> 31792 bytes boards/ct/ctcc/doc/index.rst | 186 ++++++++++++------ 2 files changed, 129 insertions(+), 57 deletions(-) create mode 100644 boards/ct/ctcc/doc/img/ctcc_nrf9161_mpcie.webp diff --git a/boards/ct/ctcc/doc/img/ctcc_nrf9161_mpcie.webp b/boards/ct/ctcc/doc/img/ctcc_nrf9161_mpcie.webp new file mode 100644 index 0000000000000000000000000000000000000000..20785314c3d4d9001b82c22e5f92f61a555644bc GIT binary patch literal 31792 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 -2. Using MCUboot with DFU support +2. Using MCUboot with MCUmgr support + +Below instructions are provided for ``ctcc/nrf52840``, to use ``nrf9161`` target, the USB device configs have +to be replaced with UART configurations. Option 1: Using an External Debug Probe --------------------------------------- @@ -114,58 +171,72 @@ logs on emulated USB port. :board: ctcc/nrf52840 :goals: build flash -Debugging -========= +Option 2: Using MCUboot with MCUmgr support +------------------------------------------- -The ``ctcc/nrf52840`` board target does not have an on-board J-Link debug IC, however -instructions from the :ref:`nordic_segger` page also apply to this board, -with the additional step of connecting an external debugger. +It is also possible to use the MCUboot bootloader with :ref:`mcu_mgr` support to flash +Zephyr applications. + +Install a MCUmgr-compatible tool from :ref:`supported list ` +and make sure MCUboot's ``imgtool`` is available for signing your binary +for MCUboot as described on :ref:`west-sign`. + +#. Compile MCUboot as a Zephyr application with ``MCUmgr`` support. -Option 2: Using MCUboot with DFU support ----------------------------------------- +.. tabs:: -It is also possible to use the MCUboot bootloader with DFU support to flash -Zephyr applications. You need to flash MCUboot with DFU support and fill in slot0 with -some application one-time using Option 1. Then you can re-flash an application using DFU utility -by loading images to slot1. Note, it's not possible to have only MCUboot and load directly -software to slot0 due to DFU implementation in Zephyr, which for present slot0 and slot1 in flash -map, it assumes only slot1 partition as writeable. + .. group-tab:: nRF52840 -Install ``dfu-util`` first and make sure MCUboot's ``imgtool`` is -available for signing your binary for MCUboot as described on :ref:`west-sign`. + To build the MCUboot: -Next, do the **one-time setup** to flash MCUboot with DFU support. -We'll assume you've cloned the `MCUboot`_ as a submodule when initializing -Zephyr repositories using :ref:`west` tool. + .. code-block:: console -#. Compile MCUboot as a Zephyr application with DFU support. + west build \ + -b ctcc/nrf52832 \ + mcuboot/boot/zephyr - .. zephyr-app-commands:: - :app: mcuboot/boot/zephyr - :board: ctcc/nrf52840 - :build-dir: mcuboot - :goals: build - :gen-args: -DCONFIG_BOOT_USB_DFU_WAIT=y + .. group-tab:: nRF9161 + + To build the MCUboot: + + .. code-block:: console + + west build \ + -b ctcc/nrf9161 \ + mcuboot/boot/zephyr #. Flash it onto the board as described in Option 1. -#. Flash other Zephyr application to fill in slot0 e.g: +#. Flash other Zephyr application over USB using :ref:`MCUmgr-compatible tool ` and reset target to boot into the image. + +.. tabs:: + + .. group-tab:: nRF52840 + + Build the blinky example with MCUboot support: + + .. code-block:: console - .. zephyr-app-commands:: - :zephyr-app: samples/subsys/usb/dfu - :board: ctcc/nrf52840 - :build-dir: dfu - :goals: build - :gen-args: -DCONFIG_BOOTLOADER_MCUBOOT=y -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"path/to/mcuboot/boot/root-rsa-2048.pem\" + west build \ + -b ctcc/nrf52832 \ + samples/basic/blinky \ + -- \ + -DCONFIG_BOOTLOADER_MCUBOOT=y \ + -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"path/to/mcuboot/boot/root-rsa-2048.pem\" -You can now flash a Zephyr application to the board using DFU util. -As an example we'll use the :zephyr:code-sample:`usb-cdc-acm-console` sample. + .. group-tab:: nRF9161 + + Build the blinky example with MCUboot support: + + .. code-block:: console + + west build \ + -b ctcc/nrf9161 \ + samples/basic/blinky \ + -- \ + -DCONFIG_BOOTLOADER_MCUBOOT=y \ + -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"path/to/mcuboot/boot/root-rsa-2048.pem\" - .. zephyr-app-commands:: - :zephyr-app: samples/subsys/usb/console - :board: ctcc/nrf52840 - :goals: build flash - :gen-args: -DCONFIG_BOOTLOADER_MCUBOOT=y -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"path/to/mcuboot/boot/root-rsa-2048.pem\" .. note:: @@ -173,25 +244,26 @@ As an example we'll use the :zephyr:code-sample:`usb-cdc-acm-console` sample. directory. Providing certificate in build args produces signed binary automatically. Do not use this certificate in your production firmware! -#. Plug in ``ctcc/nrf52840`` card to mPCIe/M.2 slot or use mPCIe/M.2 adapter to USB - and plug such adapter to USB port. +Debugging +========= - You should see ``NordicSemiconductor MCUBOOT`` or ``NordicSemiconductor Zephyr DFU sample`` - (if you flashed ``dfu`` sample to slot0) device once plugging it into host - USB port. You can check that on Linux system by entering ``lsusb`` command. +These boards do not have an on-board J-Link debug IC, however +instructions from the :ref:`nordic_segger` page also apply to them, +with the additional step of connecting an external debugger. - To check if DFU device is visible you can enter ``sudo dfu-util -l`` command. Once the - device is visible you can flash Zephyr image using DFU util: ``sudo dfu-util --alt 1 --download build/zephyr/zephyr.signed.bin`` +To test flashed software, plug in ``ctcc`` card to mPCIe/M.2 slot or use mPCIe/M.2 adapter to USB and plug such adapter to USB port. + * For ``ctcc/nrf52840`` check on Linux system by entering ``lsusb`` command if the following device appears: ``NordicSemiconductor MCUBOOT`` or ``NordicSemiconductor USB-DEV`` (when booted into blinky example). + * For ``ctcc/nrf9161`` it's not possible to see a change in ``lsusb`` due to the on-board USB-UART converter. Intead, connect to the UART console using a terminal emulation program of your choice. References ********** .. target-notes:: -.. _ctcc_nrf52840 Website: +.. _Connectivity Cards Website: https://cthings.co/products/connectivity-cards .. _Nordic Semiconductor Infocenter: https://infocenter.nordicsemi.com .. _MCUboot: - https://github.com/JuulLabs-OSS/mcuboot + https://github.com/zephyrproject-rtos/mcuboot