zwubxzti 发表于 4 天前

请教如何读取AI8H1K17的唯一ID




首先,阅读数据数据手册,并没有得出明确答案,AI8H1K17到底是否支持CHIPID来读取唯一id。

另外,使用STC-isp带的demo,也没读取出id来,下面是我尝试从rom种读取id的代码:

void printf_deviceID()
{
        uchar flag;
        char *ID;
       
        ID = (char code *)0x43f9;
       
        printf("device ID is is : ");
        for(flag=0;flag<7;flag++){
                printf("0x%02bx\r\n", ID);
                //printf("0x%02bx\r\n", CBYTE);
        }
        printf("\r\n");
}
上面代码读取出来的7个字节都是0xff;

请问下,到底怎么读取AI8H1K17的内置ID




ercircle 发表于 4 天前

和8H1K08一个系列,没CHIPID,使用ISP加载重要参数读取ROM区,参考此例程(15W408是8K FLash,注意更改至1K17的17K Flash地址):
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=20799&pid=192751






zwubxzti 发表于 3 天前

ercircle 发表于 2025-11-3 17:54
和8H1K08一个系列,没CHIPID,使用ISP加载重要参数读取ROM区,参考此例程(15W408是8K FLash,注意更改至1K17 ...

你好,按照你的提示,仍然没有读取到AI8H1K17单片机的唯一id;


首先,按照你提供的demo,移植到我的工程中,代码如下:

#define ID_ADDR_ROM 0x43eb//存放自增ID

volatile bit remote_config_Enable = 1;

void printf_deviceID()
{
        uchar i;
        unsigned char code *ptr;
        ptr = ID_ADDR_ROM;
       
        for(i=0;i<21;i++){
                printf("%04X:%02bX\r\n",(ID_ADDR_ROM+i),*ptr);
                ptr++;
        }
}stc-isp工具勾选和打印日志,截图如下:


如上图所示,读取出来的数据全部都是FF呢,不知道什么原因,请继续帮忙跟进解决下。谢谢

ercircle 发表于 3 天前

zwubxzti 发表于 2025-11-4 08:34
你好,按照你的提示,仍然没有读取到AI8H1K17单片机的唯一id;




这是个IAP型号,末尾是EEPROM区,往前再减去EEPROM区大小试下



zwubxzti 发表于 3 天前

ercircle 发表于 2025-11-3 17:54
和8H1K08一个系列,没CHIPID,使用ISP加载重要参数读取ROM区,参考此例程(15W408是8K FLash,注意更改至1K17 ...

经过测试我又有了新的进展,由于程序初始化阶段,我对EEPROM扇区0进行了清零操作,导致读取ID那部分的数据得到的全部是FF;

我屏蔽掉对EEPROM扇区0的清零操作就能读取到ID了;

但是,我确实需要用EEPROM,这矛盾怎么解决?

ercircle 发表于 3 天前

zwubxzti 发表于 2025-11-4 08:46
经过测试我又有了新的进展,由于程序初始化阶段,我对EEPROM扇区0进行了清零操作,导致读取ID那部分的数 ...

先读取到RAM,清零后重新写入

乘风飞扬 发表于 3 天前

zwubxzti 发表于 2025-11-4 08:46
经过测试我又有了新的进展,由于程序初始化阶段,我对EEPROM扇区0进行了清零操作,导致读取ID那部分的数 ...

保留最后一个扇区的EEPROM空间不要使用,例如需要用0.5K空间存储数据
那么EEPROM空间可以设置1K,只擦写前0.5K空间,后面0.5K空间不要擦写。
页: [1]
查看完整版本: 请教如何读取AI8H1K17的唯一ID