打印
[文档下载]

新唐M05XBN全球96位唯一ID码读取方法

[复制链接]
2312|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
断桥残雪_98|  楼主 | 2015-8-27 22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
:loveliness:最近我搞软件加密时用到全球唯一ID码时,发现不知道从何读取,可是发现我的烧录器上可以读出来,我想想这个芯片肯定有ID码,于是开始查资料,找来找去,没有发现有明确的读取方法,经过几天的资料查询,终于找到了,这是个好东西,现在来分享给大家,希望对学这个的大侠们有所帮助,

RED_UID.rar

213.02 KB

沙发
捉虫天师| | 2015-8-28 07:43 | 只看该作者
#include "SmartM_M0.h"


#define PAGE_SIZE               512


#define FLASH_START_ADDRESS          0x00000000
#define FLASH_SIZE              0x00010000

/****************************************
*函数名称:ISPTriger
*输    入:无
*输    出:无
*功    能:ISP执行
******************************************/
VOID ISPTriger(VOID)
{
    ISPTRG |= ISPGO;
    while((ISPTRG&ISPGO) == ISPGO);
}
/****************************************
*函数名称:ISPEnable
*输    入:无
*输    出:无
*功    能:ISP使能
******************************************/
VOID ISPEnable(VOID)
{
    ISPCON |= ISPEN|CFGUEN|LDUEN;
}
/****************************************
*函数名称:ISPDisable
*输    入:无
*输    出:无
*功    能:ISP禁用
******************************************/
VOID ISPDisable(VOID)
{
    ISPCON &= ~(ISPEN|CFGUEN|LDUEN);
}
/****************************************
*函数名称:FMC_Erase
*输    入:unPage 页地址
*输    出:无
*功    能:数据区擦除
******************************************/
VOID FMC_Erase(UINT32 unAddr)
{
    PROTECT_REG(
       
    ISPEnable();
    ISPCMD = PAGE_ERASE;

    ISPADR = unAddr;
    ISPTriger();

    ISPDisable();     

    )       
}
/****************************************
*函数名称:FMC_Write
*输    入:pucBuf 写数据缓冲区
                      unSize 写数据大小
*输    出:无
*功    能:数据区写
******************************************/
VOID FMC_Write(UINT32 unAddr,UINT8 *pucBuf,UINT32 unSize)
{
    UINT32 i;   
    PROTECT_REG(
    ISPEnable();
    ISPCMD = PROGRAM;

                for(i=0; i<unSize; i+=4)
                {
                                ISPADR = (i+unAddr);
                                ISPDAT = *(UINT32 *)(&pucBuf[i]);
                                ISPTriger();
                               
                }

    ISPDisable();   

    )               
}
/****************************************
*函数名称:FMC_Read
*输    入:pucBuf 读数据缓冲区
                  unSize 读数据大小
*输    出:无
*功    能:数据区读
******************************************/
VOID FMC_Read(UINT32 unAddr,UINT8 *pucBuf,UINT32 unSize)
{
    UINT32 i;
    PROTECT_REG(
    ISPEnable();

    ISPCMD = READ;

    for(i=0; i<unSize; i+=4)
    {
            ISPADR = (i+unAddr);
      ISPTriger();
                *(UINT32 *)(&pucBuf[i])=ISPDAT;
    }
   
    ISPDisable();   

    )
}

UINT32 Read_UID(UINT32 unAddr)
{
    UINT32 UIDX;
    PROTECT_REG(
    ISPEnable();

    ISPCMD = READ_UID;

            ISPADR =unAddr;
      ISPTriger();
                *(UINT32 *)(&UIDX)=ISPDAT;
   
    ISPDisable();   

    )
        return  UIDX;
}



/****************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主体
******************************************/
INT32 main(VOID)
{
          /*1.MCU频率初始化,频率为50MHz*/
          McuInit(MCU_FREQUENCY);
          /*2.串口初始化,波特率为115200bps*/
                UartInit(115200);
          Delayms(1000);
          while(1)
                {                       
    printf("\r\nCPU ID = %X\r\n",Read_UID(0X00));//全球唯一ID码64-96位
    printf("\r\nCPU ID = %X\r\n",Read_UID(0X04));//全球唯一ID码32-64位
    printf("\r\nCPU ID = %X\r\n",Read_UID(0X08));//全球唯一ID码0-32位
                                 Delayms(1000);                       
                               
                }
}


使用特权

评论回复
板凳
捉虫天师| | 2015-8-28 07:45 | 只看该作者
代码结构性很强,短小精悍,可以弄个头文件,到时候用了,直接调用这个函数就行了,可以用于芯片加密。

使用特权

评论回复
地板
mana1199| | 2015-10-23 17:30 | 只看该作者
:):hug:

使用特权

评论回复
5
天灵灵地灵灵| | 2015-10-23 22:14 | 只看该作者
  • UINT32 Read_UID(UINT32 unAddr)
  • {
  •     UINT32 UIDX;
  •     PROTECT_REG(
  •     ISPEnable();
  •     ISPCMD = READ_UID;
  •             ISPADR =unAddr;
  •       ISPTriger();
  •                 *(UINT32 *)(&UIDX)=ISPDAT;
  •     ISPDisable();
  •     )
  •         return  UIDX;
  • }
  • 就这一个函数啊,怎么前面那几个是干啥的,,血多了?

使用特权

评论回复
6
wahahaheihei| | 2015-10-24 13:57 | 只看该作者
FMC这个函数相关的都是什么东西啊,没有看到在程序里使用锕

使用特权

评论回复
7
huangcunxiake| | 2015-10-25 14:51 | 只看该作者
    printf("\r\nCPU ID = %X\r\n",Read_UID(0X00));//全球唯一ID码64-96位
    printf("\r\nCPU ID = %X\r\n",Read_UID(0X04));//全球唯一ID码32-64位
    printf("\r\nCPU ID = %X\r\n",Read_UID(0X08));//全球唯一ID码0-32位
----------------------
怎么先读高位啊。这排列顺序是如何的。

使用特权

评论回复
8
643757107| | 2015-10-25 14:53 | 只看该作者
应该是高位在前的排列方法,楼上的。

使用特权

评论回复
9
断桥残雪_98|  楼主 | 2015-10-29 12:13 | 只看该作者
wahahaheihei 发表于 2015-10-24 13:57
FMC这个函数相关的都是什么东西啊,没有看到在程序里使用锕

那些是官方的库里的,只要调用就好了

使用特权

评论回复
10
断桥残雪_98|  楼主 | 2015-10-29 12:15 | 只看该作者
天灵灵地灵灵 发表于 2015-10-23 22:14
  • UINT32 Read_UID(UINT32 unAddr)
  • {
  •     UINT32 UIDX;

  • 这些是要相互调用的

    使用特权

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

    本版积分规则

    5

    主题

    39

    帖子

    0

    粉丝