This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF52820 Flash write (fstorage, fds) at 2.7V

Hello!

I am having a problem using any internal flash writing libraries. If I set the REG0 voltage to 2.7V, the controller stops erasing the memory.

Moreover, I cant erase chip by swd too.

Why does the documentation not say a word about the fact that actually setting the voltage below 3V is one-time, after which the chip can no longer be rewritten without connecting to an external source with a voltage of 3V or higher?

Parents
  • Hi Turnaev, 

    Are you using POFWARN which will prevent all flash writes? This is implemented in HW. From product specification, Power-fail comparator section:

    If the power failure warning is enabled and the supply voltage is below the threshold, the power-fail comparator will prevent the NVMC from performing write operations to the flash.

    -Amanda H.

  • Hello, Amanda!

    Thank for your replay!

    Unfortunately, the problem is somthing else.

    I tried turning POFWARN on at 2.0, 2.5volts and fully disable. Nothing changes.

    I have a Hardfault in a loop of waiting for a 32-bit word to be written to flash memory.

    		if(NRF_NVMC->READY == 1)
    		{
    			NRF_NVMC->CONFIG = 1;
    			__ISB();
    			__DSB();
    			
    			for(uint8_t i = 0; i < 4; i++)
    			{
    				NRF_UICR->CUSTOMER[i] = tempCopyProtectID[i];
    				while(NRF_NVMC->READY != 1);
    			}
    			
    			NRF_NVMC->CONFIG = 0;
    			__ISB();
    			__DSB();
    			
    			while(NRF_NVMC->READY != 1);
    		}

    If I change Reg0 out to 3.0 or 3.3V all work good. But in my case I need voltage less.

Reply
  • Hello, Amanda!

    Thank for your replay!

    Unfortunately, the problem is somthing else.

    I tried turning POFWARN on at 2.0, 2.5volts and fully disable. Nothing changes.

    I have a Hardfault in a loop of waiting for a 32-bit word to be written to flash memory.

    		if(NRF_NVMC->READY == 1)
    		{
    			NRF_NVMC->CONFIG = 1;
    			__ISB();
    			__DSB();
    			
    			for(uint8_t i = 0; i < 4; i++)
    			{
    				NRF_UICR->CUSTOMER[i] = tempCopyProtectID[i];
    				while(NRF_NVMC->READY != 1);
    			}
    			
    			NRF_NVMC->CONFIG = 0;
    			__ISB();
    			__DSB();
    			
    			while(NRF_NVMC->READY != 1);
    		}

    If I change Reg0 out to 3.0 or 3.3V all work good. But in my case I need voltage less.

Children
No Data
Related