XIAO BLE Sense in deep sleep mode

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);
    #endif

    qspi_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)