stm32 unique device id (UDID)
2016-10-11 14:30
381 查看
stm32l系列的和STm32F系列的不同
stm32L1的参考如下链接;
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSTM32L162%20-%20unique%20device%20id%2c%20address%20offset&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=355
STM32L151RCT6 :
//0x1FF800D0,0x1FF800D4,0x1FF800E4
uint32_t GetBikeID(void)
{
uint32_t CpuID[3],BikeID;
//获取CPU唯一ID
CpuID[0] = *(uint32_t*)(0x1FF800D0);
CpuID[1] = *(uint32_t*)(0x1FF800D4);
CpuID[2] = *(uint32_t*)(0x1FF800E4);
//加密算法,很简单的加密算法
BikeID =(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
return BikeID;
}
【转载请注明出处: blog.csdn.net/lanmanck】
注意,CPU ID和Unique ID对ST来讲是不同的定义,CPU ID是CortexM3自带的,复位值是一致的,在PM0056.pdf中有定义说明。
Unique ID是每个芯片的不同ID,在RM0008.PDF中定义,像F103就在30.2节中定义。
Flash size register是芯片的Flash大小,在RM0008.PDF中定义,像F103就在30.1中定义。
可以推理,如果知道了Flash大小,就可以根据手册来推出Page的大小了,所以就不要找page size register了,没有这个专门的寄存器。
要注意的是,L15x系列的地址基址和F103不一样,要参考对应的手册。
产品唯一的身份标识非常适合:
● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
● 用来激活带安全机制的自举过程
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。
基地址:0x1FFF F7E8
每个CPU 出厂的时候都
配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......
static u32 CpuID[3];
static u32 Lock_Code;
void GetLockCode(void)
{
//获取CPU唯一ID
CpuID[0]=*(vu32*)(0x1ffff7e8);(stm32f1系列)
CpuID[1]=*(vu32*)(0x1ffff7ec);
CpuID[2]=*(vu32*)(0x1ffff7f0);
//加密算法,很简单的加密算法
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
}
然后再用上次所用的 FLASH_ProgramWord(LOCK_ADDR,Lock_Code); 写到FLASH 的某个角落就好了,然后再在程序中验证这个值是否正确。感觉ID的调取很是方便倒是加密算法让人头痛,当然了要是把MD5移植过来应该不是太难。现在市场中这么多的廉价J-link还不是中国牛人xxx.
stm32L1的参考如下链接;
https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex_mx_stm32%2fSTM32L162%20-%20unique%20device%20id%2c%20address%20offset&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=355
Yes, but the L15x parts are different, and the Unique# has a hole in it. https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=%2Fpublic%2FSTe2ecommunities%2Fmcu%2FLists%2Fcortex_mx_stm32%2FUnique%20Device%20ID%20not%20unique!&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B¤tviews=249 0x1FF80050,0x1FF80054,0x1FF80064 low/medium devices 0x1FF800D0,0x1FF800D4,0x1FF800E4 medium+/high devices |
//0x1FF800D0,0x1FF800D4,0x1FF800E4
uint32_t GetBikeID(void)
{
uint32_t CpuID[3],BikeID;
//获取CPU唯一ID
CpuID[0] = *(uint32_t*)(0x1FF800D0);
CpuID[1] = *(uint32_t*)(0x1FF800D4);
CpuID[2] = *(uint32_t*)(0x1FF800E4);
//加密算法,很简单的加密算法
BikeID =(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
return BikeID;
}
【转载请注明出处: blog.csdn.net/lanmanck】
注意,CPU ID和Unique ID对ST来讲是不同的定义,CPU ID是CortexM3自带的,复位值是一致的,在PM0056.pdf中有定义说明。
Unique ID是每个芯片的不同ID,在RM0008.PDF中定义,像F103就在30.2节中定义。
Flash size register是芯片的Flash大小,在RM0008.PDF中定义,像F103就在30.1中定义。
可以推理,如果知道了Flash大小,就可以根据手册来推出Page的大小了,所以就不要找page size register了,没有这个专门的寄存器。
要注意的是,L15x系列的地址基址和F103不一样,要参考对应的手册。
产品唯一的身份标识非常适合:
● 用来作为序列号(例如USB字符序列号或者其他的终端应用)
● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
● 用来激活带安全机制的自举过程
96位的产品唯一身份标识所提供的参考号码对任意一个STM32微控制器,在任何情况下都是唯一的。用户在何种情况下,都不能修改这个身份标识。
这个96位的产品唯一身份标识,按照用户不同的用法,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。
基地址:0x1FFF F7E8
每个CPU 出厂的时候都
配置的一个ID,96 位的.这个唯一码可以利用作软件加密.......
static u32 CpuID[3];
static u32 Lock_Code;
void GetLockCode(void)
{
//获取CPU唯一ID
CpuID[0]=*(vu32*)(0x1ffff7e8);(stm32f1系列)
CpuID[1]=*(vu32*)(0x1ffff7ec);
CpuID[2]=*(vu32*)(0x1ffff7f0);
//加密算法,很简单的加密算法
Lock_Code=(CpuID[0]>>1)+(CpuID[1]>>2)+(CpuID[2]>>3);
}
然后再用上次所用的 FLASH_ProgramWord(LOCK_ADDR,Lock_Code); 写到FLASH 的某个角落就好了,然后再在程序中验证这个值是否正确。感觉ID的调取很是方便倒是加密算法让人头痛,当然了要是把MD5移植过来应该不是太难。现在市场中这么多的廉价J-link还不是中国牛人xxx.
相关文章推荐
- STM32 Unique device ID reading
- Alternative to iPhone device ID (UDID)
- Android下获取设备唯一标识(UDID, DeviceID...)
- How to retrieve the Device Unique ID from android device
- LINK - WinRT: get unique device id
- Android下获取设备唯一标识(UDID, DeviceID...)
- 代替[UIDevice uniqueIdentifier]获取UDID的方法
- STM32 CPU ID,Unique ID,Flash size register的定义
- Is there a unique Android device ID?
- Android下获取设备唯一标识(UDID, DeviceID)
- Is there a unique Android device ID?
- Read UNIQUE ID and flash size method for stm32
- Android下获取设备唯一标识(UDID, DeviceID...)
- Android下获取设备唯一标识(UDID, DeviceID...)
- Android Unique Device ID
- 双卡双待 getDeviceId unique device ID IMEI 不唯一 会变问题
- 苹果官方给出的代替[UIDevice uniqueIdentifier]获取UDID的方法
- STM32F0唯一ID ,Unique device ID ,UID
- 读取STM32F207/40x的CPU唯一ID(Unique Device ID)号方法
- Android Unique Device ID