Skip to main content

Updating the nRF9160 modem firmware

The nRF9160 has a separate ARM Cortex-M33 processor in the modem that takes care of the cellular communication and GPS functionality. The processor runs a custom modem firmware from Nordic that cannot be edited by the user. The modem firmware download page provides different versions of the firmware. Depending on the hardware version of the nRF9160, you must use a different modem firmware version. Furthermore, the nRF Connect SDK also dictates which modem firmware version you can use. Nordic Semiconductor provides a compatibility matrix in their documentation to find which modem firmware version to use. This table gives a description of which modem firmware versions and SDK versions are compatible with the Icarus hardware:

Icarus versionnRF9160 revision (build code)Modem firmware versionSupported SDK versions
v1.21 (B0)1.2.7 (or older)1.5.1 or older
v1.41 (B0)1.2.7 (or older)1.5.1 or older
v2.02 (B1)1.3.0 (or latest)1.7.0 to latest

The modem firmware version of an Icarus can be checked by flashing it with the Asset Tracker (Factory Firmware Bundle) and looking at the boot-up messages on the serial monitor. For a more detailed overview on which nRF Connect SDK version to use, see the compatibility matrix from Nordic Semiconductor.

WARNING

If you decide to update your modem firmware to version 1.3.0 or higher, it is not recommended to revert to an older modem firmware version as that can cause certificate corruption.

Updating the modem firmware

There are two ways to update the modem firmware: (a) using UART and SMP firmware, or (b) using a J-Link programmer.

Modem firmware update using UART

Prerequisites

  • An account on Actinius I/O to use the Actinius I/O Serial Programmer
  • Python
  • pynrfjprog (pip install pynrfjprog)

Flashing the modem firmware using UART

  1. Download the desired modem firmware version from Nordic's nRF9160 download page
  2. Open the Serial Programmer on Actinius I/O, connect your device and select the board type at the top right corner of the page
  3. Select the "Modem Firmware Update over UART" firmware corresponding to your board from the list
  4. Click on Write
  5. Once the "Modem Firmware Update over UART" firmware is uploaded, reset the board and use update_modem.py to upload the modem firmware:
python update_modem.py <modem firmware file> <port of board> 1000000

Prerequisites

  • The Programmer application in the nRF Connect for Desktop
  • A J-Link programmer. E.g. the nRF5340 development kit
  • An SWD cable, e.g. a TC2030-CTX-NL TagConnect cable or a 2x5 header depending on the Icarus board you are using

Flashing the modem firmware using J-Link:

  1. Download the desired modem firmware version from Nordic's nRF9160 download page.
  2. Open the nRF Connect for Desktop and the Programmer application
  3. Click on Select device in the top left corner of the Programmer and select the J-Link programmer
  4. Click on Add file and select the modem firmware zip file
  5. Click on Write

The new modem firmware will now be flashed to the nRF9160 modem. This can take around 50 seconds. After flashing, press the reset button on the board for the changes to take effect.