找回密码
 立即注册
查看: 1352|回复: 3

读取全球唯一ID号,有三种方式,用哪种最好呢

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:193
  • 最近打卡:2025-06-28 08:36:03
已绑定手机

95

主题

990

回帖

2537

积分

超级版主

积分
2537
QQ
发表于 2023-2-23 14:13:16 | 显示全部楼层 |阅读模式
读取全球唯一ID好,有三种方式,用哪种最好呢-1.png

===有CHIP-ID的就从CHIP-ID中读,后续新产品只有这种手段了
热线19952583534
www.STCAI.com
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:193
  • 最近打卡:2025-06-28 08:36:03
已绑定手机

95

主题

990

回帖

2537

积分

超级版主

积分
2537
QQ
发表于 2023-2-23 14:13:36 | 显示全部楼层
有CHIPID的芯片必需从CHIPID读取(RAM与ROM不再存放)。没有CHIPID的芯片建议从ROM读取,因为RAM里面内容可能会被变量或者堆栈覆盖。
1.png
热线19952583534
www.STCAI.com
  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-06-28 08:04:30
已绑定手机

6

主题

30

回帖

188

积分

注册会员

积分
188
发表于 2025-6-10 14:12:36 | 显示全部楼层
国学*** 发表于 2023-2-23 14:13
有CHIPID的芯片必需从CHIPID读取(RAM与ROM不再存放)。没有CHIPID的芯片建议从ROM读取,因为RAM里面内容可 ...

是在下载时候读取吗
你先做了,再说话。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:578
  • 最近打卡:2025-06-28 00:12:02

11

主题

1203

回帖

5588

积分

论坛元老

积分
5588
发表于 2025-6-20 11:20:51 | 显示全部楼层
不是*** 发表于 2025-6-10 14:12
是在下载时候读取吗

可以用程序读取。



读取全球唯一 ID 号
STC32G12K128
11.5.2 读取全球唯一 ID 号

//测试工作频率为 11.0592MHz
//#include "stc8h.h"
#include "stc32g.h"                    //头文件见下载软件
#include "intrins.h"
#define FOSC 11059200UL                //定义为无符号长整型,避免计算溢出
#define BRT (65536 - (FOSC / 115200+2) / 4)
                                       //加 2 操作是为了让 Keil 编译器
                                       //自动实现四舍五入运算
#define ID_ADDR (&CHIPID0)
bit busy;
void UartIsr() interrupt 4
{
        if (TI)
        {
                TI = 0;
                busy = 0;
        }
        if (RI)
        {
                RI = 0;
        }
}
void UartInit()
{
        SCON = 0x50;
        TMOD = 0x00;
        TL1 = BRT;
        TH1 = BRT >> 8;
        TR1 = 1;
        T1x12 = 1;
        busy = 0;
}
void UartSend(char dat)
{
        while (busy);
        busy = 1;
        SBUF = dat;
}
void main()
{
        char i;
        EAXFR = 1;                         //使能访问 XFR,没有冲突不用关闭
        CKCON = 0x00;                      //设置外部数据总线速度为最快
        WTST = 0x00;                       //设置程序代码等待参数,
                                           //赋值为 0 可将 CPU 执行程序的速度设置为最快

        P0M0 = 0x00;        P0M1 = 0x00;
        P1M0 = 0x00;        P1M1 = 0x00;
        P2M0 = 0x00;        P2M1 = 0x00;
        P3M0 = 0x00;        P3M1 = 0x00;
        P4M0 = 0x00;        P4M1 = 0x00;
        P5M0 = 0x00;        P5M1 = 0x00;
        UartInit();
        ES = 1;
        EA = 1;
        for (i=0; i<7; i++)
        {
                UartSend(ID_ADDR);
        }
        while (1);
}







