Posted on October 06, 2017 at 09:38
Hello Pontus ,
Please Read carefully , the chapter 6.1.3
Bad programmation of NVSCC0/1 could lock your device
There aresome examples to enable the censorship
the code should be launched in RAM Side
/* Following sequence gets the device to Censored state */
/* Subsequent access via JTAG password 0xCAFEBEEFFEEDFACE */
/* Unlock SHADOW flash */
if(CFLASH.LML.B.TSLK) /* Check Test/Shadow flash lock status */
{
CFLASH.LML.R = 0xA1A11111; /* Password to unlock LML */
CFLASH.LML.B.TSLK = 0; /* Test/Shadow Lock Bit */
}
if(CFLASH.SLL.B.STSLK) /* Check Secondary Test/Shadow flash lock status */
{
CFLASH.SLL.R = 0xC3C33333; /* Password to unlock SLL */
CFLASH.SLL.B.STSLK = 0; /* Secondary Test/Shadow Lock Bit */
}
/* Erase SHADOW flash */
CFLASH.MCR.R = 0x00000004; /* Set ERS in MCR: Select Operation */
*((uint32_t*) 0x00200000) = 0xFFFFFFFF; /* Latch a CFlash Shadow Address with any data */
CFLASH.MCR.R = 0x00000005; /* Set EHV in MCR: Operation Start */
while(!CFLASH.MCR.B.DONE); /* Check DONE flag */
while(!CFLASH.MCR.B.PEG); /* Check PEG flag */
CFLASH.MCR.R = 0x00000004; /* Reset EHV in MCR: Operation End */
CFLASH.MCR.R = 0x00000000; /* Reset ERS in MCR: Deselect Operation */
/* Program SHADOW flash */
CFLASH.MCR.R = 0x00000010; /* Set PGM in MCR: Select Operation */
*((uint32_t*) 0x203DD8) = 0xFEEDFACE; /* Latch Address and 32 MSB data */
*((uint32_t*) 0x203DDC) = 0xCAFEBEEF; /* Latch Address and 32 LSB data */
CFLASH.MCR.R = 0x00000011; /* Set EHV in MCR: Operation Start */
while(!CFLASH.MCR.B.DONE); /* Check DONE flag */
while(!CFLASH.MCR.B.PEG); /* Check PEG flag */
CFLASH.MCR.R = 0x00000010; /* Reset EHV in MCR: Operation End */
CFLASH.MCR.R = 0x00000000; /* Reset PGM in MCR: Deselect Operation */
/* Program SHADOW flash */
CFLASH.MCR.R = 0x00000010; /* Set PGM in MCR: Select Operation */
*((uint32_t*) 0x203DE0) = 0x55AABABA; /* Latch Address and 32 MSB data */
*((uint32_t*) 0x203DE4) = 0x55AABABA; /* Latch Address and 32 LSB data */
CFLASH.MCR.R = 0x00000011; /* Set EHV in MCR: Operation Start */
while(!CFLASH.MCR.B.DONE); /* Check DONE flag */
while(!CFLASH.MCR.B.PEG); /* Check PEG flag */
CFLASH.MCR.R = 0x00000010; /* Reset EHV in MCR: Operation End */
CFLASH.MCR.R = 0x00000000; /* Reset PGM in MCR: Deselect Operation */
/* Lock SHADOW flash */
CFLASH.LML.B.TSLK = 1; /* Test/Shadow Lock Bit */
CFLASH.SLL.B.STSLK = 1; /* Secondary Test/Shadow Lock Bit */
�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?
This one is to disable the censorship (to be launched in RAM)
/* Following sequence gets the device to Uncensored state */
/* Subsequent access is without password */
/* Unlock SHADOW flash */
if(CFLASH.LML.B.TSLK) /* Check Test/Shadow flash lock status */
{
CFLASH.LML.R = 0xA1A11111; /* Password to unlock LML */
CFLASH.LML.B.TSLK = 0; /* Test/Shadow Lock Bit */
}
if(CFLASH.SLL.B.STSLK) /* Check Secondary Test/Shadow flash lock status */
{
CFLASH.SLL.R = 0xC3C33333; /* Password to unlock SLL */
CFLASH.SLL.B.STSLK = 0; /* Secondary Test/Shadow Lock Bit */
}
/* Erase SHADOW flash */
CFLASH.MCR.R = 0x00000004; /* Set ERS in MCR: Select Operation */
*((uint32_t*) 0x00200000) = 0xFFFFFFFF; /* Latch a CFlash Shadow Address with any data */
CFLASH.MCR.R = 0x00000005; /* Set EHV in MCR: Operation Start */
while(!CFLASH.MCR.B.DONE); /* Check DONE flag */
while(!CFLASH.MCR.B.PEG); /* Check PEG flag */
CFLASH.MCR.R = 0x00000004; /* Reset EHV in MCR: Operation End */
CFLASH.MCR.R = 0x00000000; /* Reset ERS in MCR: Deselect Operation */
/* Program SHADOW flash */
CFLASH.MCR.R = 0x00000010; /* Set PGM in MCR: Select Operation */
*((uint32_t*) 0x203DD8) = 0xFEEDFACE; /* Latch Address and 32 MSB data */
*((uint32_t*) 0x203DDC) = 0xCAFEBEEF; /* Latch Address and 32 LSB data */
CFLASH.MCR.R = 0x00000011; /* Set EHV in MCR: Operation Start */
while(!CFLASH.MCR.B.DONE); /* Check DONE flag */
while(!CFLASH.MCR.B.PEG); /* Check PEG flag */
CFLASH.MCR.R = 0x00000010; /* Reset EHV in MCR: Operation End */
CFLASH.MCR.R = 0x00000000; /* Reset PGM in MCR: Deselect Operation */
/* Program SHADOW flash */
CFLASH.MCR.R = 0x00000010; /* Set PGM in MCR: Select Operation */
*((uint32_t*) 0x203DE0) = 0x55AA55AA; /* Latch Address and 32 MSB data */
*((uint32_t*) 0x203DE4) = 0x55AA55AA; /* Latch Address and 32 LSB data */
CFLASH.MCR.R = 0x00000011; /* Set EHV in MCR: Operation Start */
while(!CFLASH.MCR.B.DONE); /* Check DONE flag */
while(!CFLASH.MCR.B.PEG); /* Check PEG flag */
CFLASH.MCR.R = 0x00000010; /* Reset EHV in MCR: Operation End */
CFLASH.MCR.R = 0x00000000; /* Reset PGM in MCR: Deselect Operation */
/* Lock SHADOW flash */
CFLASH.LML.B.TSLK = 1; /* Test/Shadow Lock Bit */
CFLASH.SLL.B.STSLK = 1; /* Secondary Test/Shadow Lock Bit */
�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?�?
Best Regards
Erwan