[活动专区] 【AT-START-F425测评】4、获取MCU96位唯一ID、FLASH大小

[复制链接]
 楼主| freeelectron 发表于 2022-3-4 18:15 | 显示全部楼层 |阅读模式
本帖最后由 freeelectron 于 2022-3-4 18:17 编辑

1、关于电子签名

设备的电子签名中包含的存储容量信息和96位的唯一设备ID。它被存储在片上闪存的信息模块 中。96位唯一设备ID对于每颗芯片而言都是唯一的。它可以用作序列号,或安全密钥的一部分, 等等。


2、96位唯一ID和Flash大小

659266221e5784d8f7.png
96位ID信息,地址依次为0x1FFFF7E8、0x1FFFF7EC、0x1FFFF7F0;

flash大小信息,地址依次0x1FFF F7E0;

设备出厂的时候,已经固化在mcu内部的,用户不可更改。


3、程序读取
  1. #define   STORAGE_INFO       0x1FFFF7E0
  2. #define   STORAGE_INFO_SRAM
  3. #define   STORAGE_INFO_FLASH

  4. #define   UNIQUE_ID     0x1FFFF7E8

  5. #define   UNIQUE_ID_0_31     0x1FFFF7E8
  6. #define   UNIQUE_ID_32_63    0x1FFFF7EC
  7. #define   UNIQUE_ID_64_95    0x1FFFF7F0

  8. struct McuInfo_t
  9. {
  10.         uint32_t Size;
  11.         uint8_t UniqueId[12];
  12. }McuInfo;



  13. void GetMcuInfo(void)
  14. {
  15.         McuInfo.Size=*(uint32_t*)STORAGE_INFO;
  16.         
  17.         printf("flash size=%dk\r\n\r\n",McuInfo.Size);
  18.         printf("unique id:[");
  19.         for(uint8_t i=0;i<12;i++)
  20.         {
  21.                 McuInfo.UniqueId[i]=*(uint8_t*)(UNIQUE_ID+i);
  22.                 printf(" %02x",McuInfo.UniqueId[i]);
  23.         }
  24.         printf("]\r\n");
  25. }

4、实验现象


103286221e6901f4f5.png

356356221e6ae8af96.png

可以看出,程序读取的和调试器调试读取的一致。




















yangxiaor520 发表于 2022-3-4 18:44 来自手机 | 显示全部楼层
学习了,谢谢分享。
 楼主| freeelectron 发表于 2022-3-4 19:11 | 显示全部楼层
yangxiaor520 发表于 2022-3-4 18:44
学习了,谢谢分享。

相互交流,共同进步
lzbf 发表于 2022-12-5 21:28 | 显示全部楼层
做数字签名可以,防伪也可以。              
maqianqu 发表于 2022-12-5 22:19 | 显示全部楼层
stm32也有唯一的ID。              
sesefadou 发表于 2022-12-6 15:30 | 显示全部楼层
这个不能自己写入数据的??              
sesefadou 发表于 2022-12-6 17:09 | 显示全部楼层
这个唯一id怎么获取数据?              
 楼主| freeelectron 发表于 2022-12-6 19:12 | 显示全部楼层
sesefadou 发表于 2022-12-6 15:30
这个不能自己写入数据的??

不行的,只读
Arvin2022 发表于 2022-12-11 21:41 | 显示全部楼层
想问下,内部flash如何实现存储配置数据?意思是程序烧录时就把配置参数一同烧录好的那种,本人小白,求教大神
 楼主| freeelectron 发表于 2022-12-12 08:35 | 显示全部楼层
Arvin2022 发表于 2022-12-11 21:41
想问下,内部flash如何实现存储配置数据?意思是程序烧录时就把配置参数一同烧录好的那种,本人小白,求教 ...

往bin文件特定的地址写入你想要存的数据即可
Arvin2022 发表于 2022-12-12 09:35 | 显示全部楼层
本帖最后由 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};
微信图片_20221212093625.png

通过ICP Programmer  读取出来的数据是按照32位间隔写入的。怎样才能让数据按照8位或者16位存入对应地址?   另外如果是字符串需要用什么指令?

再次感谢大神
hanter 发表于 2022-12-30 10:15 | 显示全部楼层
应该跟你定义的数据类型有关,int。你改成byte之类的试试看。
houjiakai 发表于 2023-1-5 16:34 | 显示全部楼层
后期可以利用这个做电子指令。              
jtracy3 发表于 2023-1-5 16:43 | 显示全部楼层
这个做防伪使用的吗?              
linfelix 发表于 2023-1-6 13:17 | 显示全部楼层
96位ID有什么作用              
mnynt121 发表于 2023-1-6 15:18 | 显示全部楼层
这个能不能动态修改这个ID呢?              

评论

不行的,改不了的  发表于 2023-1-17 09:04
sanfuzi 发表于 2023-2-4 11:43 | 显示全部楼层
这个唯一ID不能修改的吗?              
burgessmaggie 发表于 2023-2-4 11:52 | 显示全部楼层
这个可以,以后做加密狗应该可以。
youtome 发表于 2023-2-4 13:08 | 显示全部楼层
这个获取id有什么作用呢?》              
xiaoyaodz 发表于 2023-2-4 15:01 | 显示全部楼层
不能通过外部修改ID数据吗?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32/LoRa物联网:304350312

65

主题

785

帖子

11

粉丝
快速回复 返回顶部 返回列表