10.5.4 读取全球唯一 ID 号 (从 CHIPID 中读取)
C 语言代码
//测试工作频率为 11.0592MHz
#include "ai8h.h"
#include "intrins.h"
#define FOSC 11059200UL
#define BRT (65536 - (FOSC / 115200+2) / 4)
//加 2 操作是为了让 Keil 编译器
//自动实现四舍五入运算
#define CPUIDBASE 0xfde0
#define ID_ADDR ((unsigned char volatile xdata *)(CPUIDBASE + 0x00))
bit busy;
void UartIsr() interrupt 4
{
        if (TI)
        {
                TI = 0;
                busy = 0;
        }
        if (RI)
        {
                RI = 0;
        }
}
void UartInit()
{
        SCON = 0x50;
        TMOD = 0x00;
        TL1 = BRT;
        TH1 = BRT >> 8;
        TR1 = 1;
        AUXR = 0x40;
        busy = 0;
}
void UartSend(char dat)
{
        while (busy);
        busy = 1;
        SBUF = dat;
}
void main()
{
        char i;
        P_SW2 |= 0x80;                     //使能访问 XFR,没有冲突不用关闭
        P0M0 = 0x00;        P0M1 = 0x00;
        P1M0 = 0x00;        P1M1 = 0x00;
        P2M0 = 0x00;        P2M1 = 0x00;
        P3M0 = 0x00;        P3M1 = 0x00;
        P4M0 = 0x00;        P4M1 = 0x00;
        P5M0 = 0x00;        P5M1 = 0x00;
        UartInit();
        ES = 1;
        EA = 1;
        for (i=0; i<7; i++)
        {
                UartSend(ID_ADDR);
        }
        while (1);
}






12.5.2 读取全球唯一 ID 号
//测试工作频率为 11.0592MHz
#include "Ai8051U.H"                        //头文件见下载软件
#include "intrins.h"                        //使用_nop_()函数所必须要包含的头文件,
//否则延时函数中调用的_nop_()函数没有被头文件引用过来,会导致编译器找不到这个而函数而报错。

#define FOSC 11059200UL                     //定义为无符号长整型,避免计算溢出
#define BRT (65536 - (FOSC / 115200+2) / 4)
                                            //加 2 操作是为了让 Keil 编译器
                                            //自动实现四舍五入运算
#define ID_ADDR (&CHIPID0)
bit busy;
void UartIsr() interrupt 4
{
        if (TI)
        {
                TI = 0;
                busy = 0;
        }
        if (RI)
        {
                RI = 0;
        }
}
void UartInit()
{
        SCON = 0x50;
        TMOD = 0x00;
        TL1 = BRT;
        TH1 = BRT >> 8;
        TR1 = 1;
        T1x12 = 1;
        busy = 0;
}
void UartSend(char dat)
{
        while (busy);
        busy = 1;
        SBUF = dat;
}
void main()
{
        char i;
        EAXFR = 1;                              //允许访问扩展的特殊寄存器,XFR
                                                //(32 位模式请使用这句,注释下一句)
        // P_SW2 |= 0x80;                       //允许访问扩展的特殊寄存器,XFR
                                                //(8 位模式请使用这句,注释上一句)
        WTST = 0;                               //设置取程序代码等待时间,
                                                //赋值为 0 表示不等待,程序以最快速度运行
        CKCON = 0;                              //设置访问片内的 xdata 速度,
                                                //赋值为 0 表示用最快速度访问,不增加额外的等待时间
        P0M0 = 0x00;        P0M1 = 0x00;
        P1M0 = 0x00;        P1M1 = 0x00;
        P2M0 = 0x00;        P2M1 = 0x00;
        P3M0 = 0x00;        P3M1 = 0x00;
        P4M0 = 0x00;        P4M1 = 0x00;
        P5M0 = 0x00;        P5M1 = 0x00;
        UartInit();
        ES = 1;
        EA = 1;
        for (i=0; i<7; i++)
        {
                UartSend(ID_ADDR);
        }
        while (1);
}


回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-28 12:00 , Processed in 1.147269 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表