STM32---设备电子签名

tech2025-05-13  10

简介

电子签名存储在 Flash 区。可以使用 JTAG/SWD 或 CPU 对其进行读取。它包含出厂前编程的标识数据,这些标识数据允许用户固件或其它外部设备将其接口与 STM32F4xx 微控制器的特性自动匹配。

唯一设备 ID 寄存器(96 位)

唯一设备标识符最适合:

用作序列号(例如 USB 字符串序列号或其它终端应用程序)在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以提高 Flash 中代码的安全性激活安全自举过程等

96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远不能改变这些位。

96 位的唯一设备标识符也可以以单字节/半字/字等不同方式读取,然后使用自定义算法连接起来。 第一个32位ID的存储地址是:0x1FFF 7A10 第二个32位ID的存储地址是:0x1FFF 7A14 第三个32位ID的存储地址是:0x1FFF 7A18

Flash 大小

可以根据上图的图片看出,芯片Flash的大小存储的地址是0x1FFF 7A22

代码

typedef struct //芯片信息 { u16 flash_size; //芯片flash大小! u32 IC_ID[3]; //芯片96位唯一ID }IC_INFO; IC_INFO IC_info; /************************************************ 函数名称 : IC_Information 功 能 : 查询唯一ID和Flash信息 参 数 : 无 返 回 值 : 无 作 者 : WGD 时 间 : 2020年9月3日 备 注 : 无 *************************************************/ void IC_Information(void) { IC_info.flash_size = *(u16 *)(0x1FFF7A22); IC_info.IC_ID[0] = *(u32 *)(0x1FFF7A10); IC_info.IC_ID[1] = *(u32 *)(0x1FFF7A14); IC_info.IC_ID[2] = *(u32 *)(0x1FFF7A18); printf("flash is 0x%X KB\r\n",IC_info.flash_size); printf("ID is 0x%X--0x%X--0x%X\r\n",IC_info.IC_ID[0],IC_info.IC_ID[1],IC_info.IC_ID[2]); } //将该函数进行声明之后 //在main中运行结果如下

总结

最后总结一下关于各型号单片机的FLASH地址和96位唯一ID地址

最新回复(0)