This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi Guys,
I just got my Tiva Launchpad to evaluate the MCU for a security project. For that I need a unique number on each silicon.
From the datasheet (page 522), there seems to exist a set of registers for that: UNIQUEID0..3. From the datasheet:
"These registers contain a unique 128-bit identifier that cannot be modified by the user. This value is unique to each individual die but is not a random value. This unique device identifier can be used to initiate secure boot processes or as a serial number for USB or other end applications."
Seems perfect for what I want, but when I try to search for these registers while debugging, they are not there.
It's weird, because the register defined on the datasheet's previous page (PREMAC) is the last one in the SYSCTL register area.
Hi Paulo,
I did a search for UNIQUEID0 at datasheet of Tiva microcontroller for Tiva Launchpad, and there are no UNIQUEID0 register.
What I know of is the Device Identification Register
- kel
Hello Paulo,
Can you please attach the data sheet of the device?
Regards
Amit
The part we are looking into for production is the tm4c129ekcpdt, but since we are using the launch pad right now, I'm attaching the datasheet for the part that is in the eval board.
Both datasheets have the uniqueid register (page 522 for the eval board part, page 529 for my part).
I'm also attaching a screenshot of the registers and memory address where the uniqueid should be
Hello Paulo,
Thanks for the DS. It is the latest one that has been uploaded (I forgot to refresh my copy and so would have others). The CCS works with a register XML which prevents viewing through debugger. However if you were to read these register in C code and print on the UART console you would be able to see them.
Let me see if I can give you a CCS Patch XML to view them through debugger
Regards
Amit
Ok, so I just declared them in my code like this:
#define SYSCTL_UNIQUEID0_R (*((volatile uint32_t *)0x400FEF20))
#define SYSCTL_UNIQUEID1_R (*((volatile uint32_t *)0x400FEF24))
#define SYSCTL_UNIQUEID2_R (*((volatile uint32_t *)0x400FEF28))
#define SYSCTL_UNIQUEID3_R (*((volatile uint32_t *)0x400FEF2C))
And then printf their values and I got different values for 2 different launch pads. From all 4 registers (16 bytes), they only differ by 6 bytes... here's what I got:
Launchpad1: 0x8000.6C88 0x0000.0000 0xD8DC.8010 0xE00C.8040
Launchpad2: 0x8000.6626 0x0000.0000 0xD8DC.8010 0x6409.8040
I know the datasheet says they are not random, but somehow doesn't seem right to have just a few bytes changing from unit to unit if one is planning to use this for security purposes.
Am I missing something?
Cheers
Hello Paulo,
Yes, that is expected. There would always be some bits that will be different any time you pick up a new device
Regards
Amit