www.ti.com
Code Security Module (CSM)
57
SPRUI07–March 2020
Submit Documentation Feedback
Copyright © 2020, Texas Instruments Incorporated
System Control and Interrupts
1.2.3.3.1 C Code Example to Unsecure
volatile int *CSM = (volatile int *)0x000AE0; //CSM register file
volatile int *PWL = (volatile int *)0x0033FFF8; //Password location
volatile int tmp;
int I;
// Read the 128-bits of the password locations (PWL)
// in flash at address 0x33 FFF8 - 0x33 FFFF
// If the device is secure, then the values read will
// not actually be loaded into the temp variable, so
// this is called a dummy read.
for (I=0; i<8; I++) tmp = *PWL++;
// If the password locations (PWL) are all = ones (0xFFFF),
// then the device will now be unsecure. If the password
// is not all ones (0xFFFF), then the code below is required
// to unsecure the CSM.
// Write the 128-bit password to the KEY registers
// If this password matches that stored in the
// PWL then the CSM will become unsecure. If it does not
// match, then the device will remain secure.
// An example password of:
// 0x11112222333344445555666677778888 is used.
asm(" EALLOW");
// Key registers are EALLOW protected *CSM++ = 0x1111;
// Register KEY0 at 0xAE0 *CSM++ = 0x2222;
// Register KEY1 at 0xAE1 *CSM++ = 0x3333;
// Register KEY2 at 0xAE2 *CSM++ = 0x4444;
// Register KEY3 at 0xAE3 *CSM++ = 0x5555;
// Register KEY4 at 0xAE4 *CSM++ = 0x6666;
// Register KEY5 at 0xAE5 *CSM++ = 0x7777;
// Register KEY6 at 0xAE6 *CSM++ = 0x8888;
// Register KEY7 at 0xAE7
asm(" EDIS");
1.2.3.3.2 C Code Example to Resecure
volatile int *CSMSCR = 0x00AEF; //CSMSCR register
//Set FORCESEC bit
asm(" EALLOW"); //CSMSCR register is EALLOW protected.
*CSMSCR = 0x8000;
asm("EDIS");