打印
[STM8]

单片机ID

[复制链接]
465|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heweibig|  楼主 | 2021-4-7 23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的是STM8L052R8T6  想做芯片加密,在手册中没有找到对芯片唯一ID的介绍,也有人说这个芯片没有唯一ID,有知道麻烦告诉一下, 根据网上的资料读出来了12个字节的ID号,也不知道是不是正确的,地址是 0x4926

使用特权

评论回复
沙发
jlyuan| | 2021-4-7 23:03 | 只看该作者
你找几个芯片测一下,看看是不是每个都不同。

使用特权

评论回复
板凳
zwll| | 2021-4-7 23:10 | 只看该作者
如果有ID,手册肯定会提到的

使用特权

评论回复
地板
dingy| | 2021-4-7 23:12 | 只看该作者
如果有,你操作地址又对,应该可以

使用特权

评论回复
5
xxrs| | 2021-4-7 23:15 | 只看该作者

8不知道占几个字节,肯定不是12个字节

使用特权

评论回复
6
zhanghqi| | 2021-4-7 23:18 | 只看该作者
一般3个字节

使用特权

评论回复
7
jlyuan| | 2021-4-7 23:21 | 只看该作者
如果不是什么高深的东西,就用不到加密了。

使用特权

评论回复
8
juventus9554| | 2021-4-7 23:23 | 只看该作者
.读出ID号

#if defined(STM8S103)
     #define     ID_BaseAddress         (0x4865)
#else//  defined(STM8S105)
     #define     ID_BaseAddress         (0x48CD)
#endif
void GetUniqueID(unsigned char *p)
{
     unsigned char i;
     unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);   
     for(i=0;i!=12;i++){*p++=*pIDStart++;}
}



2.把读出的ID号生成其他数据。不一定就是12字节的!并保存在内部EEPROM。在这个模块准备2个函数.一个用于加密.一个用于解密

void StmWriteUniqueID(unsigned char Addr)
{
     unsigned char i;
     FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
     while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)FLASH_Unlock(FLASH_MEMTYPE_DATA);
     unsigned char *pEE=(unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+(u32)Addr);
     unsigned char *pIDStart=(unsigned char *)(ID_BaseAddress);
     for(i=0;i!=6;i++)//由12字节生成12*N个字节
    {
         *pEE++=第1种算法,商业原因.我的算法就不公开了.大家可以准备一个数组查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
         *pEE++=第2种算法,商业原因.我的算法就不公开了。大家可以准备一个数组查表
        while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);  
         。。。。
        第N种算法
    }              
}
//解密函数
unsigned char StmCheckUniqueID(unsigned char Addr)
3.主函数里面设置一个时间最好设置长一点。半个钟或其他,让人家难跟踪
    while(1)
     {
         其他任务...............
         /////////////////////////////////////////////////////////////////////////
          if((Flag&FLAG_CHECK_ID)==FLAG_CHECK_ID)
         {
             Flag&=~FLAG_CHECK_ID;
             if(StmCheckUniqueID(UniqueIDAddress)==1){IsIDCorrect=0x01;}//正确写入
            else{IsIDCorrect=0x00;}//错误写入      
         }        
         /////////////////////////////////////////////////////////////////////////
               其他任务...............
     }
         /////////////////////////////////////////////////////////////////////////


总结:
这样做还是能被**的。但对方已经很难跟踪了.
如果**者对芯片熟悉.他会根据ID号的地址!----毕竟芯片ID号的地址是固定的.找到对应的调用程序.加密时用到芯片ID号的地址。解密时也有用到芯片ID号的地址
所以只有对方熟.是能很快跟踪到加密/解密程序.而在解密程序入口就return出去!


这种方法已经很实用了.毕竟不是太专业的很难破.

使用特权

评论回复
9
heweibig|  楼主 | 2021-4-7 23:25 | 只看该作者
手册上没有找到在哪里有写

使用特权

评论回复
10
huangchui| | 2021-4-7 23:27 | 只看该作者
怀疑可能是没有

使用特权

评论回复
11
heweibig|  楼主 | 2021-4-7 23:29 | 只看该作者
想知道这块手册上在哪有介绍,目地是想确定这个芯片有没有这个ID序列号

使用特权

评论回复
12
yszong| | 2021-4-7 23:31 | 只看该作者

手册上没写就不保证是。

使用特权

评论回复
13
juventus9554| | 2021-4-7 23:36 | 只看该作者
应该是吧。

使用特权

评论回复
14
wangpe| | 2021-4-7 23:38 | 只看该作者
这个位置不可以修改的,你修改试试。这个位置是只读。

使用特权

评论回复
15
heweibig|  楼主 | 2021-4-7 23:40 | 只看该作者
和我一样,网上找的资料都是复制粘贴的

使用特权

评论回复
16
zhenykun| | 2021-4-7 23:42 | 只看该作者
根本没有提及在手册上的出处。

使用特权

评论回复
17
zwll| | 2021-4-7 23:44 | 只看该作者
STM8L Value Line是没有Unique ID的,如果有,也是因为用的是STM8L1x系列的Wafe

使用特权

评论回复
18
supernan| | 2021-4-7 23:46 | 只看该作者
但ST官方数据手册上是不会承认有这功能,用户自行使用自负。

使用特权

评论回复
19
zhanghqi| | 2021-4-7 23:48 | 只看该作者
就好像你用STM32F103C6用出64K Flash,STM32F101C8用出了USB和CAN外设一个道理。

使用特权

评论回复
20
heweibig|  楼主 | 2021-4-7 23:50 | 只看该作者

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

869

主题

13089

帖子

7

粉丝