| .. _mimxrt595_evk-system-off-sample: |
| |
| RT595 System Off demo |
| ##################### |
| |
| Overview |
| ******** |
| |
| This sample can be used for basic power measurement and as an example of |
| soft off on NXP i.MX RT platforms. The functional behavior is: |
| |
| * Busy-wait for 2 seconds |
| * Turn the system off after enabling wakeup through RTC and set alarm |
| 10 seconds in the future to wake up the processor |
| |
| Requirements |
| ************ |
| |
| This application uses MIMXRT595-EVK for the demo. |
| |
| Building, Flashing and Running |
| ****************************** |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/boards/mimxrt595_evk_cm33/system_off |
| :board: mimxrt595_evk_cm33 |
| :goals: build flash |
| :compact: |
| |
| Running: |
| |
| 1. Open UART terminal. |
| 2. Power Cycle Device. |
| 3. Device will turn on and idle for 2 seconds |
| 4. Device will turn itself off using deep power down mode. RTC alarm |
| will wake device and restart the application from a warm reset. |
| |
| Sample Output |
| ================= |
| MIMXRT595-EVK core output |
| -------------------------- |
| |
| .. code-block:: console |
| |
| *** Booting Zephyr OS build zephyr-v3.2.0-1045-g07228f716c78 *** |
| |
| mimxrt595_evk_cm33 system off demo |
| RTC Alarm set for 10 seconds to wake from soft-off. |
| Entering system off |
| |
| OTP Fuse setting to wake from Deep Power Down and reset flash |
| ############################################################# |
| |
| Background |
| ********** |
| |
| This sample will not resume the application after waking from Deep Power |
| Down (DPD) mode on an EVK with default settings. The reason is that the |
| flash is not normally reset when waking from DPD. This sample |
| eXecutes-In-Place (XIP) from the external flash. When the MCU wakes from |
| DPD, it wakes through the reset flow. But if the external flash is not |
| reset, the MCU and flash are no longer in sync, and the MCU cannot XIP. |
| In this default state, one can confirm the RTC is waking the MCU from |
| DPD because the MCU will set the PMIC_MODE pins to 0b00 requesting the |
| PMIC to enter the default boot mode, and the PMIC will enable the |
| regulator driving the VDDCORE rail at 1.0V. However, the MCU will not be |
| able to XIP from the flash to resume. One can press the Reset button in |
| this state to restart the app. |
| |
| To wake from DPD and resume XIP from the flash, the MCU needs to be |
| configured to reset the external flash. This can be done by programming |
| the One-Time-Programmable (OTP) fuses in the MCU. The steps below detail |
| how program the OTP BOOT_CFG1 fuses to use GPIO pin PIO4_5 as the flash |
| reset. This fuse setting instructs the ROM bootloader to toggle PIO4_5 |
| when resetting the flash. Note that the MIMXRT595-EVK board is designed |
| to have PIO4_5 drive the octal flash reset pin on FlexSPI0. Other boards |
| using this MCU may use a different GPIO pin, and the setting in the OTP |
| fuses must match the GPIO pin connected to reset. Before programming |
| fuses, it is best to write the OTP shadow registers first and confirm |
| the operation. Then program the OTP fuses after confirming the correct |
| settings. For more details on OTP fuses and shadow registers, refer to |
| the Reference Manual for this MCU, and the OTP Fuse Map spreadsheet |
| included as an attachment in the Reference Manual PDF. |
| |
| Tools needed |
| ************ |
| These steps use the blhost tool that runs on a host computer running |
| Linux, Windows, or MacOS. Download blhost, find the appropriate blhost |
| executable for your host OS, and use the command-line steps below to |
| program the OTP fuses. To download, go to https://www.nxp.com/mcuboot, |
| and find the Blhost package under Downloads. |
| |
| Steps to program OTP fuses on MIMXRT595-EVK |
| ******************************************* |
| These steps detail using USB as the interface between blhost and the |
| ROM bootloader. UART is another option, for more details see the |
| blhost documentation and the Boot ROM chapter in the MCU Reference |
| Manual. |
| |
| 1. Power the EVK and connect USB J38 to host computer. J38 is for the |
| USB peripheral of the MCU, and will also power the EVK. |
| |
| 2. Set the DIP switches of SW7 to On-Off-On (123) to boot in ISP USB |
| HID mode. |
| |
| 3. Press the Reset button SW3 to boot in ISP mode. The EVK should |
| enumerate as a USB HID device in the host computer. |
| |
| 4. This command confirms the current settings of BOOT_CFG1 fuses: |
| blhost -u 0x1fc9,0x0023 -- efuse-read-once 0x61 |
| |
| 5. This command programs BOOT_CFG1 to enable the flash reset pin using |
| PIO4_5: |
| blhost -u 0x1fc9,0x0023 -- efuse-program-once 0x61 0x164000 |
| |
| 6. This command confirms the programmed fuses in BOOT_CFG1: |
| blhost -u 0x1fc9,0x0023 -- efuse-read-once 0x61 |
| |
| 7. Set the DIP switches of SW7 to Off-Off-On (123) to boot from the |
| external flash on FlexSPI0. |
| |
| 8. Press the Reset button SW3 to boot from flash and run the app. |
| |
| Expected results from blhost |
| **************************** |
| |
| >blhost -u 0x1fc9,0x0023 -- efuse-read-once 0x61 |
| Inject command 'efuse-read-once' |
| Response status = 0 (0x0) Success. |
| Response word 1 = 4 (0x4) |
| Response word 2 = 0 (0x0) |
| |
| >blhost -u 0x1fc9,0x0023 -- efuse-program-once 0x61 0x164000 |
| Inject command 'efuse-program-once' |
| Successful generic response to command 'efuse-program-once' |
| Response status = 0 (0x0) Success. |
| |
| >blhost -u 0x1fc9,0x0023 -- efuse-read-once 0x61 |
| Inject command 'efuse-read-once' |
| Response status = 0 (0x0) Success. |
| Response word 1 = 4 (0x4) |
| Response word 2 = 1458176 (0x164000) |