11 releases (6 breaking)

0.16.0 Oct 26, 2022
0.15.1 May 31, 2022
0.15.0 Feb 11, 2022
0.14.0 Sep 27, 2021
0.11.0 Jul 12, 2020

#1435 in Embedded development

Download history 30/week @ 2023-08-17 33/week @ 2023-08-24 25/week @ 2023-08-31 71/week @ 2023-09-07 23/week @ 2023-09-14 15/week @ 2023-09-21 23/week @ 2023-09-28 19/week @ 2023-10-05 50/week @ 2023-10-12 31/week @ 2023-10-19 40/week @ 2023-10-26 29/week @ 2023-11-02 22/week @ 2023-11-09 24/week @ 2023-11-16 49/week @ 2023-11-23 55/week @ 2023-11-30

155 downloads per month
Used in 2 crates


10K SLoC

Hardware Abstration Layer for the Nordic nRF9160

This crate is a Hardware Abstraction Layer (HAL) for the Nordic nRF9160. It wraps the PAC (nrf9160-pac) and provides high level wrappers for the chip's peripherals.

This crate knows nothing about your PCB layout, or which pins you have assigned to which functions. The only exception are the examples, which are written to run on the official nRF9160-DK developer kit.


You will require the thumbv8m.main-none-eabihf target installed.

$ rustup target add thumbv8m.main-none-eabihf

Secure vs Non-Secure

This HAL is designed to run in non-secure mode, as should most of your application code. You will therefore need a 'bootloader' which starts in secure mode, moves the required peripherals into 'non-secure' world, and then jumps to your application.

We have succesfully used Nordic's Secure Partition Manager from nRF SDK v1.5.1. SPM v1.5.1 is configured to expect your application at address 0x0005_0000 and so that is what memory.x must specify as the start of Flash.

Note: Other versions of SPM might expect a different start address - especially those compiled as a child image of another application (like at_sample)! You can see the start address on boot-up:

SPM: NS image at 0x50000

This tells you SPM is looking for a non-secure (NS) image at 0x0005_0000.

To build SPM, run:

$ west init -m https://github.com/nrfconnect/sdk-nrf --mr v1.5.1 ncs
$ cd ncs
$ west update # This takes *ages*
$ cd nrf/examples/spm
$ west build --board=nrf9160dk_nrf9160
$ west flash

West is a Python tool supplied by Nordic for building the nRF Connect SDK. See Nordic's website for more details.

Your nRF9160-DK will now have SPM installed between 0x0000_0000 and 0x0004_FFFF. Flashing your application at 0x0005_0000 should not affect SPM, provided you do not select erase entire chip or somesuch!

If you want to change the flash address, supply your own memory.x file in your application crate (or your Board Support Crate) and write a build.rs file that copies your memory.x over the top of this one.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


~180K SLoC