summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriabdalkader <i.abdalkader@gmail.com>2022-04-07 16:29:44 +0200
committerDamien George <damien@micropython.org>2022-04-11 16:00:40 +1000
commit2a19c3cfe15506b3b51b9a5435db984f64299df0 (patch)
treeb2aeaa69e4978c521e5ed0df87c6e7eb6d94943e
parentcb0372b5bfe72fee99f5b3ffb94dcd1735353f4b (diff)
stm32/sdram: Add function to enable SDRAM power-down mode.
Add power-down mode for maximum power saving while in standby mode, to be used by a board if needed. Also fix a typo in a comment.
-rw-r--r--ports/stm32/sdram.c10
-rw-r--r--ports/stm32/sdram.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/ports/stm32/sdram.c b/ports/stm32/sdram.c
index 4615c4fe1..4ca79f270 100644
--- a/ports/stm32/sdram.c
+++ b/ports/stm32/sdram.c
@@ -259,7 +259,7 @@ static void sdram_init_seq(SDRAM_HandleTypeDef
void sdram_enter_low_power(void) {
// Enter self-refresh mode.
- // In self-refresh mode the SDRAM retains data with external clocking.
+ // In self-refresh mode the SDRAM retains data without external clocking.
FMC_SDRAM_DEVICE->SDCMR |= (FMC_SDRAM_CMD_SELFREFRESH_MODE | // Command Mode
FMC_SDRAM_CMD_TARGET_BANK | // Command Target
(0 << 5U) | // Auto Refresh Number -1
@@ -276,6 +276,14 @@ void sdram_leave_low_power(void) {
(0 << 9U)); // Mode Register Definition
}
+void sdram_enter_power_down(void) {
+ // Enter power-down mode.
+ FMC_SDRAM_DEVICE->SDCMR |= (FMC_SDRAM_CMD_POWERDOWN_MODE | // Command Mode
+ FMC_SDRAM_CMD_TARGET_BANK | // Command Target
+ (0 << 5U) | // Auto Refresh Number -1
+ (0 << 9U)); // Mode Register Definition
+}
+
#if __GNUC__ >= 11
// Prevent array bounds warnings when accessing SDRAM_START_ADDRESS as a memory pointer.
#pragma GCC diagnostic push
diff --git a/ports/stm32/sdram.h b/ports/stm32/sdram.h
index f7a124add..5d170ea0d 100644
--- a/ports/stm32/sdram.h
+++ b/ports/stm32/sdram.h
@@ -13,5 +13,6 @@ void *sdram_start(void);
void *sdram_end(void);
void sdram_enter_low_power(void);
void sdram_leave_low_power(void);
+void sdram_enter_power_down(void);
bool sdram_test(bool exhaustive);
#endif // __SDRAM_H__