#nordic #nrf52 #bluetooth #firmware #applications #soft-device #s132

nightly sys nrf52dk-sys

使用nRF5-SDK和SoftDevice S132的nRF52支持

2个版本

使用旧的Rust 2015

0.1.1 2017年6月12日
0.1.0 2017年6月12日

#16 in #nordic

MIT 许可证

1MB
17K SLoC

C 16K SLoC // 0.3% comments Rust 344 SLoC // 0.1% comments GNU Style Assembly 307 SLoC // 0.1% comments

nRF52dk-sys

这是一个(正在进行中)的Rust crate,用于支持使用Rust的Nordic nRF52开发套件。

此crate使用Nordic SoftDevice S132(一个二进制蓝牙栈),以及Nordic SDK(一个开源的硬件抽象层),这些是用C编写的,并为这些项目提供Rust绑定。

此项目旨在成为如何结合C和Rust组件的参考,以便创建一个使用Rust作为主应用软件的蓝牙外设。

此项目尚未准备好供公众使用。

软件需求

在构建之前,此项目需要以下工具

工具 推荐版本 最小版本 链接/安装
Clang 3.9 ? debian/ubuntu
arm-none-eabi-gcc 6.1 ? 当前版本
Rust (nightly) 1.19.0 ? rustup.rs
Rust 源 1.19.0 ? rustupcomponent add rust-src
Xargo 0.3.8 ? cargo安装 xargo
Bindgen 0.25.3 ? cargo安装 bindgen

有关基于ubuntu/debian系统的更具体设置说明,请参阅 Dockerfile

此外,还需要以下工具来运行或调试固件

工具 推荐版本 链接/安装
SoftDevice S132-v4.0.2 Nordic 下载
JLink v6.16 JLink 下载

构建

git clone --recursive https://github.com/jamesmunns/nrf52dk-sys
cd nrf52dk-sys
xargo build --target thumbv7em-none-eabihf
      Compiling core v0.0.0 (file:///root/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore)
       Finished release [optimized] target(s) in 14.8 secs
       Updating registry `https://github.com/rust-lang/crates.io-index`
    Downloading r0 v0.2.1
    Downloading cortex-m v0.1.6
    Downloading volatile-register v0.1.2
      Compiling volatile-register v0.1.2
      Compiling gcc v0.3.50
      Compiling r0 v0.2.1
      Compiling cortex-m v0.1.6
      Compiling smooth_blue v0.1.0 (file:///nrf52dk-sys)
       Finished dev [unoptimized + debuginfo] target(s) in 15.66 secs

烧录、调试和运行

烧录SoftDevice

首先,您必须烧录Nordic Soft Device。这通常只需要进行一次(其余的固件将不会覆盖此部分)。

cd path/to/softdevice
JLinkExe -device NRF52832_XXAA -if SWD -speed 4000 -autoconnect 1
    Device "NRF52832_XXAA" selected.
    Found SWD-DP with ID 0x2BA01477
    Found SWD-DP with ID 0x2BA01477
    AP-IDR: 0x24770011, Type: AHB-AP
    AHB-AP ROM: 0xE00FF000 (Base addr. of first ROM table)
    Found Cortex-M4 r0p1, Little endian.
    FPUnit: 6 code (BP) slots and 2 literal slots
    CoreSight components:
    ROMTbl 0 @ E00FF000
    ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB00C SCS
    ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 003BB002 DWT
    ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 002BB003 FPB
    ROMTbl 0 [3]: FFF01000, CID: B105E00D, PID: 003BB001 ITM
    ROMTbl 0 [4]: FFF41000, CID: B105900D, PID: 000BB9A1 TPIU
    ROMTbl 0 [5]: FFF42000, CID: B105900D, PID: 000BB925 ETM
    Cortex-M4 identified.
J-Link>loadfile s132_nrf52_4.0.2_softdevice.hex
    Downloading file [s132_nrf52_4.0.2_softdevice.hex]...
    Comparing flash   [100%] Done.
    Verifying flash   [100%] Done.
    O.K.

烧录到设备

这只会烧录上面构建的固件。如果您想烧录和调试,请跳过。

cd nrf52dk-sys
arm-none-eabi-objcopy -O ihex target/thumbv7em-none-eabihf/debug/bin target.hex
JLinkExe -device NRF52832_XXAA -if SWD -speed 4000 -autoconnect 1
J-Link>loadfile target.hex
    Downloading file [target.hex]...
    Comparing flash   [100%] Done.
    Verifying flash   [100%] Done.
    O.K.

关闭JLink后,可能需要使用 CTRL-c 重置设备。

烧录和调试

首先,在一个终端上创建一个GDB服务器

JLinkGDBServer -device NRF52832_XXAA -if SWD -speed 4000
# ...
# Connecting to target...Connected to target
# Waiting for GDB connection...

然后,在另一个终端上

cd nrf52dk-sys
arm-none-eabi-gdb -tui target/thumbv7em-none-eabihf/debug/bin
(gdb) target remote :2331
# ...
(gdb) monitor reset
# ...
(gdb) load
# ...
(gdb) monitor reset
# ...
(gdb) continue
# ...

Docker

我编写了 Dockerfile 以支持CI。这尚未完成。目前,如果您想构建它以验证主分支是否构建成功

cd nrf52dk-sys

# Build the image
docker build -t nrf52dk .

# Run the image
docker run -t nrf52dk

如果docker容器运行成功,您应该会看到以下内容

 Compiling smooth_blue v0.1.0 (file:///nrf52dk-sys)
  Finished dev [unoptimized + debuginfo] target(s) in 15.66 secs

许可证

所有Rust组件均在MIT许可证下提供。Nordic nRF5-sdk提供的附加组件包含附加许可证。

依赖项