1、基本描述
在STM32的全系列MCU中均有一个96位的唯一设备标识符。在ST的相关资料中,对其功能的描述有3各方面:
用作序列号(例如 USB 字符串序列号或其它终端应用程序)
在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码的安全性
激活安全自举过程等
在资料中对其特性的描述是:96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远不能改变这些位。96 位的唯一设备标识符也可以以单字节/半字/字等不同方式读取,然后使用自定义算法连接起来。
想要读取唯一ID,就需要知道它的存储地址,在不同系列的MCU中地址是有差别的,我们查询了部分MCU的资料并将其总结如下:
就STM32L151为例获取芯片的UID和flash大小信息代码如下:
/**
* @brief get MCU info.
* @param para addr. & length
* @retval True means OK
*/
static uint8_t CLI_MCU_Info(void *para, uint8_t len)
{
uint16_t flash_size;
uint32_t MAC_buff[3];
/* FLASH size */
flash_size = *(__IO uint16_t *)(0x1FF8004C);
PRINTF("Flash size: %d KB\r\n", flash_size);
/* ID */
MAC_buff[0] = *(__IO uint32_t*)(0x1FF80050);
MAC_buff[1] = *(__IO uint32_t*)(0x1FF80054);
MAC_buff[2] = *(__IO uint32_t*)(0x1FF80058);
PRINTF("UID(hex): %02X-%02X-%02X\r\n", MAC_buff[0], MAC_buff[1], MAC_buff[2]);
return True;
}
执行后,打印效果为:
如果STM32应用程序中需要用到芯片的flash信息和UID信息的,可出参考这这方式读取使用。