aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32/src/flash/mod.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-12-17 22:09:14 +0100
committerDario Nieuwenhuis <[email protected]>2023-12-18 00:53:18 +0100
commit80c9d04bbd83367340a4f3a1e991df825a0b6029 (patch)
treed79b74b0ca17dd943dfcb3b809e895918f4ae629 /embassy-stm32/src/flash/mod.rs
parenta2d4bab2f8a4a9b994bc0289938a9f725950715f (diff)
stm32: add some docs.
Diffstat (limited to 'embassy-stm32/src/flash/mod.rs')
-rw-r--r--embassy-stm32/src/flash/mod.rs62
1 files changed, 50 insertions, 12 deletions
diff --git a/embassy-stm32/src/flash/mod.rs b/embassy-stm32/src/flash/mod.rs
index 3e8f2830b..6b6b4d41c 100644
--- a/embassy-stm32/src/flash/mod.rs
+++ b/embassy-stm32/src/flash/mod.rs
@@ -14,50 +14,84 @@ pub use crate::_generated::flash_regions::*;
14pub use crate::_generated::MAX_ERASE_SIZE; 14pub use crate::_generated::MAX_ERASE_SIZE;
15pub use crate::pac::{FLASH_BASE, FLASH_SIZE, WRITE_SIZE}; 15pub use crate::pac::{FLASH_BASE, FLASH_SIZE, WRITE_SIZE};
16 16
17/// Get whether the default flash layout is being used.
18///
19/// In some chips, dual-bank is not default. This will then return `false`
20/// when dual-bank is enabled.
21pub fn is_default_layout() -> bool {
22 family::is_default_layout()
23}
24
25/// Get all flash regions.
26pub fn get_flash_regions() -> &'static [&'static FlashRegion] {
27 family::get_flash_regions()
28}
29
30/// Read size (always 1)
17pub const READ_SIZE: usize = 1; 31pub const READ_SIZE: usize = 1;
18 32
19pub struct Blocking; 33/// Blocking flash mode typestate.
20pub struct Async; 34pub enum Blocking {}
35/// Async flash mode typestate.
36pub enum Async {}
21 37
38/// Flash memory region
22#[derive(Debug)] 39#[derive(Debug)]
23#[cfg_attr(feature = "defmt", derive(defmt::Format))] 40#[cfg_attr(feature = "defmt", derive(defmt::Format))]
24pub struct FlashRegion { 41pub struct FlashRegion {
42 /// Bank number.
25 pub bank: FlashBank, 43 pub bank: FlashBank,
44 /// Absolute base address.
26 pub base: u32, 45 pub base: u32,
46 /// Size in bytes.
27 pub size: u32, 47 pub size: u32,
48 /// Erase size (sector size).
28 pub erase_size: u32, 49 pub erase_size: u32,
50 /// Minimum write size.
29 pub write_size: u32, 51 pub write_size: u32,
52 /// Erase value (usually `0xFF`, but is `0x00` in some chips)
30 pub erase_value: u8, 53 pub erase_value: u8,
31 pub(crate) _ensure_internal: (), 54 pub(crate) _ensure_internal: (),
32} 55}
33 56
57impl FlashRegion {
58 /// Absolute end address.
59 pub const fn end(&self) -> u32 {
60 self.base + self.size
61 }
62
63 /// Number of sectors in the region.
64 pub const fn sectors(&self) -> u8 {
65 (self.size / self.erase_size) as u8
66 }
67}
68
69/// Flash sector.
34#[derive(Debug, PartialEq)] 70#[derive(Debug, PartialEq)]
35#[cfg_attr(feature = "defmt", derive(defmt::Format))] 71#[cfg_attr(feature = "defmt", derive(defmt::Format))]
36pub struct FlashSector { 72pub struct FlashSector {
73 /// Bank number.
37 pub bank: FlashBank, 74 pub bank: FlashBank,
75 /// Sector number within the bank.
38 pub index_in_bank: u8, 76 pub index_in_bank: u8,
77 /// Absolute start address.
39 pub start: u32, 78 pub start: u32,
79 /// Size in bytes.
40 pub size: u32, 80 pub size: u32,
41} 81}
42 82
83/// Flash bank.
43#[derive(Clone, Copy, Debug, PartialEq)] 84#[derive(Clone, Copy, Debug, PartialEq)]
44#[cfg_attr(feature = "defmt", derive(defmt::Format))] 85#[cfg_attr(feature = "defmt", derive(defmt::Format))]
45pub enum FlashBank { 86pub enum FlashBank {
87 /// Bank 1
46 Bank1 = 0, 88 Bank1 = 0,
89 /// Bank 2
47 Bank2 = 1, 90 Bank2 = 1,
91 /// OTP region
48 Otp, 92 Otp,
49} 93}
50 94
51impl FlashRegion {
52 pub const fn end(&self) -> u32 {
53 self.base + self.size
54 }
55
56 pub const fn sectors(&self) -> u8 {
57 (self.size / self.erase_size) as u8
58 }
59}
60
61#[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_wl, flash_wb), path = "l.rs")] 95#[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_wl, flash_wb), path = "l.rs")]
62#[cfg_attr(flash_f0, path = "f0.rs")] 96#[cfg_attr(flash_f0, path = "f0.rs")]
63#[cfg_attr(flash_f3, path = "f3.rs")] 97#[cfg_attr(flash_f3, path = "f3.rs")]
@@ -78,6 +112,10 @@ mod family;
78#[allow(unused_imports)] 112#[allow(unused_imports)]
79pub use family::*; 113pub use family::*;
80 114
115/// Flash error
116///
117/// See STM32 Reference Manual for your chip for details.
118#[allow(missing_docs)]
81#[derive(Debug, Copy, Clone, PartialEq, Eq)] 119#[derive(Debug, Copy, Clone, PartialEq, Eq)]
82#[cfg_attr(feature = "defmt", derive(defmt::Format))] 120#[cfg_attr(feature = "defmt", derive(defmt::Format))]
83pub enum Error { 121pub enum Error {