Hi,
I patched Circuitpython source for QSPI deep sleep with power consumption 3.6 uA in 5s loop.
From Nano_BLE_MCU-nRF52840_PS_v1.1.pdf datasheet 5.2.1.1 Sleep : ION_RAMON_RTC System ON, full 256 kB RAM retention, wake on RTC(running from LFRC clock) 3.16 μA
— a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -161,6 +161,9 @@ ifdef EXTERNAL_FLASH_DEVICES
ifeq ($(QSPI_FLASH_FILESYSTEM),1)
SRC_NRFX += nrfx/drivers/src/nrfx_qspi.c
endif
-
ifeq ($(QSPI_FLASH_POWERDOWN), 1)
-
CFLAGS += -DQSPI_FLASH_POWERDOWN=1
-
endif
endif
— a/ports/nrf/boards/Seeed_XIAO_nRF52840_Sense/mpconfigboard.mk
+++ b/ports/nrf/boards/Seeed_XIAO_nRF52840_Sense/mpconfigboard.mk
@@ -7,4 +7,5 @@ USB_MANUFACTURER = “Seeed”
MCU_CHIP = nrf52840
QSPI_FLASH_FILESYSTEM = 1
+QSPI_FLASH_POWERDOWN = 1
EXTERNAL_FLASH_DEVICES = “P25Q16H”
— a/ports/nrf/supervisor/qspi_flash.c
+++ b/ports/nrf/supervisor/qspi_flash.c
@@ -290,6 +290,8 @@ void qspi_flash_enter_sleep(void) {
mp_printf(&mp_plat_print, “qspi flash: DPM failed\r\n”);
#endif
}
-
spi_flash_command(CMD_DEEP);
-
NRFX_DELAY_US(WAIT_AFTER_DPM_ENTER);
#endifqspi_disable();
@@ -300,6 +302,7 @@ void qspi_flash_exit_sleep(void) {#ifdef QSPI_FLASH_POWERDOWN
if (NRF_QSPI->STATUS & QSPI_STATUS_DPM_Msk) { -
spi_flash_command(CMD_WAKE); // exit deep power-down mode NRF_QSPI->IFCONFIG1 &= ~QSPI_IFCONFIG1_DPMEN_Msk; NRFX_DELAY_US(WAIT_AFTER_DPM_EXIT);
— a/supervisor/shared/external_flash/common_commands.h
+++ b/supervisor/shared/external_flash/common_commands.h
@@ -44,5 +44,6 @@
#define CMD_ENABLE_RESET 0x66
#define CMD_RESET 0x99
#define CMD_WAKE 0xab
+#define CMD_DEEP 0xb9
#endif // MICROPY_INCLUDED_ATMEL_SAMD_EXTERNAL_FLASH_COMMON_COMMANDS_H
and with that code.py:
import time
import alarm
i=0
while True:
time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 5)
al = alarm.light_sleep_until_alarms(time_alarm)
i+=1
print(i)