aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32
diff options
context:
space:
mode:
authorRasmus Melchior Jacobsen <[email protected]>2023-05-25 22:31:24 +0200
committerRasmus Melchior Jacobsen <[email protected]>2023-05-25 22:31:24 +0200
commitce331b411c3a6c69fbfefa968319f8eba5ad813f (patch)
tree529c3637c9bc434ba184c8af3c401455836c3ea2 /embassy-stm32
parent8528455a75aa33cf774d72ba6b35a4298bca511e (diff)
Only assert_not_corrupted_read if we read from the second bank
Diffstat (limited to 'embassy-stm32')
-rw-r--r--embassy-stm32/src/flash/common.rs5
-rw-r--r--embassy-stm32/src/flash/f4.rs15
2 files changed, 11 insertions, 9 deletions
diff --git a/embassy-stm32/src/flash/common.rs b/embassy-stm32/src/flash/common.rs
index 0729771a1..35f5a464c 100644
--- a/embassy-stm32/src/flash/common.rs
+++ b/embassy-stm32/src/flash/common.rs
@@ -97,10 +97,11 @@ pub(super) fn blocking_read(base: u32, size: u32, offset: u32, bytes: &mut [u8])
97 return Err(Error::Size); 97 return Err(Error::Size);
98 } 98 }
99 99
100 let start_address = base + offset;
101
100 #[cfg(flash_f4)] 102 #[cfg(flash_f4)]
101 family::assert_not_corrupted_read(); 103 family::assert_not_corrupted_read(start_address + bytes.len());
102 104
103 let start_address = base + offset;
104 let flash_data = unsafe { core::slice::from_raw_parts(start_address as *const u8, bytes.len()) }; 105 let flash_data = unsafe { core::slice::from_raw_parts(start_address as *const u8, bytes.len()) };
105 bytes.copy_from_slice(flash_data); 106 bytes.copy_from_slice(flash_data);
106 Ok(()) 107 Ok(())
diff --git a/embassy-stm32/src/flash/f4.rs b/embassy-stm32/src/flash/f4.rs
index 8c9c93696..a43efc51b 100644
--- a/embassy-stm32/src/flash/f4.rs
+++ b/embassy-stm32/src/flash/f4.rs
@@ -6,6 +6,7 @@ use atomic_polyfill::AtomicBool;
6#[cfg(feature = "nightly")] 6#[cfg(feature = "nightly")]
7use embassy_sync::waitqueue::AtomicWaker; 7use embassy_sync::waitqueue::AtomicWaker;
8use pac::flash::regs::Sr; 8use pac::flash::regs::Sr;
9use pac::FLASH_SIZE;
9 10
10use super::{FlashBank, FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE}; 11use super::{FlashBank, FlashRegion, FlashSector, FLASH_REGIONS, WRITE_SIZE};
11use crate::flash::Error; 12use crate::flash::Error;
@@ -437,10 +438,13 @@ fn restore_data_cache_state() {
437 } 438 }
438} 439}
439 440
440pub(crate) fn assert_not_corrupted_read() { 441pub(crate) fn assert_not_corrupted_read(end_address: u32) {
441 #[allow(unused)] 442 #[allow(unused)]
442 const REVISION_3: u16 = 0x2001; 443 const REVISION_3: u16 = 0x2001;
443 444
445 #[allow(unused)]
446 let second_bank_read = get_flash_regions().last().unwrap().bank == FlashBank::Bank2 && end_address > FLASH_SIZE / 2;
447
444 #[cfg(any( 448 #[cfg(any(
445 feature = "stm32f427ai", 449 feature = "stm32f427ai",
446 feature = "stm32f427ii", 450 feature = "stm32f427ii",
@@ -463,7 +467,7 @@ pub(crate) fn assert_not_corrupted_read() {
463 feature = "stm32f439vi", 467 feature = "stm32f439vi",
464 feature = "stm32f439zi", 468 feature = "stm32f439zi",
465 ))] 469 ))]
466 if unsafe { pac::DBGMCU.idcode().read().rev_id() < REVISION_3 && !pa12_is_output_pull_low() } { 470 if second_bank_read && unsafe { pac::DBGMCU.idcode().read().rev_id() < REVISION_3 && !pa12_is_output_pull_low() } {
467 panic!("Read corruption for stm32f42xxI and stm32f43xxI when PA12 is in use for chips below revision 3, see errata 2.2.11"); 471 panic!("Read corruption for stm32f42xxI and stm32f43xxI when PA12 is in use for chips below revision 3, see errata 2.2.11");
468 } 472 }
469 473
@@ -487,11 +491,8 @@ pub(crate) fn assert_not_corrupted_read() {
487 feature = "stm32f439vg", 491 feature = "stm32f439vg",
488 feature = "stm32f439zg", 492 feature = "stm32f439zg",
489 ))] 493 ))]
490 if unsafe { 494 if second_bank_read && unsafe { &&pac::DBGMCU.idcode().read().rev_id() < REVISION_3 && !pa12_is_output_pull_low() }
491 pac::FLASH.optcr().read().db1m() 495 {
492 && pac::DBGMCU.idcode().read().rev_id() < REVISION_3
493 && !pa12_is_output_pull_low()
494 } {
495 panic!("Read corruption for stm32f42xxG and stm32f43xxG in dual bank mode when PA12 is in use for chips below revision 3, see errata 2.2.11"); 496 panic!("Read corruption for stm32f42xxG and stm32f43xxG in dual bank mode when PA12 is in use for chips below revision 3, see errata 2.2.11");
496 } 497 }
497} 498}