找回密码
 立即注册
查看: 426|回复: 8

STC32G12K128 Eprom读写操作失败 !已解决

[复制链接]

该用户从未签到

1

主题

4

回帖

29

积分

新手上路

积分
29
发表于 2023-8-8 11:19:12 | 显示全部楼层 |阅读模式
我按照手册的例子,

#define MAIN_Fosc                12000000L        //主时钟


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


void IapProgram(uint addr, uchar dat)
{
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数30MHz
    IAP_CMD = 2;                                //设置IAP写命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_DATA = dat;                             //写IAP数据
          EA=0;
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
          EA=1;
    DisableEEPROM();                                  //关闭IAP功能
}
uchar IapRead(uint addr)
{
    uchar dat;

    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数30MHz
    IAP_CMD = 1;                                //设置IAP读命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
           EA=0;
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
                EA=1;
        dat = IAP_DATA;                             //读IAP数据
        
    DisableEEPROM();                                  //关闭IAP功能
    return dat;
}
void IapErase(uint addr)
{
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                              //设置等待参数30MHz
    IAP_CMD = 3;                                //设置IAP擦除命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
          EA=0;
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();  
          EA=1;
    DisableEEPROM();                                 //关闭IAP功能
}


void main()
{
        uchar i[5],j[5];
        initPort();
        Delay1ms(500);
        IapErase(EE_ADDRESS);
        Delay1ms(500);
        j[0]=IapRead(EE_ADDRESS);
        if(j[0]==0xFF)//如果正确,ok灯亮
                okLight=0;
        else
                falseLight=0;

       while(1);
}
以上为测试程序,但运行结果都是falseLight灯亮,检查发现,j[0]的值为0x00,显然与手册中所说不同,不知这是什么原因引起的?
回复 送花

使用道具 举报

该用户从未签到

1

主题

4

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2023-8-8 11:31:29 | 显示全部楼层
另外:我将程序改为如下:
uchar i[5],j[5];
        initPort();
       
        i[0]=0x01;
        i[1]=0x02;
        i[2]=0x03;
        EEPROM_SectorErase(EE_ADDRESS);
        EEPROM_write_n(EE_ADDRESS,i,3);
       
        EEPROM_read_n(EE_ADDRESS,j,3);
        if(j[2]==0x03)
                warnLight=0;
        else
                temptureLight=0;
  while(1);
写入3个不同的数据:0x01,0x02,0x03,再读出,结果是三个数据都是最后一个数据:0x03,请问楼主这是什么原因?
回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-8-8 13:16:30 来自手机 | 显示全部楼层
ISP烧录的时候要选择EEPROM大小。
如果是huge模式,需要在工程设置里面把那个ROM区开始位置和大小改一下
回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

4

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2023-8-8 17:06:33 | 显示全部楼层
熊仔 发表于 2023-8-8 13:16
ISP烧录的时候要选择EEPROM大小。
如果是huge模式,需要在工程设置里面把那个ROM区开始位置和大小改一下 ...

如何改呢?谢谢
回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
发表于 2023-8-8 17:44:40 | 显示全部楼层
新手最好参考实验箱的例子。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

1

主题

4

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2023-8-9 22:32:56 | 显示全部楼层
熊仔 发表于 2023-8-8 17:44
新手最好参考实验箱的例子。

我上面写的内容就是从试验箱中读写的
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    10 小时前
  • 签到天数: 141 天

    [LV.7]常住居民III

    27

    主题

    1338

    回帖

    4168

    积分

    论坛元老

    积分
    4168
    发表于 2023-8-10 09:31:24 | 显示全部楼层
    13808369317 发表于 2023-8-9 22:32
    我上面写的内容就是从试验箱中读写的

    看你写的代码与实验箱例程包里面的例子有所不同,所以建议最好先用实验箱里的例子测试。
    测试正常后再进行移植、修改,避免移植过程中出错导致功能不正常。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    4

    回帖

    29

    积分

    新手上路

    积分
    29
     楼主| 发表于 2023-8-10 18:08:47 | 显示全部楼层
    搞定了
    回复 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    14

    积分

    新手上路

    积分
    14
    发表于 2023-11-23 15:55:38 来自手机 | 显示全部楼层
    13808369317 发表于 2023-8-10 18:08
    搞定了

    楼主,我现在也遇到这个问题,存123进去,读出来全是3,你是咋解决的呀。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-15 18:59 , Processed in 0.068661 second(s), 61 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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