I'm using the LPC4350, booting from SPIFI.
Normal boot-up works fine, and reset also works fine when in normal mode.
However, I'm finding that if a reset occurs via nRESET pin when the LPC4350 is in deep-sleep mode, it fails to boot up. It is supposed to boot from SPIFI (OTP is untouched and VPP pin is not connected, so BOOT_SRC should be 0 (ie, boot source determined by pins P2_9, P2_8, P1_2, P1_1 - these pins are set for SPIFI boot)), but instead it goes straight to outputting a 60s 1Hz pulse coming out of P1_1, and then seems to just stop after that.
If I input a second LO pulse into the nRESET pin, it boots up OK.
Referring to "Fig 16. Boot process for parts without flash" (UM10503), I've attempted to identify where the problem is. I found I could pause the reboot at the "enter ISP mode" state by holding P2_7 LO, and that enabled me to connect the debugger by JTAG and check the value of the BOOT_SRC pins in OTP.
The OTP values read out by the debugger showed that the OTP values were reading incorrect values. Specifically, OTP bank 0 Word 0 (First 32 bit word of the unique part ID) and OTP bank 3 Word 0 (Customer control data) (addresses 0x40045000 and 0x40045030 respectively) were reading as 0xFFFFFFFF. This means that the four BOOT_SRC bits (bits 28:25 of Customer control data) were read as the (invalid) value 1111 which, as per Fig 16, would immediately cause the boot process to go to the 60s timeout toggle pin P1_1.
So something seems to be causing incorrect values to be read when reading the OTP registers.
It seems to be a similar problem to the RESET.3 problem described in the errata sheet:
"When the part is in deep-sleep or power-down mode and if an external reset occurs via nRESET pin being activated, as the part comes out of reset, the reset state of some functional blocks may be incorrect. This may result in loss of functionality of the device."
The "possible affected blocks" are listed, but the list does not include OTP.
However, it is clear from the errata sheet information for RESET.3 that external reset via nRESET pin during deep-sleep mode should be possible (otherwise, work-around 1 would not work). So I'm thinking that there must be something with my hardware and/or software setup that is causing this problem to occur.
I'm trying to identify what that difference might be, and hence what I could try doing as a work-around.
For my next step, I'm planning to see if I can reproduce this problem using the misc\pmc_states example project in LPCOpen, but in the meantime:
Has anyone else seen this problem?
Any ideas for what to try, to find a work-around?