【AT-START-F425测评】4、获取MCU96位唯一ID、FLASH大小
本帖最后由 freeelectron 于 2022-3-4 18:17 编辑1、关于电子签名
设备的电子签名中包含的存储容量信息和96位的唯一设备ID。它被存储在片上闪存的信息模块 中。96位唯一设备ID对于每颗芯片而言都是唯一的。它可以用作序列号,或安全密钥的一部分, 等等。
2、96位唯一ID和Flash大小
96位ID信息,地址依次为0x1FFFF7E8、0x1FFFF7EC、0x1FFFF7F0;flash大小信息,地址依次0x1FFF F7E0;设备出厂的时候,已经固化在mcu内部的,用户不可更改。
3、程序读取#define STORAGE_INFO 0x1FFFF7E0
#define STORAGE_INFO_SRAM
#define STORAGE_INFO_FLASH
#define UNIQUE_ID 0x1FFFF7E8
#define UNIQUE_ID_0_31 0x1FFFF7E8
#define UNIQUE_ID_32_63 0x1FFFF7EC
#define UNIQUE_ID_64_95 0x1FFFF7F0
struct McuInfo_t
{
uint32_t Size;
uint8_t UniqueId;
}McuInfo;
void GetMcuInfo(void)
{
McuInfo.Size=*(uint32_t*)STORAGE_INFO;
printf("flash size=%dk\r\n\r\n",McuInfo.Size);
printf("unique id:[");
for(uint8_t i=0;i<12;i++)
{
McuInfo.UniqueId=*(uint8_t*)(UNIQUE_ID+i);
printf(" %02x",McuInfo.UniqueId);
}
printf("]\r\n");
}
4、实验现象
可以看出,程序读取的和调试器调试读取的一致。
学习了,谢谢分享。 yangxiaor520 发表于 2022-3-4 18:44
学习了,谢谢分享。
相互交流,共同进步{:smile:} 做数字签名可以,防伪也可以。 stm32也有唯一的ID。 这个不能自己写入数据的?? 这个唯一id怎么获取数据? sesefadou 发表于 2022-12-6 15:30
这个不能自己写入数据的??
不行的,只读 想问下,内部flash如何实现存储配置数据?意思是程序烧录时就把配置参数一同烧录好的那种,本人小白,求教大神 Arvin2022 发表于 2022-12-11 21:41
想问下,内部flash如何实现存储配置数据?意思是程序烧录时就把配置参数一同烧录好的那种,本人小白,求教 ...
往bin文件特定的地址写入你想要存的数据即可 本帖最后由 Arvin2022 于 2022-12-12 09:39 编辑
freeelectron 发表于 2022-12-12 08:35
往bin文件特定的地址写入你想要存的数据即可
感谢大神回复 我目前用的是这条语句,但是存储的数据是安好32位间隔,如图
int Temp[] __attribute__ ((section(".ARM.__at_0x08003C00"))) = {0x12, 0x23, 0x45, 0x67, 0x89, 0x10};
通过ICP Programmer读取出来的数据是按照32位间隔写入的。怎样才能让数据按照8位或者16位存入对应地址? 另外如果是字符串需要用什么指令?
再次感谢大神{:handshake:}
应该跟你定义的数据类型有关,int。你改成byte之类的试试看。 后期可以利用这个做电子指令。 这个做防伪使用的吗? 96位ID有什么作用 这个能不能动态修改这个ID呢? 这个唯一ID不能修改的吗? 这个可以,以后做加密狗应该可以。 这个获取id有什么作用呢?》 不能通过外部修改ID数据吗?
页:
[1]
2