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

Programming nrf52840 via SPI

Hi,

I have to program the application on an nrf52840 chip that is connected to another MCU via the SPI interface. Since I have to send the image from the MCU to program the Nordic chip, I have the following questions.

1. I should send a .hex file (used by the nRF programmer) or a .bin file (used my mcumgr)

2. I know the .hex file has the address, but I don't know if the MCU software has to read the .hex file and create SPI frames with the proper address or any other way it has to be done.

3. If I have to use a .bin file, how to get the address from a .bin file? 

Looking forward to your reply to move forward with my application updates.

Thanks,

Ram

Parents
  • Hi,

    Which SDK are you using?

    You can reference the examples found in the blog post Getting started with Nordic's Secure DFU bootloader, a step by step guide. The section 6. DFU Master code contains C example projects for both SPI DFU master and SPIS bootloader.

    Best regards,
    Jørgen

  • Hi,

    The code in the link I posted is intended to use with nRF5 SDK and the Secure DFU Bootloader, not with nRF Connect SDK. This is why I asked which SDK your are using. I'm not sure how easily transferable these examples are to nRF Connect SDK and MCUboot.

    RAS_ID said:
    a. Shall DFU master use the hex file or the binary file (Awneil has suggested to use the binary file)?

    The nRF5 Secure DFU solution uses a ZIP-package generated by nrfutil, which includes the bin-file along with a manifest (json-file) and init-packet (dat-file).

    RAS_ID said:

    b. Since the device will be in DFU mode to update the firmware, I need to make the code changes in the bootloader, not in the application. Is it correct?

    \ncs\bootloader\mcuboot\boot\zephyr\serial_adaptor.c and other files.

    Yes, that sounds reasonable. However, if you are using multiple Image Slots, you may also be able to fill a new slot from the application (background update), and only use the Bootloader for the Image Swapping part.

    I believe that you should use the same packet format as the console example if using MCUboot. The following links should provide some useful information:

    Best regards,
    Jørgen

  • Hi Jorgen,

    Thanks for your reply! Really appreciate!

    Before I start code modifications for the upgrade, I would like you to verify if my understanding is correct about the upgrade process. 

    Please verify all the steps below and write your comment as appropriate.

    1. I believe that CBOR encoding in mcumgr is done just to speed up the data transfer process. I will use the frames as per SMP for the data transfer.

    Is it okay to send the binary from the master without encoding?

    In that case, I will exclude packet decoding in slave before writing the data from the packet to flash-memory. 

    2. The master, another MCU, will read a signed binary file (app_update.bin) and send the binary data packet  formatted as per SMP with or without encoding.

    3. The slave (nRF52840 with MCUboot and a sample application) will wait for the SPI packet in the function (identical to) boot_serial_start().

    Once a packet is received, slave processor will continue from line#609.

         if (in_buf[0] == SHELL_NLIP_PKT_START1 && …….

     4. If encoding was necessary (I would follow your reply in 1), and it was done in the master before sending the packet, I don't need any further changes other than commenting out the code related to serial output.

    5. If encoding was not done in the master, I need to comment out the function calls related to decoding as well.

    Any other comment?

    Thanks,

    Ram

Reply
  • Hi Jorgen,

    Thanks for your reply! Really appreciate!

    Before I start code modifications for the upgrade, I would like you to verify if my understanding is correct about the upgrade process. 

    Please verify all the steps below and write your comment as appropriate.

    1. I believe that CBOR encoding in mcumgr is done just to speed up the data transfer process. I will use the frames as per SMP for the data transfer.

    Is it okay to send the binary from the master without encoding?

    In that case, I will exclude packet decoding in slave before writing the data from the packet to flash-memory. 

    2. The master, another MCU, will read a signed binary file (app_update.bin) and send the binary data packet  formatted as per SMP with or without encoding.

    3. The slave (nRF52840 with MCUboot and a sample application) will wait for the SPI packet in the function (identical to) boot_serial_start().

    Once a packet is received, slave processor will continue from line#609.

         if (in_buf[0] == SHELL_NLIP_PKT_START1 && …….

     4. If encoding was necessary (I would follow your reply in 1), and it was done in the master before sending the packet, I don't need any further changes other than commenting out the code related to serial output.

    5. If encoding was not done in the master, I need to comment out the function calls related to decoding as well.

    Any other comment?

    Thanks,

    Ram

Children
No Data
Related