Part Number: TMS320F28023
Hello
I am trying to implement the Code Security Module. I have a few questions regarding it’s implementation.
- If I understand the literature correctly, the 128 bit key must be included in the boot loader in memory locations 0x3F 7FF8 – 0x3F 7FFF.
- Once the application code is loaded (Flashed) the security key (128 bit ) is stored in the DSP2803xSystemCtrl.c file and we use the csmUnlock(); function to compare what is written in the Flash to what is stored in the DSP2803xSystemCtrl.c file. Is this correct?
The functions in the written in the literature do not make sense The first function dspUnsecure(); goes through the flash memory where the key is stored and compares it to a variable named "temp" Then it assigns the CSM registers values. Shouldn't this be checking the memory with the CSM values?
void dspUnsecure (void)
{
volatile int *CSM = (volatile int *)0x000AE0; //CSM register file
volatile int *PWL = (volatile int *)0x003F7FF8; //Password location
volatile int tmp;
int I;
// Read the 128-bits of the password locations (PWL)
// in flash at address 0x3F 7FF8 - 0x3F 7FFF
// 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.
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
EDIS;
}
Nexwe have a secure function dspSecure(); which reassigns a new value to CSMCR pointer which was 0x00AEF and now is 0x8000 I do not understand what it is doing. Is it assigning a new passcode?
Here is the code
void dspSecure (void)
{
volatile int *CSMSCR = 0x00AEF; //CSMSCR register
//Set FORCESEC bit
EALLOW; //CSMSCR register is EALLOW protected.
*CSMSCR = 0x8000;
EDIS;
}
Is writing the wrong code the method used to secure the DSP?
Thanks