This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF5340 - UART programming option

Hello,

I'm in the process of developing the HW board for a nRF5340-based product.
I need the customer could update the firmware using a serial port (USB or Bluetooth is not acceptable).
Is it possible to do that ? Where to found documentation on this ?

Regards,
Gabriele

  • Hi Hung,
    Thank you, this is a clean step-by-step recipe. I'm sorry I cannot test this in real time. These days much of my effort is on the PCB design. Consider that the DFU must get started from a Windows host, because the product is linked to a Windows PC where the user application runs. Thus, as for the first step, I think I have to install Go for Windows, right ? 

  • I don't think Go is needed for the UART dfu application. 

    However, DFU update is a quite complex application. I would suggest you to get started with testing normal UART application. You will need to have normal SWD programming (not UART DFU) for the development, make sure you have the SWD accessible and has the programmer (can be a nRF53 DK). 

  • Hi Hung

    Let me sum up the state of art as follow-up to this thread.

    I've a nRF5340 custom board and a working Zephyr application I can build (under NCS v1.2.0), flash (using SWD), and run.
    The UART works fine, either as console and generic user data.
    Now, I want to perform DFU through the UART.
    I need to include MCUBoot with MCUmgr with SMP server and Uart transport.

    Here is what I've done

    1. Add Uart support for mcumgr into board file <ncs>/zephyr/boards/arm/qi2m_nrf5340/qi2m_nrf5340_cpuapp_common.dts
    chosen {
    ...
    zephyr,uart-mcumgr = &uart0;
    };

    2. Change prj.conf of my application by adding
    CONFIG_MCUMGR=y
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_NET_BUF=y
    CONFIG_MCUMGR_SMP_UART=y

    3. Rebuilding the application with
    $ west build -b qi2m-nrf5340_cpuapp --build-dir buildout

    I get the error

    ..
    FAILED: zephyr/autogen/pubkey.c
    ModuleNotFoundError: No module named 'cbor'

    Is there anything missed ?
    Does it help to move to NCS 1.3.0 ?

    Thanks

  • Hi Hung
    I'm trying to follow your initial recipe

    a) Build and flash mcuboot
      $ cd <ncs>/bootloader/mcuboot/boot/zephyr
      $ west build -b qi2m_nrf5340_cpuapp --build-dir buildout
      $ nrfjprog -f nrf53 --program buildout/zephyr/zephyr.hex

      I check out reading flash. One image found at
        0x00000000 - 0x0000891f (35104 B)

    b) Build and flash smp_svr
      $ cd <ncs>/zephyr/samples/subsys/mgmt/mcumgr/smp_svr
      $ vim prj.conf
      Add these lines
        CONFIG_MCUMGR_SMP_UART=y
        CONFIG_NET_BUF_USER_DATA_SIZE=7
      $ west build -b qi2m_nrf5340_cpuapp --build-dir buildout
      $ nrfjprog -f nrf53 --program buildout/zephyr/zephyr.hex

      I check out reading flash. Two images found at
        0x00000000 - 0x0000891f (35104 B)
        0x00010200 - 0x0001a62b (42028 B)

    On board restart I get out of UART

      *** Booting Zephyr OS build v2.3.0-rc1-ncs1 ***
      [00:00:00.003,051] <inf> mcuboot: Starting bootloader
      [00:00:00.009,063] <inf> mcuboot: Primary image: magic=unset, swap_type=0x1, copy_done=0x3, image_ok=0x3
      [00:00:00.019,165] <inf> mcuboot: Boot source: none
      [00:00:00.024,566] <wrn> mcuboot: Failed reading image headers; Image=0
      [00:00:00.032,012] <err> mcuboot: Unable to find bootable image

    Issuing from host the test command

      $ mcumgr -t 20 --conntype serial --connstring='/dev/ttyUSB0,baud=115200' image list

    I get "Error: NMP timeout"

    What a hell to do ?

Related