aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2023-04-20 09:19:54 +0000
committerGitHub <[email protected]>2023-04-20 09:19:54 +0000
commitfb27594b2eb2cca2aea25dd92a7b730c185b6ecc (patch)
treec39b55c66f8c9f65e17aabb2f70b964e9dcb9e0a
parent9b51c8f4d441a3e1550305c126e9f74fff030fd5 (diff)
parenta73f9474a0dc4af1ebfb22d7960e6c4b3aca81bd (diff)
Merge #1383
1383: embassy-boot: Add nightly flag r=Dirbaio a=sawi97 This adds "nightly" as a flag to embassy-boot and embassy-boot-nrf which gates features requiring nightly, enabled by default. Makes it possible to build the bootloader with the stable compiler when setting `default-features=false`. It should be straight forward to do this for stm32 and rp as well, but I am not been able to test it. Co-authored-by: sander <[email protected]> Co-authored-by: sawi97 <[email protected]>
-rw-r--r--.github/workflows/rust.yml2
-rwxr-xr-xci.sh8
-rwxr-xr-xci_stable.sh4
-rw-r--r--embassy-boot/boot/Cargo.toml4
-rw-r--r--embassy-boot/boot/README.md2
-rw-r--r--embassy-boot/boot/src/firmware_updater.rs12
-rw-r--r--embassy-boot/boot/src/lib.rs10
-rw-r--r--embassy-boot/boot/src/mem_flash.rs3
-rw-r--r--embassy-boot/boot/src/partition.rs5
-rw-r--r--embassy-boot/nrf/Cargo.toml9
-rw-r--r--embassy-boot/nrf/README.md2
-rw-r--r--embassy-boot/nrf/src/lib.rs1
-rw-r--r--embassy-boot/rp/Cargo.toml12
-rw-r--r--embassy-boot/rp/README.md2
-rw-r--r--embassy-boot/rp/src/lib.rs1
-rw-r--r--embassy-boot/stm32/Cargo.toml9
-rw-r--r--embassy-boot/stm32/README.md2
-rw-r--r--embassy-boot/stm32/src/lib.rs1
-rw-r--r--examples/boot/application/nrf/Cargo.toml4
-rw-r--r--examples/boot/application/rp/Cargo.toml2
-rw-r--r--examples/boot/application/stm32f3/Cargo.toml2
-rw-r--r--examples/boot/application/stm32f7/Cargo.toml2
-rw-r--r--examples/boot/application/stm32h7/Cargo.toml2
-rw-r--r--examples/boot/application/stm32l0/Cargo.toml2
-rw-r--r--examples/boot/application/stm32l1/Cargo.toml2
-rw-r--r--examples/boot/application/stm32l4/Cargo.toml2
-rw-r--r--examples/boot/application/stm32wl/Cargo.toml2
27 files changed, 72 insertions, 37 deletions
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 3bfe5ef03..79354fe70 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -71,7 +71,7 @@ jobs:
71 71
72 - name: Test boot 72 - name: Test boot
73 working-directory: ./embassy-boot/boot 73 working-directory: ./embassy-boot/boot
74 run: cargo test && cargo test --features "ed25519-dalek" && cargo test --features "ed25519-salty" 74 run: cargo test && cargo test --features nightly && cargo test --features "ed25519-dalek,nightly" && cargo test --features "ed25519-salty,nightly"
75 75
76 - name: Test sync 76 - name: Test sync
77 working-directory: ./embassy-sync 77 working-directory: ./embassy-sync
diff --git a/ci.sh b/ci.sh
index 657975041..4b7d73711 100755
--- a/ci.sh
+++ b/ci.sh
@@ -69,10 +69,10 @@ cargo batch \
69 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f100c4,defmt,exti,time-driver-any,unstable-traits \ 69 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32f100c4,defmt,exti,time-driver-any,unstable-traits \
70 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32h503rb,defmt,exti,time-driver-any,unstable-traits \ 70 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32h503rb,defmt,exti,time-driver-any,unstable-traits \
71 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32h562ag,defmt,exti,time-driver-any,unstable-traits \ 71 --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv7m-none-eabi --features nightly,stm32h562ag,defmt,exti,time-driver-any,unstable-traits \
72 --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv7em-none-eabi --features embassy-nrf/nrf52840 \ 72 --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv7em-none-eabi --features embassy-nrf/nrf52840,nightly \
73 --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features embassy-nrf/nrf9160-ns \ 73 --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features embassy-nrf/nrf9160-ns,nightly \
74 --- build --release --manifest-path embassy-boot/rp/Cargo.toml --target thumbv6m-none-eabi \ 74 --- build --release --manifest-path embassy-boot/rp/Cargo.toml --target thumbv6m-none-eabi --features nightly \
75 --- build --release --manifest-path embassy-boot/stm32/Cargo.toml --target thumbv7em-none-eabi --features embassy-stm32/stm32wl55jc-cm4 \ 75 --- build --release --manifest-path embassy-boot/stm32/Cargo.toml --target thumbv7em-none-eabi --features embassy-stm32/stm32wl55jc-cm4,nightly \
76 --- build --release --manifest-path docs/modules/ROOT/examples/basic/Cargo.toml --target thumbv7em-none-eabi \ 76 --- build --release --manifest-path docs/modules/ROOT/examples/basic/Cargo.toml --target thumbv7em-none-eabi \
77 --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml --target thumbv7em-none-eabi \ 77 --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml --target thumbv7em-none-eabi \
78 --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-hal/Cargo.toml --target thumbv7em-none-eabi \ 78 --- build --release --manifest-path docs/modules/ROOT/examples/layer-by-layer/blinky-hal/Cargo.toml --target thumbv7em-none-eabi \
diff --git a/ci_stable.sh b/ci_stable.sh
index 18271ee73..55a2f89a0 100755
--- a/ci_stable.sh
+++ b/ci_stable.sh
@@ -9,6 +9,10 @@ export DEFMT_LOG=trace
9sed -i 's/channel.*/channel = "stable"/g' rust-toolchain.toml 9sed -i 's/channel.*/channel = "stable"/g' rust-toolchain.toml
10 10
11cargo batch \ 11cargo batch \
12 --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv7em-none-eabi --features embassy-nrf/nrf52840 \
13 --- build --release --manifest-path embassy-boot/nrf/Cargo.toml --target thumbv8m.main-none-eabihf --features embassy-nrf/nrf9160-ns \
14 --- build --release --manifest-path embassy-boot/rp/Cargo.toml --target thumbv6m-none-eabi \
15 --- build --release --manifest-path embassy-boot/stm32/Cargo.toml --target thumbv7em-none-eabi --features embassy-stm32/stm32wl55jc-cm4 \
12 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi \ 16 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi \
13 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features log \ 17 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features log \
14 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features defmt \ 18 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features defmt \
diff --git a/embassy-boot/boot/Cargo.toml b/embassy-boot/boot/Cargo.toml
index d44aee349..f641d5e1c 100644
--- a/embassy-boot/boot/Cargo.toml
+++ b/embassy-boot/boot/Cargo.toml
@@ -29,7 +29,7 @@ log = { version = "0.4", optional = true }
29ed25519-dalek = { version = "1.0.1", default_features = false, features = ["u32_backend"], optional = true } 29ed25519-dalek = { version = "1.0.1", default_features = false, features = ["u32_backend"], optional = true }
30embassy-sync = { version = "0.2.0", path = "../../embassy-sync" } 30embassy-sync = { version = "0.2.0", path = "../../embassy-sync" }
31embedded-storage = "0.3.0" 31embedded-storage = "0.3.0"
32embedded-storage-async = "0.4.0" 32embedded-storage-async = { version = "0.4.0", optional = true}
33salty = { git = "https://github.com/ycrypto/salty.git", rev = "a9f17911a5024698406b75c0fac56ab5ccf6a8c7", optional = true } 33salty = { git = "https://github.com/ycrypto/salty.git", rev = "a9f17911a5024698406b75c0fac56ab5ccf6a8c7", optional = true }
34signature = { version = "1.6.4", default-features = false } 34signature = { version = "1.6.4", default-features = false }
35 35
@@ -48,5 +48,7 @@ features = ["rand", "std", "u32_backend"]
48ed25519-dalek = ["dep:ed25519-dalek", "_verify"] 48ed25519-dalek = ["dep:ed25519-dalek", "_verify"]
49ed25519-salty = ["dep:salty", "_verify"] 49ed25519-salty = ["dep:salty", "_verify"]
50 50
51nightly = ["dep:embedded-storage-async"]
52
51#Internal features 53#Internal features
52_verify = [] 54_verify = []
diff --git a/embassy-boot/boot/README.md b/embassy-boot/boot/README.md
index 56f4a6279..07755bc6c 100644
--- a/embassy-boot/boot/README.md
+++ b/embassy-boot/boot/README.md
@@ -18,7 +18,7 @@ The bootloader supports different hardware in separate crates:
18 18
19## Minimum supported Rust version (MSRV) 19## Minimum supported Rust version (MSRV)
20 20
21`embassy-boot` requires Rust nightly to compile as it relies on async traits for interacting with the flash peripherals. 21`embassy-boot` is guaranteed to compile on the latest stable Rust version at the time of release. It might compile with older versions but that may change in any new patch release.
22 22
23## License 23## License
24 24
diff --git a/embassy-boot/boot/src/firmware_updater.rs b/embassy-boot/boot/src/firmware_updater.rs
index a2f822f4a..92987825f 100644
--- a/embassy-boot/boot/src/firmware_updater.rs
+++ b/embassy-boot/boot/src/firmware_updater.rs
@@ -1,5 +1,6 @@
1use digest::Digest; 1use digest::Digest;
2use embedded_storage::nor_flash::{NorFlash, NorFlashError, NorFlashErrorKind}; 2use embedded_storage::nor_flash::{NorFlash, NorFlashError, NorFlashErrorKind};
3#[cfg(feature = "nightly")]
3use embedded_storage_async::nor_flash::NorFlash as AsyncNorFlash; 4use embedded_storage_async::nor_flash::NorFlash as AsyncNorFlash;
4 5
5use crate::{Partition, State, BOOT_MAGIC, SWAP_MAGIC}; 6use crate::{Partition, State, BOOT_MAGIC, SWAP_MAGIC};
@@ -78,6 +79,7 @@ impl FirmwareUpdater {
78 /// This is useful to check if the bootloader has just done a swap, in order 79 /// This is useful to check if the bootloader has just done a swap, in order
79 /// to do verifications and self-tests of the new image before calling 80 /// to do verifications and self-tests of the new image before calling
80 /// `mark_booted`. 81 /// `mark_booted`.
82 #[cfg(feature = "nightly")]
81 pub async fn get_state<F: AsyncNorFlash>( 83 pub async fn get_state<F: AsyncNorFlash>(
82 &mut self, 84 &mut self,
83 state_flash: &mut F, 85 state_flash: &mut F,
@@ -108,7 +110,7 @@ impl FirmwareUpdater {
108 /// 110 ///
109 /// The `_aligned` buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being read from 111 /// The `_aligned` buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being read from
110 /// and written to. 112 /// and written to.
111 #[cfg(feature = "_verify")] 113 #[cfg(all(feature = "_verify", feature = "nightly"))]
112 pub async fn verify_and_mark_updated<F: AsyncNorFlash>( 114 pub async fn verify_and_mark_updated<F: AsyncNorFlash>(
113 &mut self, 115 &mut self,
114 _state_and_dfu_flash: &mut F, 116 _state_and_dfu_flash: &mut F,
@@ -172,6 +174,7 @@ impl FirmwareUpdater {
172 } 174 }
173 175
174 /// Verify the update in DFU with any digest. 176 /// Verify the update in DFU with any digest.
177 #[cfg(feature = "nightly")]
175 pub async fn hash<F: AsyncNorFlash, D: Digest>( 178 pub async fn hash<F: AsyncNorFlash, D: Digest>(
176 &mut self, 179 &mut self,
177 dfu_flash: &mut F, 180 dfu_flash: &mut F,
@@ -194,7 +197,7 @@ impl FirmwareUpdater {
194 /// # Safety 197 /// # Safety
195 /// 198 ///
196 /// The `aligned` buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to. 199 /// The `aligned` buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to.
197 #[cfg(not(feature = "_verify"))] 200 #[cfg(all(feature = "nightly", not(feature = "_verify")))]
198 pub async fn mark_updated<F: AsyncNorFlash>( 201 pub async fn mark_updated<F: AsyncNorFlash>(
199 &mut self, 202 &mut self,
200 state_flash: &mut F, 203 state_flash: &mut F,
@@ -209,6 +212,7 @@ impl FirmwareUpdater {
209 /// # Safety 212 /// # Safety
210 /// 213 ///
211 /// The `aligned` buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to. 214 /// The `aligned` buffer must have a size of F::WRITE_SIZE, and follow the alignment rules for the flash being written to.
215 #[cfg(feature = "nightly")]
212 pub async fn mark_booted<F: AsyncNorFlash>( 216 pub async fn mark_booted<F: AsyncNorFlash>(
213 &mut self, 217 &mut self,
214 state_flash: &mut F, 218 state_flash: &mut F,
@@ -218,6 +222,7 @@ impl FirmwareUpdater {
218 self.set_magic(aligned, BOOT_MAGIC, state_flash).await 222 self.set_magic(aligned, BOOT_MAGIC, state_flash).await
219 } 223 }
220 224
225 #[cfg(feature = "nightly")]
221 async fn set_magic<F: AsyncNorFlash>( 226 async fn set_magic<F: AsyncNorFlash>(
222 &mut self, 227 &mut self,
223 aligned: &mut [u8], 228 aligned: &mut [u8],
@@ -258,6 +263,7 @@ impl FirmwareUpdater {
258 /// # Safety 263 /// # Safety
259 /// 264 ///
260 /// Failing to meet alignment and size requirements may result in a panic. 265 /// Failing to meet alignment and size requirements may result in a panic.
266 #[cfg(feature = "nightly")]
261 pub async fn write_firmware<F: AsyncNorFlash>( 267 pub async fn write_firmware<F: AsyncNorFlash>(
262 &mut self, 268 &mut self,
263 offset: usize, 269 offset: usize,
@@ -280,6 +286,7 @@ impl FirmwareUpdater {
280 /// 286 ///
281 /// Using this instead of `write_firmware` allows for an optimized API in 287 /// Using this instead of `write_firmware` allows for an optimized API in
282 /// exchange for added complexity. 288 /// exchange for added complexity.
289 #[cfg(feature = "nightly")]
283 pub async fn prepare_update<F: AsyncNorFlash>( 290 pub async fn prepare_update<F: AsyncNorFlash>(
284 &mut self, 291 &mut self,
285 dfu_flash: &mut F, 292 dfu_flash: &mut F,
@@ -513,6 +520,7 @@ mod tests {
513 use crate::mem_flash::MemFlash; 520 use crate::mem_flash::MemFlash;
514 521
515 #[test] 522 #[test]
523 #[cfg(feature = "nightly")]
516 fn can_verify_sha1() { 524 fn can_verify_sha1() {
517 const STATE: Partition = Partition::new(0, 4096); 525 const STATE: Partition = Partition::new(0, 4096);
518 const DFU: Partition = Partition::new(65536, 131072); 526 const DFU: Partition = Partition::new(65536, 131072);
diff --git a/embassy-boot/boot/src/lib.rs b/embassy-boot/boot/src/lib.rs
index 87457b173..8eb3ba96d 100644
--- a/embassy-boot/boot/src/lib.rs
+++ b/embassy-boot/boot/src/lib.rs
@@ -1,4 +1,4 @@
1#![feature(async_fn_in_trait)] 1#![cfg_attr(feature = "nightly", feature(async_fn_in_trait))]
2#![allow(incomplete_features)] 2#![allow(incomplete_features)]
3#![no_std] 3#![no_std]
4#![warn(missing_docs)] 4#![warn(missing_docs)]
@@ -83,7 +83,7 @@ mod tests {
83 } 83 }
84 84
85 #[test] 85 #[test]
86 #[cfg(not(feature = "_verify"))] 86 #[cfg(all(feature = "nightly", not(feature = "_verify")))]
87 fn test_swap_state() { 87 fn test_swap_state() {
88 const STATE: Partition = Partition::new(0, 4096); 88 const STATE: Partition = Partition::new(0, 4096);
89 const ACTIVE: Partition = Partition::new(4096, 61440); 89 const ACTIVE: Partition = Partition::new(4096, 61440);
@@ -136,7 +136,7 @@ mod tests {
136 } 136 }
137 137
138 #[test] 138 #[test]
139 #[cfg(not(feature = "_verify"))] 139 #[cfg(all(feature = "nightly", not(feature = "_verify")))]
140 fn test_separate_flash_active_page_biggest() { 140 fn test_separate_flash_active_page_biggest() {
141 const STATE: Partition = Partition::new(2048, 4096); 141 const STATE: Partition = Partition::new(2048, 4096);
142 const ACTIVE: Partition = Partition::new(4096, 16384); 142 const ACTIVE: Partition = Partition::new(4096, 16384);
@@ -173,7 +173,7 @@ mod tests {
173 } 173 }
174 174
175 #[test] 175 #[test]
176 #[cfg(not(feature = "_verify"))] 176 #[cfg(all(feature = "nightly", not(feature = "_verify")))]
177 fn test_separate_flash_dfu_page_biggest() { 177 fn test_separate_flash_dfu_page_biggest() {
178 const STATE: Partition = Partition::new(2048, 4096); 178 const STATE: Partition = Partition::new(2048, 4096);
179 const ACTIVE: Partition = Partition::new(4096, 16384); 179 const ACTIVE: Partition = Partition::new(4096, 16384);
@@ -212,7 +212,7 @@ mod tests {
212 } 212 }
213 213
214 #[test] 214 #[test]
215 #[cfg(feature = "_verify")] 215 #[cfg(all(feature = "nightly", feature = "_verify"))]
216 fn test_verify() { 216 fn test_verify() {
217 // The following key setup is based on: 217 // The following key setup is based on:
218 // https://docs.rs/ed25519-dalek/latest/ed25519_dalek/#example 218 // https://docs.rs/ed25519-dalek/latest/ed25519_dalek/#example
diff --git a/embassy-boot/boot/src/mem_flash.rs b/embassy-boot/boot/src/mem_flash.rs
index c62379b24..3ba84a92c 100644
--- a/embassy-boot/boot/src/mem_flash.rs
+++ b/embassy-boot/boot/src/mem_flash.rs
@@ -3,6 +3,7 @@
3use core::ops::{Bound, Range, RangeBounds}; 3use core::ops::{Bound, Range, RangeBounds};
4 4
5use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, NorFlashErrorKind, ReadNorFlash}; 5use embedded_storage::nor_flash::{ErrorType, NorFlash, NorFlashError, NorFlashErrorKind, ReadNorFlash};
6#[cfg(feature = "nightly")]
6use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash}; 7use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
7 8
8pub struct MemFlash<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> { 9pub struct MemFlash<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> {
@@ -134,6 +135,7 @@ impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> NorFla
134 } 135 }
135} 136}
136 137
138#[cfg(feature = "nightly")]
137impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncReadNorFlash 139impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncReadNorFlash
138 for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE> 140 for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
139{ 141{
@@ -148,6 +150,7 @@ impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncR
148 } 150 }
149} 151}
150 152
153#[cfg(feature = "nightly")]
151impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncNorFlash 154impl<const SIZE: usize, const ERASE_SIZE: usize, const WRITE_SIZE: usize> AsyncNorFlash
152 for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE> 155 for MemFlash<SIZE, ERASE_SIZE, WRITE_SIZE>
153{ 156{
diff --git a/embassy-boot/boot/src/partition.rs b/embassy-boot/boot/src/partition.rs
index 7529059b6..7b56a8240 100644
--- a/embassy-boot/boot/src/partition.rs
+++ b/embassy-boot/boot/src/partition.rs
@@ -1,4 +1,5 @@
1use embedded_storage::nor_flash::{NorFlash, ReadNorFlash}; 1use embedded_storage::nor_flash::{NorFlash, ReadNorFlash};
2#[cfg(feature = "nightly")]
2use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash}; 3use embedded_storage_async::nor_flash::{NorFlash as AsyncNorFlash, ReadNorFlash as AsyncReadNorFlash};
3 4
4/// A region in flash used by the bootloader. 5/// A region in flash used by the bootloader.
@@ -23,6 +24,7 @@ impl Partition {
23 } 24 }
24 25
25 /// Read from the partition on the provided flash 26 /// Read from the partition on the provided flash
27 #[cfg(feature = "nightly")]
26 pub async fn read<F: AsyncReadNorFlash>( 28 pub async fn read<F: AsyncReadNorFlash>(
27 &self, 29 &self,
28 flash: &mut F, 30 flash: &mut F,
@@ -34,6 +36,7 @@ impl Partition {
34 } 36 }
35 37
36 /// Write to the partition on the provided flash 38 /// Write to the partition on the provided flash
39 #[cfg(feature = "nightly")]
37 pub async fn write<F: AsyncNorFlash>(&self, flash: &mut F, offset: u32, bytes: &[u8]) -> Result<(), F::Error> { 40 pub async fn write<F: AsyncNorFlash>(&self, flash: &mut F, offset: u32, bytes: &[u8]) -> Result<(), F::Error> {
38 let offset = self.from as u32 + offset; 41 let offset = self.from as u32 + offset;
39 flash.write(offset, bytes).await?; 42 flash.write(offset, bytes).await?;
@@ -42,6 +45,7 @@ impl Partition {
42 } 45 }
43 46
44 /// Erase part of the partition on the provided flash 47 /// Erase part of the partition on the provided flash
48 #[cfg(feature = "nightly")]
45 pub async fn erase<F: AsyncNorFlash>(&self, flash: &mut F, from: u32, to: u32) -> Result<(), F::Error> { 49 pub async fn erase<F: AsyncNorFlash>(&self, flash: &mut F, from: u32, to: u32) -> Result<(), F::Error> {
46 let from = self.from as u32 + from; 50 let from = self.from as u32 + from;
47 let to = self.from as u32 + to; 51 let to = self.from as u32 + to;
@@ -51,6 +55,7 @@ impl Partition {
51 } 55 }
52 56
53 /// Erase the entire partition 57 /// Erase the entire partition
58 #[cfg(feature = "nightly")]
54 pub(crate) async fn wipe<F: AsyncNorFlash>(&self, flash: &mut F) -> Result<(), F::Error> { 59 pub(crate) async fn wipe<F: AsyncNorFlash>(&self, flash: &mut F) -> Result<(), F::Error> {
55 let from = self.from as u32; 60 let from = self.from as u32;
56 let to = self.to as u32; 61 let to = self.to as u32;
diff --git a/embassy-boot/nrf/Cargo.toml b/embassy-boot/nrf/Cargo.toml
index c1a127518..e46736889 100644
--- a/embassy-boot/nrf/Cargo.toml
+++ b/embassy-boot/nrf/Cargo.toml
@@ -17,12 +17,12 @@ target = "thumbv7em-none-eabi"
17defmt = { version = "0.3", optional = true } 17defmt = { version = "0.3", optional = true }
18 18
19embassy-sync = { path = "../../embassy-sync" } 19embassy-sync = { path = "../../embassy-sync" }
20embassy-nrf = { path = "../../embassy-nrf", default-features = false, features = ["nightly"] } 20embassy-nrf = { path = "../../embassy-nrf", default-features = false }
21embassy-boot = { path = "../boot", default-features = false } 21embassy-boot = { path = "../boot", default-features = false }
22cortex-m = { version = "0.7.6" } 22cortex-m = { version = "0.7.6" }
23cortex-m-rt = { version = "0.7" } 23cortex-m-rt = { version = "0.7" }
24embedded-storage = "0.3.0" 24embedded-storage = "0.3.0"
25embedded-storage-async = "0.4.0" 25embedded-storage-async = { version = "0.4.0", optional = true }
26cfg-if = "1.0.0" 26cfg-if = "1.0.0"
27 27
28nrf-softdevice-mbr = { version = "0.1.0", git = "https://github.com/embassy-rs/nrf-softdevice.git", branch = "master", optional = true } 28nrf-softdevice-mbr = { version = "0.1.0", git = "https://github.com/embassy-rs/nrf-softdevice.git", branch = "master", optional = true }
@@ -36,3 +36,8 @@ defmt = [
36softdevice = [ 36softdevice = [
37 "nrf-softdevice-mbr", 37 "nrf-softdevice-mbr",
38] 38]
39nightly = [
40 "dep:embedded-storage-async",
41 "embassy-boot/nightly",
42 "embassy-nrf/nightly"
43]
diff --git a/embassy-boot/nrf/README.md b/embassy-boot/nrf/README.md
index 02f35c0a6..7ce3c7021 100644
--- a/embassy-boot/nrf/README.md
+++ b/embassy-boot/nrf/README.md
@@ -13,7 +13,7 @@ An adaptation of `embassy-boot` for nRF.
13 13
14## Minimum supported Rust version (MSRV) 14## Minimum supported Rust version (MSRV)
15 15
16`embassy-boot-nrf` requires Rust nightly to compile as it relies on async traits for interacting with the flash peripherals. 16`embassy-boot-nrf` is guaranteed to compile on the latest stable Rust version at the time of release. It might compile with older versions but that may change in any new patch release.
17 17
18## License 18## License
19 19
diff --git a/embassy-boot/nrf/src/lib.rs b/embassy-boot/nrf/src/lib.rs
index d46ed9f36..14bea1f79 100644
--- a/embassy-boot/nrf/src/lib.rs
+++ b/embassy-boot/nrf/src/lib.rs
@@ -1,5 +1,4 @@
1#![no_std] 1#![no_std]
2#![feature(type_alias_impl_trait)]
3#![warn(missing_docs)] 2#![warn(missing_docs)]
4#![doc = include_str!("../README.md")] 3#![doc = include_str!("../README.md")]
5mod fmt; 4mod fmt;
diff --git a/embassy-boot/rp/Cargo.toml b/embassy-boot/rp/Cargo.toml
index 96024cdda..5147392ce 100644
--- a/embassy-boot/rp/Cargo.toml
+++ b/embassy-boot/rp/Cargo.toml
@@ -18,14 +18,14 @@ defmt-rtt = { version = "0.4", optional = true }
18log = { version = "0.4", optional = true } 18log = { version = "0.4", optional = true }
19 19
20embassy-sync = { path = "../../embassy-sync" } 20embassy-sync = { path = "../../embassy-sync" }
21embassy-rp = { path = "../../embassy-rp", default-features = false, features = ["nightly"] } 21embassy-rp = { path = "../../embassy-rp", default-features = false }
22embassy-boot = { path = "../boot", default-features = false } 22embassy-boot = { path = "../boot", default-features = false }
23embassy-time = { path = "../../embassy-time", features = ["nightly"] } 23embassy-time = { path = "../../embassy-time" }
24 24
25cortex-m = { version = "0.7.6" } 25cortex-m = { version = "0.7.6" }
26cortex-m-rt = { version = "0.7" } 26cortex-m-rt = { version = "0.7" }
27embedded-storage = "0.3.0" 27embedded-storage = "0.3.0"
28embedded-storage-async = "0.4.0" 28embedded-storage-async = { version = "0.4.0", optional = true }
29cfg-if = "1.0.0" 29cfg-if = "1.0.0"
30 30
31[features] 31[features]
@@ -40,6 +40,12 @@ log = [
40 "embassy-rp/log", 40 "embassy-rp/log",
41] 41]
42debug = ["defmt-rtt"] 42debug = ["defmt-rtt"]
43nightly = [
44 "dep:embedded-storage-async",
45 "embassy-boot/nightly",
46 "embassy-rp/nightly",
47 "embassy-time/nightly"
48]
43 49
44[profile.dev] 50[profile.dev]
45debug = 2 51debug = 2
diff --git a/embassy-boot/rp/README.md b/embassy-boot/rp/README.md
index c0c2d85fa..315d655e3 100644
--- a/embassy-boot/rp/README.md
+++ b/embassy-boot/rp/README.md
@@ -13,7 +13,7 @@ NOTE: The applications using this bootloader should not link with the `link-rp.x
13 13
14## Minimum supported Rust version (MSRV) 14## Minimum supported Rust version (MSRV)
15 15
16`embassy-boot-rp` requires Rust nightly to compile as it relies on async traits for interacting with the flash peripherals. 16`embassy-boot-rp` is guaranteed to compile on the latest stable Rust version at the time of release. It might compile with older versions but that may change in any new patch release.
17 17
18## License 18## License
19 19
diff --git a/embassy-boot/rp/src/lib.rs b/embassy-boot/rp/src/lib.rs
index c3cb22299..0d577f08a 100644
--- a/embassy-boot/rp/src/lib.rs
+++ b/embassy-boot/rp/src/lib.rs
@@ -1,5 +1,4 @@
1#![no_std] 1#![no_std]
2#![feature(type_alias_impl_trait)]
3#![warn(missing_docs)] 2#![warn(missing_docs)]
4#![doc = include_str!("../README.md")] 3#![doc = include_str!("../README.md")]
5mod fmt; 4mod fmt;
diff --git a/embassy-boot/stm32/Cargo.toml b/embassy-boot/stm32/Cargo.toml
index 7061063bb..99a6b8e0e 100644
--- a/embassy-boot/stm32/Cargo.toml
+++ b/embassy-boot/stm32/Cargo.toml
@@ -19,12 +19,12 @@ defmt-rtt = { version = "0.4", optional = true }
19log = { version = "0.4", optional = true } 19log = { version = "0.4", optional = true }
20 20
21embassy-sync = { path = "../../embassy-sync" } 21embassy-sync = { path = "../../embassy-sync" }
22embassy-stm32 = { path = "../../embassy-stm32", default-features = false, features = ["nightly"] } 22embassy-stm32 = { path = "../../embassy-stm32", default-features = false }
23embassy-boot = { path = "../boot", default-features = false } 23embassy-boot = { path = "../boot", default-features = false }
24cortex-m = { version = "0.7.6" } 24cortex-m = { version = "0.7.6" }
25cortex-m-rt = { version = "0.7" } 25cortex-m-rt = { version = "0.7" }
26embedded-storage = "0.3.0" 26embedded-storage = "0.3.0"
27embedded-storage-async = "0.4.0" 27embedded-storage-async = { version = "0.4.0", optional = true }
28cfg-if = "1.0.0" 28cfg-if = "1.0.0"
29 29
30[features] 30[features]
@@ -39,6 +39,11 @@ log = [
39 "embassy-stm32/log", 39 "embassy-stm32/log",
40] 40]
41debug = ["defmt-rtt"] 41debug = ["defmt-rtt"]
42nightly = [
43 "dep:embedded-storage-async",
44 "embassy-boot/nightly",
45 "embassy-stm32/nightly"
46]
42 47
43[profile.dev] 48[profile.dev]
44debug = 2 49debug = 2
diff --git a/embassy-boot/stm32/README.md b/embassy-boot/stm32/README.md
index cb134b534..b4d7ba5a4 100644
--- a/embassy-boot/stm32/README.md
+++ b/embassy-boot/stm32/README.md
@@ -11,7 +11,7 @@ An adaptation of `embassy-boot` for STM32.
11 11
12## Minimum supported Rust version (MSRV) 12## Minimum supported Rust version (MSRV)
13 13
14`embassy-boot-stm32` requires Rust nightly to compile as it relies on async traits for interacting with the flash peripherals. 14`embassy-boot-stm32` is guaranteed to compile on the latest stable Rust version at the time of release. It might compile with older versions but that may change in any new patch release.
15 15
16## License 16## License
17 17
diff --git a/embassy-boot/stm32/src/lib.rs b/embassy-boot/stm32/src/lib.rs
index 94404697f..88ce1c878 100644
--- a/embassy-boot/stm32/src/lib.rs
+++ b/embassy-boot/stm32/src/lib.rs
@@ -1,5 +1,4 @@
1#![no_std] 1#![no_std]
2#![feature(type_alias_impl_trait)]
3#![warn(missing_docs)] 2#![warn(missing_docs)]
4#![doc = include_str!("../README.md")] 3#![doc = include_str!("../README.md")]
5mod fmt; 4mod fmt;
diff --git a/examples/boot/application/nrf/Cargo.toml b/examples/boot/application/nrf/Cargo.toml
index d6a30602d..88528e763 100644
--- a/examples/boot/application/nrf/Cargo.toml
+++ b/examples/boot/application/nrf/Cargo.toml
@@ -9,8 +9,8 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync" }
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly"] }
11embassy-nrf = { version = "0.1.0", path = "../../../../embassy-nrf", features = ["time-driver-rtc1", "gpiote", "nightly"] } 11embassy-nrf = { version = "0.1.0", path = "../../../../embassy-nrf", features = ["time-driver-rtc1", "gpiote", "nightly"] }
12embassy-boot = { version = "0.1.0", path = "../../../../embassy-boot/boot" } 12embassy-boot = { version = "0.1.0", path = "../../../../embassy-boot/boot", features = ["nightly"] }
13embassy-boot-nrf = { version = "0.1.0", path = "../../../../embassy-boot/nrf" } 13embassy-boot-nrf = { version = "0.1.0", path = "../../../../embassy-boot/nrf", features = ["nightly"] }
14embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 14embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
15 15
16defmt = { version = "0.3", optional = true } 16defmt = { version = "0.3", optional = true }
diff --git a/examples/boot/application/rp/Cargo.toml b/examples/boot/application/rp/Cargo.toml
index 62ef42d6b..782ccef2b 100644
--- a/examples/boot/application/rp/Cargo.toml
+++ b/examples/boot/application/rp/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync" }
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers", "arch-cortex-m", "executor-thread"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly"] }
11embassy-rp = { version = "0.1.0", path = "../../../../embassy-rp", features = ["time-driver", "unstable-traits", "nightly"] } 11embassy-rp = { version = "0.1.0", path = "../../../../embassy-rp", features = ["time-driver", "unstable-traits", "nightly"] }
12embassy-boot-rp = { version = "0.1.0", path = "../../../../embassy-boot/rp" } 12embassy-boot-rp = { version = "0.1.0", path = "../../../../embassy-boot/rp", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = "0.3" 15defmt = "0.3"
diff --git a/examples/boot/application/stm32f3/Cargo.toml b/examples/boot/application/stm32f3/Cargo.toml
index e5fb1b01d..881191876 100644
--- a/examples/boot/application/stm32f3/Cargo.toml
+++ b/examples/boot/application/stm32f3/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync", features
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32f303re", "time-driver-any", "exti"] } 11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32f303re", "time-driver-any", "exti"] }
12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" } 12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }
diff --git a/examples/boot/application/stm32f7/Cargo.toml b/examples/boot/application/stm32f7/Cargo.toml
index a6ac1cadf..21665553b 100644
--- a/examples/boot/application/stm32f7/Cargo.toml
+++ b/examples/boot/application/stm32f7/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync", features
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32f767zi", "time-driver-any", "exti"] } 11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32f767zi", "time-driver-any", "exti"] }
12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" } 12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }
diff --git a/examples/boot/application/stm32h7/Cargo.toml b/examples/boot/application/stm32h7/Cargo.toml
index 5b8ee555f..eef8b4138 100644
--- a/examples/boot/application/stm32h7/Cargo.toml
+++ b/examples/boot/application/stm32h7/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync" }
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32h743zi", "time-driver-any", "exti"] } 11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32h743zi", "time-driver-any", "exti"] }
12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" } 12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }
diff --git a/examples/boot/application/stm32l0/Cargo.toml b/examples/boot/application/stm32l0/Cargo.toml
index 05ce5c10a..2bcf292bf 100644
--- a/examples/boot/application/stm32l0/Cargo.toml
+++ b/examples/boot/application/stm32l0/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync", features
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l072cz", "time-driver-any", "exti", "memory-x"] } 11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l072cz", "time-driver-any", "exti", "memory-x"] }
12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" } 12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }
diff --git a/examples/boot/application/stm32l1/Cargo.toml b/examples/boot/application/stm32l1/Cargo.toml
index 14af99e96..f452db72b 100644
--- a/examples/boot/application/stm32l1/Cargo.toml
+++ b/examples/boot/application/stm32l1/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync", features
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l151cb-a", "time-driver-any", "exti"] } 11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l151cb-a", "time-driver-any", "exti"] }
12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" } 12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }
diff --git a/examples/boot/application/stm32l4/Cargo.toml b/examples/boot/application/stm32l4/Cargo.toml
index 90ae97725..2c94ed3e9 100644
--- a/examples/boot/application/stm32l4/Cargo.toml
+++ b/examples/boot/application/stm32l4/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync", features
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l475vg", "time-driver-any", "exti"] } 11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32l475vg", "time-driver-any", "exti"] }
12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" } 12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }
diff --git a/examples/boot/application/stm32wl/Cargo.toml b/examples/boot/application/stm32wl/Cargo.toml
index 08403a4ec..f9dfb7c76 100644
--- a/examples/boot/application/stm32wl/Cargo.toml
+++ b/examples/boot/application/stm32wl/Cargo.toml
@@ -9,7 +9,7 @@ embassy-sync = { version = "0.2.0", path = "../../../../embassy-sync", features
9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] } 9embassy-executor = { version = "0.1.0", path = "../../../../embassy-executor", features = ["arch-cortex-m", "executor-thread", "nightly", "integrated-timers"] }
10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] } 10embassy-time = { version = "0.1.0", path = "../../../../embassy-time", features = ["nightly", "tick-hz-32_768"] }
11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32wl55jc-cm4", "time-driver-any", "exti"] } 11embassy-stm32 = { version = "0.1.0", path = "../../../../embassy-stm32", features = ["unstable-traits", "nightly", "stm32wl55jc-cm4", "time-driver-any", "exti"] }
12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32" } 12embassy-boot-stm32 = { version = "0.1.0", path = "../../../../embassy-boot/stm32", features = ["nightly"] }
13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" } 13embassy-embedded-hal = { version = "0.1.0", path = "../../../../embassy-embedded-hal" }
14 14
15defmt = { version = "0.3", optional = true } 15defmt = { version = "0.3", optional = true }