1 Commits

Author SHA1 Message Date
1dec2d28c1 Finished flashloader and bootloader implementation
Some checks are pending
Rust/va108xx-rs/pipeline/pr-main Build started...
2024-09-30 11:25:16 +02:00
15 changed files with 45 additions and 146 deletions

View File

@ -19,11 +19,6 @@ This workspace contains the following released crates:
It also contains the following helper crates: It also contains the following helper crates:
- The [`bootloader`](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/bootloader)
crate contains a sample bootloader strongly based on the one provided by Vorago.
- The [`flashloader`](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/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 [`board-tests`](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/board-tests) - The [`board-tests`](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/board-tests)
contains an application which can be used to test the libraries on the board. contains an application which can be used to test the libraries on the board.
- The [`examples`](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/examples) - The [`examples`](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/examples)

View File

@ -14,6 +14,7 @@ embedded-hal-nb = "1"
embedded-io = "0.6" embedded-io = "0.6"
[dependencies.va108xx-hal] [dependencies.va108xx-hal]
version = "0.7"
path = "../va108xx-hal" path = "../va108xx-hal"
features = ["rt"] features = ["rt"]

View File

@ -1,4 +1,4 @@
VA108xx Bootloader Application VA416xx Bootloader Application
======= =======
This is the Rust version of the bootloader supplied by Vorago. This is the Rust version of the bootloader supplied by Vorago.
@ -11,10 +11,10 @@ The bootloader uses the following memory map:
| ------ | ---- | ---- | | ------ | ---- | ---- |
| 0x0 | Bootloader start | code up to 0x3FFC bytes | | 0x0 | Bootloader start | code up to 0x3FFC bytes |
| 0x2FFE | Bootloader CRC | word | | 0x2FFE | Bootloader CRC | word |
| 0x3000 | App image A start | code up to 0xE7F8 (~58K) bytes | | 0x3000 | App image A start | code up to 0x1DFFC (~120K) bytes |
| 0x117F8 | App image A CRC check length | word | | 0x117F8 | App image A CRC check length | word |
| 0x117FC | App image A CRC check value | word | | 0x117FC | App image A CRC check value | word |
| 0x11800 | App image B start | code up to 0xE7F8 (~58K) bytes | | 0x11800 | App image B start | code up to 0x1DFFC (~120K) bytes |
| 0x1FFF8 | App image B CRC check length | word | | 0x1FFF8 | App image B CRC check length | word |
| 0x1FFFC | App image B CRC check value | word | | 0x1FFFC | App image B CRC check value | word |
| 0x20000 | End of NVM | end | | 0x20000 | End of NVM | end |

View File

@ -38,7 +38,7 @@ default-features = false
features = ["portable-atomic"] features = ["portable-atomic"]
[dependencies.va108xx-hal] [dependencies.va108xx-hal]
version = "0.8" path = "../../va108xx-hal"
[dependencies.vorago-reb1] [dependencies.vorago-reb1]
path = "../../vorago-reb1" path = "../../vorago-reb1"

View File

@ -16,7 +16,7 @@ embedded-io = "0.6"
cortex-m-semihosting = "0.5.0" cortex-m-semihosting = "0.5.0"
[dependencies.va108xx-hal] [dependencies.va108xx-hal]
version = "0.8" path = "../../va108xx-hal"
features = ["rt", "defmt"] features = ["rt", "defmt"]
[dependencies.vorago-reb1] [dependencies.vorago-reb1]

View File

@ -1,4 +1,4 @@
VA108xx Flashloader Application VA416xx Flashloader Application
======== ========
This flashloader shows a minimal example for a self-updatable Rust software which exposes This flashloader shows a minimal example for a self-updatable Rust software which exposes
@ -7,7 +7,7 @@ called the `image-loader.py` which can be used to upload compiled images to the
application to write them to the NVM. application to write them to the NVM.
Please note that the both the application and the image loader are tailored towards usage Please note that the both the application and the image loader are tailored towards usage
with the [bootloader provided by this repository](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/bootloader). with the [bootloader provided by this repository](https://egit.irs.uni-stuttgart.de/rust/va416xx-rs/src/branch/main/bootloader).
The software can quickly be adapted to interface with a real primary on-board software instead of The software can quickly be adapted to interface with a real primary on-board software instead of
the Python script provided here to upload images because it uses a low-level CCSDS based packet the Python script provided here to upload images because it uses a low-level CCSDS based packet
@ -31,7 +31,7 @@ pip install -r requirements.txt
to install all required dependencies. to install all required dependencies.
After that, it is recommended to use `./image-load.py -h` to get an overview of some options. After that, it is recommended to use `./image-load.py -h` to get an overview of some options.
The flash loader uses the UART0 with the Pins PA8 (RX) and PA9 (TX) interface of the VA108xx to perform CCSDS based The flash loader uses the UART0 interface of the VA416xx board to perform CCSDS based
communication. The Python image loader application will search for a file named `loader.toml` and communication. The Python image loader application will search for a file named `loader.toml` and
use the `serial_port` key to determine the serial port to use for serial communication. use the `serial_port` key to determine the serial port to use for serial communication.
@ -51,7 +51,7 @@ You can use
cd flashloader/slot-a-blinky cd flashloader/slot-a-blinky
cargo build --release cargo build --release
cd ../.. cd ../..
./image-loader.py -t a ./slot-a-blinky/target/thumbv6m-none-eabi/release/slot-a-blinky ./image-loader.py -t a ./slot-a-blinky/target/thumbv7em-none-eabihf/release/slot-a-blinky
``` ```
to build the slot A sample application and upload it to a running flash loader application to build the slot A sample application and upload it to a running flash loader application

View File

@ -1,6 +1,6 @@
MEMORY MEMORY
{ {
FLASH : ORIGIN = 0x00003000, LENGTH = 0xE7F8 /* (128k - 12k) / 2 - 8 */ FLASH : ORIGIN = 0x00003000, LENGTH = 0x20000 /* 128K */
RAM : ORIGIN = 0x10000000, LENGTH = 0x08000 /* 32K */ RAM : ORIGIN = 0x10000000, LENGTH = 0x08000 /* 32K */
} }

View File

@ -1,6 +1,6 @@
MEMORY MEMORY
{ {
FLASH : ORIGIN = 0x00011800, LENGTH = 0xE7F8 /* (128k - 12k) / 2 - 8 */ FLASH : ORIGIN = 0x00011800, LENGTH = 0x20000 /* 128K */
RAM : ORIGIN = 0x10000000, LENGTH = 0x08000 /* 32K */ RAM : ORIGIN = 0x10000000, LENGTH = 0x08000 /* 32K */
} }

View File

@ -8,8 +8,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## [unreleased] ## [unreleased]
## [v0.8.0] 2024-09-30
## Changed ## Changed
- Improves `CascardSource` handling and general API when chosing cascade sources. - Improves `CascardSource` handling and general API when chosing cascade sources.

View File

@ -1,6 +1,6 @@
[package] [package]
name = "va108xx-hal" name = "va108xx-hal"
version = "0.8.0" version = "0.7.0"
authors = ["Robin Mueller <muellerr@irs.uni-stuttgart.de>"] authors = ["Robin Mueller <muellerr@irs.uni-stuttgart.de>"]
edition = "2021" edition = "2021"
description = "HAL for the Vorago VA108xx family of microcontrollers" description = "HAL for the Vorago VA108xx family of microcontrollers"

View File

@ -3,8 +3,7 @@
//! ## Examples //! ## Examples
//! //!
//! - [UART simple example](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/examples/simple/examples/uart.rs) //! - [UART simple example](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/examples/simple/examples/uart.rs)
//! - [UART with IRQ and RTIC](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/examples/rtic/src/bin/uart-echo-rtic.rs) //! - [UART with IRQ and RTIC](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/va108xx-update-package/examples/rtic/src/bin/uart-rtic.rs)
//! - [Flashloader exposing a CCSDS interface via UART](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/flashloader)
use core::{convert::Infallible, ops::Deref}; use core::{convert::Infallible, ops::Deref};
use fugit::RateExtU32; use fugit::RateExtU32;
use va108xx::Uarta; use va108xx::Uarta;
@ -864,7 +863,7 @@ impl<Uart: Instance> Tx<Uart> {
/// ///
/// This does not necesarily mean that the FIFO can process another word because it might be /// This does not necesarily mean that the FIFO can process another word because it might be
/// full. /// full.
/// Use the [Self::write_fifo] function to write a word to the FIFO reliably using the [nb] /// Use the [Self::read_fifo] function to write a word to the FIFO reliably using the [nb]
/// API. /// API.
#[inline(always)] #[inline(always)]
pub fn write_fifo_unchecked(&self, data: u32) { pub fn write_fifo_unchecked(&self, data: u32) {
@ -917,7 +916,7 @@ impl<Uart: Instance> embedded_io::Write for Tx<Uart> {
/// Serial receiver, using interrupts to offload reading to the hardware. /// Serial receiver, using interrupts to offload reading to the hardware.
/// ///
/// You can use [Rx::into_rx_with_irq] to convert a normal [Rx] structure into this structure. /// You can use [Rx::to_rx_with_irq] to convert a normal [Rx] structure into this structure.
/// This structure provides two distinct ways to read the UART RX using interrupts. It should /// This structure provides two distinct ways to read the UART RX using interrupts. It should
/// be noted that the interrupt service routine (ISR) still has to be provided by the user. However, /// be noted that the interrupt service routine (ISR) still has to be provided by the user. However,
/// this structure provides API calls which can be used inside the ISRs to simplify the reading /// this structure provides API calls which can be used inside the ISRs to simplify the reading

View File

@ -8,10 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## [unreleased] ## [unreleased]
## [v0.6.0] 2024-09-30
- Added M95M01 EEPROM module/API - Added M95M01 EEPROM module/API
- Update `va108xx-hal` dependency to range >=v0.8, <0.9
## [v0.5.1] 2024-07-04 ## [v0.5.1] 2024-07-04

View File

@ -1,6 +1,6 @@
[package] [package]
name = "vorago-reb1" name = "vorago-reb1"
version = "0.6.0" version = "0.5.1"
authors = ["Robin Mueller <muellerr@irs.uni-stuttgart.de>"] authors = ["Robin Mueller <muellerr@irs.uni-stuttgart.de>"]
edition = "2021" edition = "2021"
description = "Board Support Crate for the Vorago REB1 development board" description = "Board Support Crate for the Vorago REB1 development board"
@ -21,7 +21,8 @@ bitfield = "0.17"
version = "0.3" version = "0.3"
[dependencies.va108xx-hal] [dependencies.va108xx-hal]
version = ">=0.8, <0.9" version = ">=0.7, <0.8"
path = "../va108xx-hal"
features = ["rt"] features = ["rt"]
[features] [features]

View File

@ -327,7 +327,7 @@
"device": "Cortex-M0", "device": "Cortex-M0",
"svdFile": "./va108xx/svd/va108xx.svd.patched", "svdFile": "./va108xx/svd/va108xx.svd.patched",
"preLaunchTask": "blinky-hal", "preLaunchTask": "blinky-hal",
"executable": "${workspaceFolder}/target/thumbv6m-none-eabi/debug/examples/blinky", "executable": "${workspaceFolder}/target/thumbv6m-none-eabi/debug/examples/adxl343-accelerometer",
"interface": "jtag", "interface": "jtag",
"runToEntryPoint": "main", "runToEntryPoint": "main",
}, },
@ -460,7 +460,7 @@
"device": "Cortex-M0", "device": "Cortex-M0",
"svdFile": "./va108xx/svd/va108xx.svd.patched", "svdFile": "./va108xx/svd/va108xx.svd.patched",
"preLaunchTask": "bootloader", "preLaunchTask": "bootloader",
"executable": "${workspaceFolder}/target/thumbv6m-none-eabi/release/bootloader", "executable": "${workspaceFolder}/target/thumbv6m-none-eabi/debug/bootloader",
"interface": "jtag", "interface": "jtag",
"runToEntryPoint": "main", "runToEntryPoint": "main",
"rttConfig": { "rttConfig": {
@ -484,7 +484,7 @@
"device": "Cortex-M0", "device": "Cortex-M0",
"svdFile": "./va108xx/svd/va108xx.svd.patched", "svdFile": "./va108xx/svd/va108xx.svd.patched",
"preLaunchTask": "flashloader", "preLaunchTask": "flashloader",
"executable": "${workspaceFolder}/target/thumbv6m-none-eabi/release/flashloader", "executable": "${workspaceFolder}/target/thumbv6m-none-eabi/debug/flashloader",
"interface": "jtag", "interface": "jtag",
"runToEntryPoint": "main", "runToEntryPoint": "main",
"rttConfig": { "rttConfig": {
@ -500,4 +500,4 @@
} }
}, },
] ]
} }

