#nrf9160 #arm #secure #nordic #bsp #board #non-secure

no-std thingy-91-nrf9160-bsp

Nordic Thingy:91 nRF9160 的板级支持包

1 个不稳定版本

0.1.0 2021年5月31日

#918嵌入式开发

MIT/Apache

30KB
368

Nordic Thingy:91-nRF9160 的板级支持包

此板级支持包最初从 Nordic nRF9160-DK 克隆而来,并预计将继续受到其启发。感谢 42 Technology 过去和未来的工作。

此crate是一个板级支持包(BSP)。它封装了针对 Nordic Thingy:91 参考板上 nRF9160 的 HAL crate(nrf9160-hal),并为板上的功能提供高级封装。

使用方法

您需要安装 Rust 1.51 或更高版本,以及 thumbv8m.main-none-eabihf 目标。

$ rustc --version
rustc 1.52.1 (9bc8c42bb 2021-05-09)
$ rustup target add thumbv8m.main-none-eabihf

要在此BSP中使用自己的应用程序,请将其作为依赖项添加,并调用 Board::take() 函数。

示例

要构建示例之一,请运行

$ git clone https://github.com/titanclass/thingy-91-nrf9160
$ cd thingy-91-nrf9160
$ cargo objcopy --target=thumbv8m.main-none-eabihf --example blinky -- -O ihex target/thumbv8m.main-none-eabihf/debug/examples/blinky.hex

如果您未安装 cargo-objcopy,请运行

$ rustup component add llvm-tools-preview
$ cargo install cargo-binutils

或者您可以手动运行 objcopy

$ sudo apt install binutils # provides /usr/bin/objcopy on Ubuntu
$ cargo build --target=thumbv8m.main-none-eabihf --example blinky
$ objcopy -O ihex target/thumbv8m.main-none-eabihf/debug/examples/blinky target/thumbv8m.main-none-eabihf/debug/examples/blinky.hex

无论哪种方式,您都可以使用 SEGGER JFlashLite 或您喜欢的烧录工具烧录 blinky.hex 文件。

调试

要使用 Thingy:91 进行调试,您需要一个 nRF9160-DK 和 SWD 电缆。我们建议将 blinky 应用程序烧录到 nRF9160-DK 中,以提供一些视觉确认,因为开发过程中没有其他视觉确认。

nRF9160-DK 有一个板载 SEGGER JLink 调试器。您需要运行 SEGGER JLink-to-GDB 服务器软件,然后您可以使用任何 GDB 接口调试板。

$ /opt/SEGGER/JLink/JLinkGDBServerExe &
$ # A GUI will pop up. Select the nRF9160 device.
$ cargo build --target=thumbv8m.main-none-eabihf --example blinky
$ gdb-multiarch ./target/thumbv8m.main-none-eabihf/debug/examples/blinky
GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
...
Resetting target
(gdb) continue
Continuing.

Breakpoint 1, main () at examples/blinky.rs:24
24      #[entry]
(gdb) bt
#0  main () at examples/blinky.rs:24
(gdb) 

您还可以参考使用 SEGGER J-Link 与 Visual Studio Code 的此指南。参数"device"应设置为"nrf9160"

安全与非安全

此BSP设计为在非安全模式下运行,大多数应用程序代码也应如此。因此,您需要一个在安全模式下启动、将所需的外围设备移动到“非安全”世界,然后跳转到您的应用程序的“引导加载程序”。

我们已经成功使用来自nRF SDK v1.5.1的Nordic的安全分区管理器。SPM v1.5.1配置为在thingy91_nrf9160板上期望您的应用程序在地址0x0004_0000处,因此memory.x必须指定为闪存的起始位置。请注意,SPM的其他版本可能指定不同的起始地址!

$ 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=thingy91_nrf9160
$ west flash

您的nRF9160-DK现在将在0x0000_00000x0003_FFFF之间安装SPM。在0x0004_0000处闪存您的应用程序不应影响SPM,前提是您没有选择“擦除整个芯片”之类的操作!

许可

以下任一许可下使用

任您选择。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可定义,应如上所述双重许可,无任何额外条款或条件。

依赖关系

~7.5MB
~190K SLoC