Rust support for the VA416xx family of MCUs
Go to file
Robin Mueller 5b336a2b41
All checks were successful
Rust/va416xx-rs/pipeline/head This commit looks good
Rust/va416xx-rs/pipeline/pr-main This commit looks good
calculate most bootloader properties
2024-09-20 12:12:21 +02:00
.cargo Bootloader and Flashloader App 2024-09-12 19:41:54 +02:00
.github/workflows Add embassy example 2024-09-17 21:30:57 +02:00
automation Add embassy example 2024-09-17 21:30:57 +02:00
bootloader calculate most bootloader properties 2024-09-20 12:12:21 +02:00
examples Updates and fixes 2024-09-20 11:41:24 +02:00
flashloader calculate most bootloader properties 2024-09-20 12:12:21 +02:00
jlink remove reset in jlink.gdb script, add Embed.toml 2024-06-30 18:17:00 +02:00
scripts Bootloader and Flashloader App 2024-09-12 19:41:54 +02:00
va416xx prepare HAL release 2024-07-01 14:54:47 +02:00
va416xx-hal Updates and fixes 2024-09-20 11:41:24 +02:00
vorago-peb1 Device specific support and UART Improvements 2024-07-18 21:32:36 -07:00
vscode Add embassy example 2024-09-17 21:30:57 +02:00
.gitignore Bootloader and Flashloader App 2024-09-12 19:41:54 +02:00
.gitmodules Init Commit 2024-06-25 20:01:21 +02:00
Cargo.toml Updates and fixes 2024-09-20 11:41:24 +02:00
Embed.toml remove reset in jlink.gdb script, add Embed.toml 2024-06-30 18:17:00 +02:00
jlink-gdb.sh Init Commit 2024-06-25 20:01:21 +02:00
LICENSE-APACHE Init Commit 2024-06-25 20:01:21 +02:00
memory.x Init Commit 2024-06-25 20:01:21 +02:00
NOTICE Init Commit 2024-06-25 20:01:21 +02:00
README.md Updates and fixes 2024-09-20 11:41:24 +02:00

build

Vorago VA416xx Rust Support

This crate collection provides support to write Rust applications for the VA416XX family of devices.

List of crates

This workspace contains the following crates:

  • The va416xx PAC crate containing basic low-level register definition
  • The va416xx-hal HAL crate containing higher-level abstractions on top of the PAC register crate.
  • The vorago-peb1 BSP crate containing support for the PEB1 development board.

It also contains the following helper crates:

  • The bootloader crate contains a sample bootloader strongly based on the one provided by Vorago.
  • The flashloader crate contains a sample flashloader which is able to update the redundant images in the NVM which is compatible to the provided bootloader as well.
  • The examples folder contains various example applications crates using the HAL and the PAC. This folder also contains dedicated example applications using the RTIC and embassy native Rust RTOSes.

Using the .cargo/config.toml file

Use the following command to have a starting config.toml file

cp .cargo/def-config.toml .cargo/config.toml

You then can adapt the config.toml to your needs. For example, you can configure runners to conveniently flash with cargo run.

Using the sample VS Code files

Use the following command to have a starting configuration for VS Code:

cp -rT vscode .vscode

You can then adapt the files in .vscode to your needs.

Flashing, running and debugging the software

You can use CLI or VS Code for flashing, running and debugging. In any case, take care of installing the pre-requisites first.

Pre-Requisites

  1. SEGGER J-Link tools installed
  2. gdb-multiarch or similar cross-architecture debugger installed. All commands here assume gdb-multiarch.

Using CLI

You can build the blinky example application with the following command

cargo build --example blinky

Start the GDB server first. The server needs to be started with a certain configuration and with a JLink script to disable ROM protection. For example, on Debian based system the following command can be used to do this (this command is also run when running the jlink-gdb.sh script)

JLinkGDBServer -select USB -device Cortex-M4 -endian little -if SWD -speed 2000 \
  -LocalhostOnly -vd -jlinkscriptfile ./jlink/JLinkSettings.JLinkScript

After this, you can flash and debug the application with the following command

gdb-mutliarch -q -x jlink/jlink.gdb target/thumbv7em-none-eabihf/debug/examples/blinky

Please note that you can automate all steps except starting the GDB server by using a cargo runner configuration, for example with the following lines in your .cargo/config.toml file:

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
runner = "gdb-multiarch -q -x jlink/jlink.gdb"

After that, you can simply use cargo run --example blinky to flash the blinky example.

Using VS Code

Assuming a working debug connection to your VA416xx board, you can debug using VS Code with the Cortex-Debug plugin. Please make sure that objdump-multiarch and nm-multiarch are installed as well.

Some sample configuration files for VS code were provided and can be used by running cp -rT vscode .vscode like specified above. After that, you can use Run and Debug to automatically rebuild and flash your application.

If you would like to use a custom GDB application, you can specify the gdb binary in the following configuration variables in your settings.json:

  • "cortex-debug.gdbPath"
  • "cortex-debug.gdbPath.linux"
  • "cortex-debug.gdbPath.windows"
  • "cortex-debug.gdbPath.osx"

The provided VS Code configurations also provide an integrated RTT logger, which you can access via the terminal at RTT Ch:0 console. In order for the RTT block address detection to work properly, objdump-multiarch and nm-multiarch need to be installed.