Compile and flash!
In this section, you'll be able to compile your firmware and flash it to your microcontroller.
Compile the firmware
To compile the firmware is easy, just run
cargo build --release
If you've done all the previous steps correctly, you can find your compiled firmware at target/<your_target>/release
folder, whose name is your project's name or the name set in Cargo.toml
's [[bin]]
section.
The firmware generated by Rust has no extension, which is actually an ELF file.
If you encountered any problems when compiling the firmware, please report it here.
Flash the firmware
The last step is to flash compiled firmware to your microcontroller. RMK supports flashing the firmware via uf2 bootloader or debug probe.
Use uf2 bootloader
By default, Rust firmware is an ELF file, so we have to do some extra steps converting it to uf2 format.
RMK uses cargo-make to automate the uf2 firmware generation.
First, install the cargo-make
tool:
cargo install --force cargo-make
Generating uf2 firmware also requires you have python
command available. Here is a guide for installing python.
Then, you should update the chip family argument(aka argument after -f) in Makefile.toml
in your project. You can get your chip's family ID in scripts/uf2conv.py
.
That's all you need to set. The final step is to run
cargo make uf2 --release
to generate your uf2 firmware.
Tips for nRF52840
For nRF52840, there are several widely used UF2 bootloaders, they require slight different configs.
First, you should check the used softdevice version of your bootloader. Enter bootloader mode, there will be an USB driver shown in your computer. Open INFO_UF2.TXT
in the USB driver, the content of INFO_UF2.TXT
should be like:
UF2 Bootloader 0.6.0 lib/nrfx (v2.0.0) lib/tinyusb (0.10.1-41-gdf0cda2d) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
Model: nice!nano
Board-ID: nRF52840-nicenano
SoftDevice: S140 version 6.1.1
Date: Jun 19 2021
As you can see, the version of softdevice is S140 version 6.1.1
. For nRF52840, RMK supports S140 version 6.X and 7.X. The memory.x
config is slightly different for softdevice 6.X and 7.X:
MEMORY
{
/* These values correspond to the NRF52840 with Softdevices S140 6.1.1 */
/* FLASH : ORIGIN = 0x00026000, LENGTH = 824K */
/* These values correspond to the NRF52840 with Softdevices S140 7.3.0 */
FLASH : ORIGIN = 0x00027000, LENGTH = 820K
RAM : ORIGIN = 0x20020000, LENGTH = 128K
}
You can edit your memory.x
to choose correct value for your bootloader.
Use debug probe
If you have a debug probe like daplink, jlink or stlink(stm32 only), things become much easier: connect it with your board and host, make sure you have installed probe-rs, then just run
cargo run --release
Then the command configured in .cargo/config.toml
will be executed. The firmware will be flashed to your microcontroller and run automatically, yay!
For more configurations of RMK, you can check out feature documentations on the left.