2个版本
使用旧的Rust 2015
0.1.1 | 2017年6月12日 |
---|---|
0.1.0 | 2017年6月12日 |
#16 in #nordic
1MB
17K SLoC
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提供的附加组件包含附加许可证。