diff --git a/ports/stm32/sdram.c b/ports/stm32/sdram.c index 4615c4fe1e..4ca79f270c 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 f7a124addd..5d170ea0d0 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__