电子签名存放在闪存存储器模块的系统存储区域,可以通过JTAG/SWD或者CPU读取。它所包
含的芯片识别信息在出厂时编写,用户固件或者外部设备可以读取电子签名
电子签名包括两个寄存器:1、存储器容量寄存器 2、产品唯一身份标识寄存器(96位)
闪存容量寄存器的基址是:0x1FFF F7E0
产品唯一身份标识寄存器(96位) 的基地址:0x1FFF F7E8
因此只要读出这四个地址内的数据,就能得到芯片ID和容量。
下面是获取芯片ID的函数,读出ID放到一个数组中:
//读ID
void GetID(void)
{
ChipID[0] = *(__IO u32 *)(0X1FFFF7F0);
ChipID[1] = *(__IO u32 *)(0X1FFFF7EC);
ChipID[2] = *(__IO u32 *)(0X1FFFF7E8);
}
//读容量
uint_16 GetChipAmount(void)
{
return *(__IO u16 *)(0X1FFFF7E0);
}
最后串口显示:
printf("\r\n芯片ID: %X %X %X\r\n",ChipID[0],ChipID[1],ChipID[2]);
printf("\r\n芯片flash大小: %dK \r\n", GetChipAmount());
当然,例行性的东西是不能忘的: