diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-12-17 22:09:14 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-12-18 00:53:18 +0100 |
| commit | 80c9d04bbd83367340a4f3a1e991df825a0b6029 (patch) | |
| tree | d79b74b0ca17dd943dfcb3b809e895918f4ae629 /embassy-stm32/src/flash/mod.rs | |
| parent | a2d4bab2f8a4a9b994bc0289938a9f725950715f (diff) | |
stm32: add some docs.
Diffstat (limited to 'embassy-stm32/src/flash/mod.rs')
| -rw-r--r-- | embassy-stm32/src/flash/mod.rs | 62 |
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::*; | |||
| 14 | pub use crate::_generated::MAX_ERASE_SIZE; | 14 | pub use crate::_generated::MAX_ERASE_SIZE; |
| 15 | pub use crate::pac::{FLASH_BASE, FLASH_SIZE, WRITE_SIZE}; | 15 | pub 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. | ||
| 21 | pub fn is_default_layout() -> bool { | ||
| 22 | family::is_default_layout() | ||
| 23 | } | ||
| 24 | |||
| 25 | /// Get all flash regions. | ||
| 26 | pub fn get_flash_regions() -> &'static [&'static FlashRegion] { | ||
| 27 | family::get_flash_regions() | ||
| 28 | } | ||
| 29 | |||
| 30 | /// Read size (always 1) | ||
| 17 | pub const READ_SIZE: usize = 1; | 31 | pub const READ_SIZE: usize = 1; |
| 18 | 32 | ||
| 19 | pub struct Blocking; | 33 | /// Blocking flash mode typestate. |
| 20 | pub struct Async; | 34 | pub enum Blocking {} |
| 35 | /// Async flash mode typestate. | ||
| 36 | pub 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))] |
| 24 | pub struct FlashRegion { | 41 | pub 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 | ||
| 57 | impl 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))] |
| 36 | pub struct FlashSector { | 72 | pub 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))] |
| 45 | pub enum FlashBank { | 86 | pub 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 | ||
| 51 | impl 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)] |
| 79 | pub use family::*; | 113 | pub 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))] |
| 83 | pub enum Error { | 121 | pub enum Error { |
