13 Commits

Author SHA1 Message Date
e30d6d3f22 delay works
Some checks failed
Rust/va108xx-rs/pipeline/pr-main There was a failure building this commit
2024-09-30 11:21:21 +02:00
7603185156 bootloader works
All checks were successful
Rust/va108xx-rs/pipeline/pr-main This commit looks good
2024-09-30 10:58:32 +02:00
2b6c013241 App A does not boot for some reason
All checks were successful
Rust/va108xx-rs/pipeline/pr-main This commit looks good
2024-09-30 10:25:38 +02:00
ee8a481c4f tons of fixes 2024-09-27 20:44:10 +02:00
ea35221d41 clean up 2024-09-27 19:55:16 +02:00
a1a5156caf re-work NVM interface 2024-09-27 19:06:13 +02:00
0f3614465f something is still wrong
All checks were successful
Rust/va108xx-rs/pipeline/pr-main This commit looks good
2024-09-27 16:34:53 +02:00
52f5d42358 all flashloader adaptions
All checks were successful
Rust/va108xx-rs/pipeline/pr-main This commit looks good
2024-09-27 15:33:50 +02:00
1f4d6f601d now needs tests
All checks were successful
Rust/va108xx-rs/pipeline/pr-main This commit looks good
2024-09-27 14:52:45 +02:00
f7ff74940a updated UART echo RTIC example 2024-09-27 10:31:04 +02:00
60305ef393 update UART example, update UART HAL 2024-09-26 22:08:17 +02:00
ce7a8665a3 bootloader addr corrections
All checks were successful
Rust/va108xx-rs/pipeline/pr-main This commit looks good
2024-09-24 10:21:23 +02:00
784a6d7146 bootloader docs
All checks were successful
Rust/va108xx-rs/pipeline/head This commit looks good
Rust/va108xx-rs/pipeline/pr-main This commit looks good
2024-09-20 11:58:41 +02:00
16 changed files with 56 additions and 161 deletions

View File

@ -19,11 +19,6 @@ This workspace contains the following released 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)
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)

View File

@ -14,6 +14,7 @@ embedded-hal-nb = "1"
embedded-io = "0.6"
[dependencies.va108xx-hal]
version = "0.7"
path = "../va108xx-hal"
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.
@ -11,10 +11,10 @@ The bootloader uses the following memory map:
| ------ | ---- | ---- |
| 0x0 | Bootloader start | code up to 0x3FFC bytes |
| 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 |
| 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 |
| 0x1FFFC | App image B CRC check value | word |
| 0x20000 | End of NVM | end |

View File

@ -33,9 +33,10 @@ default-features = false
features = ["critical-section"]
[dependencies.ringbuf]
version = "0.4.7"
version = "0.4"
git = "https://github.com/us-irs/ringbuf.git"
branch = "use-portable-atomic-crate"
default-features = false
features = ["portable-atomic"]
[dependencies.va108xx-hal]
path = "../../va108xx-hal"

View File

@ -125,7 +125,6 @@ fn main() -> ! {
Some(spi_clk_cfg),
Some(SPI_MODE),
BLOCKMODE,
true,
false,
);
spi.cfg_transfer(&transfer_cfg);
@ -139,7 +138,6 @@ fn main() -> ! {
Some(SPI_MODE),
Some(hw_cs_pin),
BLOCKMODE,
true,
false,
);
spi.cfg_transfer(&transfer_cfg);

View File

@ -19,12 +19,15 @@ version = "0.2"
default-features = false
[dependencies.rtt-log]
version = "0.4"
version = "0.3"
git = "https://github.com/us-irs/rtt-log-rs.git"
branch = "allow-usage-on-non-cas-systems"
[dependencies.ringbuf]
version = "0.4.7"
version = "0.4"
git = "https://github.com/us-irs/ringbuf.git"
branch = "use-portable-atomic-crate"
default-features = false
features = ["portable-atomic"]
[dependencies.once_cell]
version = "1"

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
@ -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.
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 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.
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
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
cargo build --release
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

View File

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

View File

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

View File

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

View File

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

View File

@ -301,9 +301,6 @@ pub struct TransferConfig {
/// the BMSTOP bit is set on a dataword. A frame is defined as CSn being active for the
/// duration of multiple data words
pub blockmode: bool,
/// Only used when blockmode is used. The SCK will be stalled until an explicit stop bit
/// is set on a written word.
pub bmstall: bool,
pub hw_cs: HwChipSelectId,
}
@ -312,7 +309,6 @@ impl TransferConfigWithHwcs<NoneT> {
clk_cfg: Option<SpiClkConfig>,
mode: Option<Mode>,
blockmode: bool,
bmstall: bool,
sod: bool,
) -> Self {
TransferConfigWithHwcs {
@ -322,7 +318,6 @@ impl TransferConfigWithHwcs<NoneT> {
mode,
sod,
blockmode,
bmstall,
hw_cs: HwChipSelectId::Invalid,
},
}
@ -335,7 +330,6 @@ impl<HwCs: HwCsProvider> TransferConfigWithHwcs<HwCs> {
mode: Option<Mode>,
hw_cs: Option<HwCs>,
blockmode: bool,
bmstall: bool,
sod: bool,
) -> Self {
TransferConfigWithHwcs {
@ -345,7 +339,6 @@ impl<HwCs: HwCsProvider> TransferConfigWithHwcs<HwCs> {
mode,
sod,
blockmode,
bmstall,
hw_cs: HwCs::CS_ID,
},
}
@ -428,11 +421,6 @@ impl SpiConfig {
self
}
pub fn bmstall(mut self, enable: bool) -> Self {
self.bmstall = enable;
self
}
pub fn mode(mut self, mode: Mode) -> Self {
self.init_mode = mode;
self
@ -756,8 +744,12 @@ where
} else {
w.sod().clear_bit();
}
w.blockmode().bit(transfer_cfg.cfg.blockmode);
w.bmstall().bit(transfer_cfg.cfg.bmstall)
if transfer_cfg.cfg.blockmode {
w.blockmode().set_bit();
} else {
w.blockmode().clear_bit();
}
w
});
}

View File

@ -3,8 +3,7 @@
//! ## Examples
//!
//! - [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)
//! - [Flashloader exposing a CCSDS interface via UART](https://egit.irs.uni-stuttgart.de/rust/va108xx-rs/src/branch/main/flashloader)
//! - [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)
use core::{convert::Infallible, ops::Deref};
use fugit::RateExtU32;
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
/// 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.
#[inline(always)]
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.
///
/// 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
/// 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

View File

@ -21,7 +21,7 @@ bitfield = "0.17"
version = "0.3"
[dependencies.va108xx-hal]
version = ">=0.7, <=0.8"
version = ">=0.7, <0.8"
path = "../va108xx-hal"
features = ["rt"]

View File

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

View File

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