View File

@ -7,9 +7,7 @@
"label": "rust: cargo build", "label": "rust: cargo build",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build"],
"build"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -19,13 +17,7 @@
"label": "rust: cargo build hal tests", "label": "rust: cargo build hal tests",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--bin", "board-tests", "--features", "rt"],
"build",
"--bin",
"board-tests",
"--features",
"rt"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -35,11 +27,7 @@
"label": "rust: cargo build rtt", "label": "rust: cargo build rtt",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "rtt-log"],
"build",
"--example",
"rtt-log"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -49,13 +37,7 @@
"label": "rust: cargo build systick", "label": "rust: cargo build systick",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "timer-ticks", "--features", "rt"],
"build",
"--example",
"timer-ticks",
"--features",
"rt"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -65,11 +47,7 @@
"label": "rust: cargo build uart", "label": "rust: cargo build uart",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "uart"],
"build",
"--example",
"uart"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -79,11 +57,7 @@
"label": "rust: cargo build spi", "label": "rust: cargo build spi",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "spi"],
"build",
"--example",
"spi"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -93,13 +67,7 @@
"label": "rust: cargo build pwm", "label": "rust: cargo build pwm",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "pwm", "--features", "rt"],
"build",
"--example",
"pwm",
"--features",
"rt"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -109,13 +77,7 @@
"label": "rust: cargo build cascade", "label": "rust: cargo build cascade",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "cascade", "--features", "rt"],
"build",
"--example",
"cascade",
"--features",
"rt"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -125,11 +87,7 @@
"label": "uart-echo-rtic-example", "label": "uart-echo-rtic-example",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--bin", "uart-echo-rtic"],
"build",
"--bin",
"uart-echo-rtic"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -139,11 +97,7 @@
"label": "blinky-hal", "label": "blinky-hal",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "blinky"],
"build",
"--example",
"blinky"
],
"group": { "group": {
"kind": "build" "kind": "build"
} }
@ -152,11 +106,7 @@
"label": "rust: cargo build led blinky", "label": "rust: cargo build led blinky",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "blinky-leds"],
"build",
"--example",
"blinky-leds"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -166,11 +116,7 @@
"label": "rust: cargo build button blinky", "label": "rust: cargo build button blinky",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "blinky-button-irq"],
"build",
"--example",
"blinky-button-irq"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -180,11 +126,7 @@
"label": "rust: cargo build temp sensor", "label": "rust: cargo build temp sensor",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "adt75-temp-sensor"],
"build",
"--example",
"adt75-temp-sensor"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -194,11 +136,7 @@
"label": "rust: cargo build button blinky rtic", "label": "rust: cargo build button blinky rtic",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "blinky-button-rtic"],
"build",
"--example",
"blinky-button-rtic"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -208,11 +146,7 @@
"label": "rust: cargo build accelerometer", "label": "rust: cargo build accelerometer",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "adxl343-accelerometer"],
"build",
"--example",
"adxl343-accelerometer"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -222,11 +156,7 @@
"label": "rust: cargo build adc", "label": "rust: cargo build adc",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "max11619-adc"],
"build",
"--example",
"max11619-adc"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -236,11 +166,7 @@
"label": "reb1-nvm", "label": "reb1-nvm",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--example", "nvm"],
"build",
"--example",
"nvm"
],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
@ -250,43 +176,25 @@
"label": "rtic-example", "label": "rtic-example",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--bin", "rtic-example"]
"build",
"--bin",
"rtic-example"
]
}, },
{ {
"label": "embassy-example", "label": "embassy-example",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--bin", "embassy-example"]
"build",
"--bin",
"embassy-example"
]
}, },
{ {
"label": "bootloader", "label": "bootloader",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--bin", "bootloader"]
"build",
"--bin",
"bootloader",
"--release",
]
}, },
{ {
"label": "flashloader", "label": "flashloader",
"type": "shell", "type": "shell",
"command": "~/.cargo/bin/cargo", // note: full path to the cargo "command": "~/.cargo/bin/cargo", // note: full path to the cargo
"args": [ "args": ["build", "--bin", "flashloader"]
"build",
"--bin",
"flashloader",
"--release"
]
} }
] ]
} }