🛠 Développer en Rust embarqué avec nrf52840-mdk-rs
El contexto
El BSP comunitario nrf-rs/nrf52840-mdk-rs (doble licencia MIT/Apache-2.0) proporciona soporte para la placa dentro del ecosistema Rust embebido: reexporta nrf52840-hal y expone los pines del conector doble de 18 pines — el LED RGB y el botón de usuario son pines P0 ordinarios (consulte el esquema de pines de la placa para la asignación exacta). Advertencia del repositorio: el ecosistema embedded-hal evoluciona rápidamente, tome la versión canónica de los ejemplos en examples/ del crate.
Paso 1 — Toolchain
rustup target add thumbv7em-none-eabihf # Cortex-M4F avec FPU
cargo install cargo-binutils # pour produire l'hex via rust-objcopy
Paso 2 — El proyecto blinky
Adaptado de los ejemplos del crate — verifique la API actual en examples/:
//! examples/blinky.rs — nrf52840-mdk-rs
#![no_std]
#![no_main]
use embedded_hal::digital::OutputPin;
use nrf52840_mdk::hal;
use panic_halt as _;
#[cortex_m_rt::entry]
fn main -> ! {
let p = hal::nb::new(
nrf52840_mdk::hal::pac::Peripherals::take.unwrap,
hal::InitialPeripherals::default,
);
// Broche P0 ordinaire de l'en-tête — l'affectation LED vient du pinout
let mut led = p.pins.p0_13.into_push_pull_output(hal::port::typestate::PushPull);
loop {
led.set_high.ok;
cortex_m::asm::nop; // du vrai code utilise un timer
led.set_low.ok;
cortex_m::asm::nop;
}
}
cargo build --release --example blinky --target thumbv7em-none-eabihf
Paso 3 — Flashear: el punto crítico
El README del BSP es explícito: su mantenedor nunca logró hacer funcionar la sonda integrada con OpenOCD proporcionado por Ubuntu 18.04, y trabaja con un J-Link externo. Dos estrategias fiables:
- Sin hardware externo: convierta el ELF a hex y utilice el arrastrar y soltar DAPLink, infalible:
rust-objcopy --output-target=hexfile target/thumbv7em-none-eabihf/release/example-blinky \
blinky.hex
# déposer blinky.hex sur le lecteur DAPLINK, puis bouton Boot/Reset
- Con un J-Link: conecte el conector SWD según la tabla del README (3V3 / RST / SWDIO / SWCLK / TDO / GND) — este es también el cableado utilizado por PlatformIO con
upload_protocol = jlink.
Paso 4 — Depuración
Con el J-Link: probe-rs o cargo embed para carga en caliente, GDB e inspección de los registros del Cortex-M4F. Sin sonda externa, el puerto CDC del DAPLink sigue disponible para el registro serie.
Lo que le aporta el BSP
- PAC + HAL nRF52840 preconfigurados para la placa (pines, características de la placa);
- un punto de entrada
cortex_m_rtlimpio parano_std; - ejemplos de referencia UART/blinky para comenzar con GPIO, temporizadores y serie antes de abordar BLE (que, por su parte, sigue siendo competencia de las pilas C o de los crates dedicados).