Skip to content

NimbeLink SDK

Boards

NimbeLink provides a basic flash and RAM partition layout using a "skywire_nano_app" board. This board outlines a few of the Skywire Nano devkit features - like LEDs - but it is largely based on the nRF SDK's nRF9160 devkit board.

The application development environment does not have access to the partition definitions outside of its A/B flash images and its region of RAM.

skywire_nano_app_v1_0_x

There is an additional "legacy" Skywire Nano board available for building and linking against v1.0.x firmware.

Configuration

There are two Kconfig files that provide configurations for the NimbeLink SDK.

  • AUTO_IMAGE_VALIDATION

This configuration will automatically mark the application firmware image as "valid" upon system initialization. This serves to finalize any firmware update process, telling the boot loader that the update was successful and the current image can be booted from now on.

The validation is done using a system startup routine that runs as late into the system's initialization as possible, just short of the kernel stepping into the main() function. If there are further checks that need to be made by the application after this point, it's recommended to turn off the automatic image validation using the configuration and to call the Secure Service API manually when ready.

  • NIMBELINK_REBOOT

This configuration will pass requests to reset the device off to the stack. This can be used in conjunction with REBOOT - which is provided by the Zephyr RTOS - and RESET_ON_FATAL_ERROR - which is provided by the nRF Conenct SDK.

  • ABORT_ON_FATAL_ERROR

This configuration will prevent the application from being run after a fatal error occurs, allowing the stack to continue normal operation. This can better facilitate DFU operations to update a crash-looping application.

It's recommended this configuration be used during development, but to be disabled for production in favor of RESET_ON_FATAL_ERROR, which can be found in the nRF SDK.

  • NIMBELINK_SOCKETS

This configuration will register the NimbeLink socket handling to automatically pass socket operations to the stack.

  • NIMBELINK_AT_CMD

This configuration will build the NimbeLink AT command handling source, which translates the Nordic "at_cmd" library APIs to Secure Services, which are then handled by the stack.

  • NIMBELINK_FOTA_DOWNLOAD

NimbeLink offers an "offloaded" fota_download library that passes the library's APIs to the stack. The stack then handles the entirety of the firmware download, flashing, and image swap process.

  • REQUEST_NON_SECURE_*

These configurations will be used by the NimbeLink SDK to automatically request Non-Secure access to desired peripherals during system initialization. It's highly recommended that this system be used, as the Non-Secure access must be available prior to the Zephyr RTOS attempting to initialize the system's drivers, which occurs before Zephyr steps into the application's main() routine. However, if a different approach is needed, can be made at any time by any Non-Secure firmware.

Scripts

To ease interactions with the Skywire Nano, the NimbeLink SDK also provides Python scripts that can be integrated with the west build system used by the nRF SDK. NimbeLink's nRF SDK fork includes these commands automatically. Otherwise, to include these in your project, use the "west-commands" line in your west.yml file in your primary repository.

You can get help on command usage using:

west nano --help

Package Installation

If you wish to use the commands outside of the west tool, the NimbeLink SDK provides the Python source as an installable package. You can install the package and its dependencies using pip:

pip install -e <path>/scripts

where <path> is the path to the NimbeLink SDK repository's directory. The installation will result in a nimbelink "console script". If your environment is configured to include the Python console scripts in your path, it can be called directly from the command line:

nimbelink nano --help

Otherwise, the package can also be called as a "module" from python:

python -m nimbelink nano --help