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