[入门教程] 如何读取 96-bit唯一ID号?

[复制链接]
4147|10
 楼主| YDMCP 发表于 2012-12-4 15:28 | 显示全部楼层 |阅读模式
如何读取 96-bit唯一ID号?
wjsjdeng 发表于 2012-12-4 18:45 | 显示全部楼层
Enable_Write_Flash();
FMC_ReadUID(0,&uid);       
Disable_Write_Flash();

int32_t FMC_ReadUID(int index, uint32_t * u32data)
{
        FMC->u32ISPCMD = 0x4;

        FMC->ISPADR        = 0x04 * index;

        FMC->ISPTRG.ISPGO = 1;
        while (FMC->ISPTRG.ISPGO);
        if (FMC->ISPCON.ISPFF == 1)
        {
                FMC->ISPCON.ISPFF = 1;
        }
   
        *u32data = FMC->ISPDAT;

    return 0;
}

nuc130/140 c版,,

评分

参与人数 1威望 +3 收起 理由
YDMCP + 3 很给力!

查看全部评分

wjsjdeng 发表于 2012-12-4 18:47 | 显示全部楼层
Enable_Write_Flash();
FMC_ReadUID(0,&uid0);   
FMC_ReadUID(0,&uid1);   
FMC_ReadUID(0,&uid2);        
Disable_Write_Flash();

每次读一个字,32位,读三次.

评分

参与人数 1威望 +2 收起 理由
YDMCP + 2 赞一个!

查看全部评分

wjsjdeng 发表于 2012-12-4 18:48 | 显示全部楼层
mini51系列的好像bsp包里直接就有例子。

评分

参与人数 1威望 +2 收起 理由
YDMCP + 2 赞一个!

查看全部评分

 楼主| YDMCP 发表于 2012-12-4 19:33 | 显示全部楼层
谢谢 这就去看
缥缈九哥 发表于 2012-12-7 09:40 | 显示全部楼层
请到新唐 主页下载MINI51的BSP包,里面有详细例子如何读UID,UCID等。

评分

参与人数 1威望 +3 收起 理由
YDMCP + 3 很给力!

查看全部评分

 楼主| YDMCP 发表于 2012-12-7 10:29 | 显示全部楼层
感谢 缥缈九哥
缥缈九哥 发表于 2012-12-8 21:32 | 显示全部楼层
printf("\n\n");
    printf("+--------------------------------------------------------+\n");
    printf("|    Mini51 Flash Memory Controller Driver Sample Code   |\n");
    printf("+--------------------------------------------------------+\n");

    /* Read BS */
    printf("  Boot Mode ...................... ");
   
        if (DrvFMC_GetBootSelect() == E_FMC_APROM)
        printf("[APROM]\n");
    else
    {
        printf("[LDROM]\n");
        printf("  WARNING: The driver sample code must execute in AP mode!\n");
        goto lexit;
    }

        /* Read CID */
        i32Ret = DrvFMC_ReadCID(&cid);
        if (i32Ret == 0)
                printf("  CID ........................ [0x%08x]\n", cid);

        i32Ret = DrvFMC_ReadDID(&did);
        if (i32Ret == 0)
                printf("  CID ........................ [0x%08x]\n", did);

        /* Read Unique ID */
        i32Ret = DrvFMC_ReadUID(0, &uid);
        if (i32Ret == 0)
                printf("  Unique ID [31:0]............ [0x%08x]\n", uid);

        i32Ret = DrvFMC_ReadUID(1, &uid);
        if (i32Ret == 0)
                printf("  Unique ID [63:32]........... [0x%08x]\n", uid);

        i32Ret = DrvFMC_ReadUID(2, &uid);
        if (i32Ret == 0)
                printf("  Unique ID [95:64]........... [0x%08x]\n", uid);

        /* Read Data Flash base address */
        u32Data = DrvFMC_ReadDataFlashBaseAddr();
        printf("  Data Flash Base Address .... [0x%08x]\n", u32Data);
缥缈九哥 发表于 2012-12-8 21:32 | 显示全部楼层
在Software Library\MINI51BSP\NuvotonPlatform_Keil\Sample\Driver\Smpl_DrvFMC\Smpl_DrvFMC.c
 楼主| YDMCP 发表于 2012-12-9 06:41 | 显示全部楼层
再谢缥缈九哥

附带我的学习笔记
int32_t DrvFMC_Read_UID(uint32_t u32addr, uint32_t * u32data)
{
        FMC->ISPCMD.FCTRL = 4;          //命令字
        FMC->ISPCMD.FCEN = 0;
        FMC->ISPCMD.FOEN = 0;

     FMC->ISPADR        = u32addr;

        FMC->ISPDAT        = 0;
        FMC->ISPTRG.ISPGO = 1;   
        __ISB();
        while (FMC->ISPTRG.ISPGO);

        if (FMC->ISPCON.ISPFF == 1)
        {
                FMC->ISPCON.ISPFF = 1;
                return E_DRVFMC_ERR_ISP_FAIL;
        }
       
        *u32data = FMC->ISPDAT;
        return 0;
}

DrvFMC_Read_UID(0x0, &data);
datax[0]=data;
DrvFMC_Read_UID(0x4, &data);
datax[1]=data;
DrvFMC_Read_UID(0x8, &data);
datax[2]=data;
缥缈九哥 发表于 2012-12-15 11:01 | 显示全部楼层
很好。有回报。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

402

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部