设备电子签名
设备的电子签名中包含的存储容量信息和96位的唯一设备ID。96位唯一设备ID对于每颗芯片而言都是唯一的。它可以用作序列号,或安全密钥的一部分等等。
在GD32F470寄存器手册的p50,51页,进行了记录说明。
这部分数据不允许用户修改,接下来展示如何使用串口将此数据打印出来。
static void printf_info(void)
{
uint32_t CPU_Sn0, CPU_Sn1, CPU_Sn2, CPU_Sn3;
CPU_Sn0 = *(__IO uint32_t *)(0x1FFF7A10); //设备唯一ID(96位/位阈)
CPU_Sn1 = *(__IO uint32_t *)(0x1FFF7A10 + 4);
CPU_Sn1 = *(__IO uint32_t *)(0x1FFF7A10 + 8);
CPU_Sn3 = *(__IO uint32_t *)(0x1FFF7A20); //存储容量信息
my_dbg("\nCPU: GD32F470ZGT6 主频:%dMHz", SystemCoreClock / 1000000);
my_dbg("UID = %08X %08X %08X", CPU_Sn0, CPU_Sn1, CPU_Sn2);
my_dbg("FLASH :%d Kbytes SRAM %d Kbytes", CPU_Sn3 >> 16, CPU_Sn3 & 0xFFFF);
}
my_dbg是我自定义的printf宏,可以自行修改为printf就ok了;
变量CPU_Sn3高16位存储的是flash容量,低16位存储的是sram容量。
串口打印信息如上,与官方的数据信息是相符的,到这里就把芯片的设备电子签名信息打印出来了。至于UID他是固定96位,每块gd32f470都是不一样的,由于我手头没有多余的梁山派,就没有进行性展示了,大家可以自行对比和我的id是否不一样。