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

Secure DFU: Isn't upgrading firmware with custom files

Hello there,

I am working on secure dfu. I followed all the steps mentioned in this post and successfully created the secure .zip file.

Here's what I did(In this order):

  • Loaded Softdevice 6.1.1
  • Flashed "secure_bootloader_ble_s140_pca10056" into DK
  • Used nRF Connect app on my iOS device to upgrade the application.

Here's what is happening:

  • If I use any file from "secure_dfu_test_images", everything is being upgraded correctly. New appication is working as expected.
  • If I use the .hex file from /project/pca10056/blank/ses/Output/Debug/Exe and create a secure .zip file with nrfutil and try to upgrade the application, the upgrade is complete on nRF Connect App. Then LEDs will be off and nothing happens. On restart, nothing boots up - neither BLE nor new App code.
  • If I manually flash the same .hex file using ses -> Target -> Download File -> Intel Hex(After clearing all memory), the application code is working okay. So, it's not Application problem.


It'd be fantastic if you can help me understand what's going on here and tell me how to fox this.

Thanks

Teja

Parents
  • Hi, 

     

    If I use the .hex file from /project/pca10056/blank/ses/Output/Debug/Exe and create a secure .zip file with nrfutil and try to upgrade the application, the upgrade is complete on nRF Connect App. Then LEDs will be off and nothing happens. On restart, nothing boots up - neither BLE nor new App code.

     You should use ble_app_blinky_pca10056_s140.hex under nRF5_SDK\examples\ble_peripheral\ble_app_blinky\hex to create the .zip file to run the BLE application.

    -Amanda H. 

Reply
  • Hi, 

     

    If I use the .hex file from /project/pca10056/blank/ses/Output/Debug/Exe and create a secure .zip file with nrfutil and try to upgrade the application, the upgrade is complete on nRF Connect App. Then LEDs will be off and nothing happens. On restart, nothing boots up - neither BLE nor new App code.

     You should use ble_app_blinky_pca10056_s140.hex under nRF5_SDK\examples\ble_peripheral\ble_app_blinky\hex to create the .zip file to run the BLE application.

    -Amanda H. 

Children
  • Hi, Amanda,

    Thank you for responding to my question. I have my own project(Without BLE) and I want to understand how to use DFU to update the application.

    As you know already, Everytime I "build" the application using SES, a new .hex file will be created in:

    nRF5_SDK_16.0.0_98a08e2\examples\peripheral\projectName\pca10056\blank\ses\Output\Release\Exe

    Can you please tell me what should I do, apart from creating update package using nrfutil, to update this application using nRFCOnnect app on my phone?

  • Here are the steps I currently follow:

    1. Erase the MCU using SES
    2. Load softdevice by going to Target -> Download File -> Download Intel Hex File -> and selecting the file from \SDK\Components\softdevice\s140\hex
    3. Open secure_bootloader_ble_s140_pca10056 project and loading into DK by clicking on F5
    4. Create the package using nrfutil after matching the softdevice version
    5. Load the package on nRFConnect App on my phone
    6. Connecting to the device, goto Update tab and then click on "Start"
  • I think I get what you're saying.

    I believe, I am not creating "Application" file. Creating the zip files using the .hex file from nRF5_SDK_16.0.0_98a08e2\examples\peripheral\projectName\pca10056\blank\ses\Output\Release\Exe, is not the right way to creating "Application" which bootloader is expecting.

    If my understanding is correct, can you please help me create a right application file to be used in secure USB and/or secure BLE bootloaders?

  • Hi, 

    I think you are testing secure_bootloader_ble, then you only can update the ble application like BLE Blinky Application

    If you want to update the application like Blinky Example, you should use the UART DFU. 

    -Amanda H.

  • Thanks Amanda.

    I tried updating the firmware using secure UART DFU and I am getting an error.

    COM Port:

    nrfUtil Command:

    nrfutil dfu serial -pkg PDFW.zip -p COM4

    Error:

    Traceback (most recent call last):
      File "C:\Users\tejac\AppData\Local\Programs\Python\Python37-32\Scripts\nrfutil-script.py", line 11, in <module>
        load_entry_point('nrfutil==6.0.1', 'console_scripts', 'nrfutil')()
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\click\core.py", line 829, in __call__
        return self.main(*args, **kwargs)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\click\core.py", line 782, in main
        rv = self.invoke(ctx)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\click\core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\click\core.py", line 1259, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\click\core.py", line 1066, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\click\core.py", line 610, in invoke
        return callback(*args, **kwargs)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\__main__.py", line 1035, in serial
        timeout)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\__main__.py", line 949, in do_serial
        dfu.dfu_send_images()
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\dfu\dfu.py", line 127, in dfu_send_images
        self._dfu_send_image(self.manifest.application)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\dfu\dfu.py", line 95, in _dfu_send_image
        self.dfu_transport.send_init_packet(data)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\dfu\dfu_transport_serial.py", line 255, in send_init_packet
        self.__stream_data(data=init_packet)
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\dfu\dfu_transport_serial.py", line 474, in __stream_data
        response = self.__calculate_checksum()
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\dfu\dfu_transport_serial.py", line 409, in __calculate_checksum
        response = self.__get_response(DfuTransportSerial.OP_CODE['CalcChecSum'])
      File "c:\users\tejac\appdata\local\programs\python\python37-32\lib\site-packages\nordicsemi\dfu\dfu_transport_serial.py", line 492, in __get_response
        + 'Expected: 0x{:02X} Received: 0x{:02X}'.format(operation, resp[1]))
    pc_ble_driver_py.exceptions.NordicSemiException: Unexpected Executed OP_CODE.
    Expected: 0x03 Received: 0xF0

    Can you help me understand what's causing this and how I can fix this?

Related