寻思 发表于 2021-6-10 13:13:00

STC8G2K64S4的EEPROM读写问题

如题,24Mhz
void IapIdle()
{
        IAP_CONTR = 0; //关闭 IAP 功能
        IAP_CMD = 0; //清除命令寄存器
        IAP_TRIG = 0; //清除触发寄存器
        IAP_ADDRH = 0x80; //将地址设置到非 IAP 区域
        IAP_ADDRL = 0;
}

char IapRead(int addr)
{
        char dat;
        IAP_CONTR = 0x81; //使能 IAP
        IAP_TPS = 24; //设置擦除等待参数 12MHz
        IAP_CMD = 1; //设置 IAP 读命令
        IAP_ADDRL = addr; //设置 IAP 低地址
        IAP_ADDRH = addr >> 8; //设置 IAP 高地址
        IAP_TRIG = 0x5a; //写触发命令(0x5a)
        IAP_TRIG = 0xa5; //写触发命令(0xa5)
        _nop_();
        dat = IAP_DATA; //读 IAP 数据
        IapIdle(); //关闭 IAP 功能

return dat;
}

void IapProgram(int addr, char dat)
{
        IAP_CONTR = 0x81; //使能 IAP
        IAP_TPS = 24; //设置擦除等待参数 12MHz
        IAP_CMD = 2; //设置 IAP 写命令
        IAP_ADDRL = addr; //设置 IAP 低地址
        IAP_ADDRH = addr >> 8; //设置 IAP 高地址
        IAP_DATA = dat; //写 IAP 数据
        IAP_TRIG = 0x5a; //写触发命令(0x5a)
        IAP_TRIG = 0xa5; //写触发命令(0xa5)
        _nop_();
        IapIdle(); //关闭 IAP 功能
}
void IapErase(int addr)
{
        IAP_CONTR = 0x81; //使能 IAP
        IAP_TPS = 24; //设置擦除等待参数 12MHz
        IAP_CMD = 3; //设置 IAP 擦除命令
        IAP_ADDRL = addr; //设置 IAP 低地址
        IAP_ADDRH = addr >> 8; //设置 IAP 高地址
        IAP_TRIG = 0x5a; //写触发命令(0x5a)
        IAP_TRIG = 0xa5; //写触发命令(0xa5)
        _nop_(); //
        IapIdle(); //关闭 IAP 功能
}
void main()
{
...............................................
        nz_shi = IapRead(0X0200); //P1=0x12
while()
{
        IapErase(0X0200);
        apProgram(0X0200, nz_shi);
}
}
求大佬帮我看下代码,搞不懂 STC8G2K64S4这个芯片的eeprom起始地址如何确定,是从0000开始吗。我设置0000也没成功。。
下载器里面设置eeprom为4K。

kundi 发表于 2021-6-10 13:46:28

意思是把全部的0x0200改为0x0000就不正常?

寻思 发表于 2021-6-10 13:47:13

kundi 发表于 2021-6-10 13:46
意思是把全部的0x0200改为0x0000就不正常?

不是,是都不正常。。。。0X0200, 0X0000都不正常。。。。

寻思 发表于 2021-6-10 14:39:12

已经解决,该程序应该没问题,供后面人参考。。。。其他地方逻辑错误

lb0857 发表于 2021-6-10 15:16:25

EEPROM读写问题解决了
过几天数据丢失问题会跟着你{:titter:}

lb0857 发表于 2021-6-10 15:16:53

成长过程就是这样吧痛, 并快乐着

zhuyi25762 发表于 2021-6-10 15:42:57

对于这种IAP型的我都怕了,我现在产品都备一片24C02加个二毛钱成本

zhuyi25762 发表于 2021-6-10 15:46:59

lb0857 发表于 2021-6-10 15:16
成长过程就是这样吧痛, 并快乐着

看来这问题不是我一个人碰到啊,,这种,我这下载还困难,,不知道原因。。常被调试骂。

现在什么内置的那些功能都不指望了,能加个外置的就加一个。。能买到就不错了,我就用他的IO高低电平功能

kundi 发表于 2021-6-10 16:04:09

我用stc8,没出现过EEPROM数据丢失的问题。

寻思 发表于 2021-6-10 19:13:11

lb0857 发表于 2021-6-10 15:16
EEPROM读写问题解决了
过几天数据丢失问题会跟着你

有这么多烦恼{:titter:} {:titter:}

lb0857 发表于 2021-6-10 19:36:03

kundi 发表于 2021-6-10 16:04
我用stc8,没出现过EEPROM数据丢失的问题。

一定是摸索了许多经验或者硬件上面下足功夫了吧   

bluerain 发表于 2021-6-10 20:37:27

STC8F, 8H没发现丢失问题。

小李非刀 发表于 2021-6-16 17:55:54

不管下载时设置多大的EEPROM,都是从0x0000开始访问。

士多啤配炸鸡 发表于 2021-7-8 23:54:46

bluerain 发表于 2021-6-10 20:37
STC8F, 8H没发现丢失问题。

我已经遇到了。。 异常关机下,EEPROM里面经常存的数据不对。。。

bluerain 发表于 2021-7-9 00:57:32

士多啤配炸鸡 发表于 2021-7-8 23:54
我已经遇到了。。 异常关机下,EEPROM里面经常存的数据不对。。。

你一个扇区存的字节多了没做异常处理吧?我一个扇区只存一个字节。
页: [1]
查看完整版本: STC8G2K64S4的EEPROM读写问题