jnyyz 发表于 2023-9-4 23:51:27

【已解决】STC32G关于ID号加密问题。

本帖最后由 STCAI 于 2023-9-6 08:51 编辑

原先在0xE100,0xE400位置有设置ID号加密,现在地址如何设置?现在还是原设置,已经不对了。

zhp 发表于 2023-9-5 09:09:38

如果你现在需要放在STC32G12K128的FF:E100H和FF:E400H
则ID号加密的地址需要设置为0x1E100和0x1E400

因为这个地址是内部FLASH的绝对物理地址
逻辑地址FE:0000对应绝对物理地址0x00000
逻辑地址FF:0000对应绝对物理地址0x10000

jnyyz 发表于 2023-9-5 09:50:43

zhp 发表于 2023-9-5 09:09
如果你现在需要放在STC32G12K128的FF:E100H和FF:E400H
则ID号加密的地址需要设置为0x1E100和0x1E400



如果这样,
#define ID_ADDR_Check1        0xE100        //定义ID_check1存放地址
#define ID_ADDR_Check2        0xE400        //定义ID_check2存放地址
是否也对应修改为
#define ID_ADDR_Check1        0x1E100        //定义ID_check1存放地址
#define ID_ADDR_Check2        0x1E400        //定义ID_check2存放地址

jnyyz 发表于 2023-9-5 10:01:48

BYTE        code *cptr;
BYTE        code *cptr1;
BYTE        code *cptr2;//这三个定义也要修改一下了,不然会保错。
有如下代码:
        cptr1 = ID_ADDR_Check1;
        cptr2 = ID_ADDR_Check2;


jnyyz 发表于 2023-9-5 12:01:31

这样修改完,编译没有报错,但ID检测还不对。

jnyyz 发表于 2023-9-5 12:03:55

本帖最后由 jnyyz 于 2023-9-6 08:51 编辑

int ID_CheckPro()
{
      int      idcki;
      BYTE SysIDtmp1;
      BYTE SysIDtmp2;
      cptr1 =(WORD)ID_ADDR_Check1;
      cptr2 =(WORD)ID_ADDR_Check2;
      for (idcki=0; idcki<7; idcki++)
    {
      SysID1= *cptr1++;
                        SysID2= *cptr2++;
                        
                        SysIDtmp1=SysID-1;
                        SysIDtmp1*=3;
                        SysIDtmp1/=4;
                        SysIDtmp1+=8;                        
                        SysIDtmp2=SysID*2;
                        SysIDtmp2/=3;
                        SysIDtmp2+=7;
                        SysIDtmp2*=7;
               
                        if(SysID1!=SysIDtmp1)
                        {
                              SendString1("Check id1 is error!\r\n");
                              return 0;
                        }      
                        if(SysID2!=SysIDtmp2)
                        {
                              SendString1("Check id2 is error!\r\n");
                              return 0;
                        }      
                }
                return 1;      
}

zhp 发表于 2023-9-5 14:24:33

jnyyz 发表于 2023-9-5 12:03
int ID_CheckPro()
{
        int        idcki;


只在下载软件中,0xe100才需要改为FLASH绝对地址0x1e100
在你自己的代码中,则需要使用逻辑地址进行访问,
例如:
*(BYTE code *)0xe100
或者
*(BYTE ecode *)0xffe100

jnyyz 发表于 2023-9-5 16:33:13

好的,我上机试一下。

jnyyz 发表于 2023-9-6 08:48:58

jnyyz 发表于 2023-9-5 16:33
好的,我上机试一下。

已经解决。
页: [1]
查看完整版本: 【已解决】STC32G关于ID号加密问题。