找回密码
 立即注册
查看: 168|回复: 13

请大佬帮忙EEPROM写入问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-02-09 20:25:58
已绑定手机

1

主题

5

回帖

19

积分

新手上路

积分
19
发表于 2026-2-3 15:17:35 | 显示全部楼层 |阅读模式
本人小白。但是最近AI编程比较火,所以请AI设计GPS相关的程序。

MCU使用的是STC32G12K128 64Pin模块,连接了串口GPS 3.3V供电。

GPS定位成功后,把最新经纬度写入EEPROM,下次开机,比较地点经纬度相同,就不用写入,直接使用。经纬度不同则写入最新的。

但是AI无论如何都无法使最新经纬度存储成功。每次系统等到GPS:OK 后关机再开机,还是初始默认的经纬度。

这里附上相关代码,请大佬斧正!


// 1. 新增寄存器定义
sfr IAP_ADDR2 = 0xC1; // 扩展地址寄存器 (高8位)
#define EEPROM_SECTOR0_ADDR 0xFE0000 // STC32G EEPROM 物理起始地址

// 2. 修复后的扇区擦除函数 (增加 IAP_ADDR2 设置)
void IAP_EraseSector(unsigned long addr) {
    bit ea_save = EA;
    EA = 0; // 关中断
    IAP_CONTR = 0x80; // 使能 IAP
    IAP_TPS = 11;     // 11MHz 时钟设置
    IAP_CMD = 3;      // 擦除命令
    IAP_ADDRL = (unsigned char)addr;
    IAP_ADDRH = (unsigned char)(addr >> 8);
    IAP_ADDR2 = (unsigned char)(addr >> 16); // 【关键修复】设置高8位 0xFE
    IAP_TRIG = 0x5A;
    IAP_TRIG = 0xA5;  // 触发
    _nop_();
    IAP_Disable();
    EA = ea_save;     // 恢复中断
}

// 3. 修复后的保存函数
void Save_Settings() {
    // ... 读取数据到 buffer ...
   
    // 擦除 0xFE0000 扇区
    IAP_EraseSector(EEPROM_SECTOR0_ADDR);
   
    // 写入数据
    for(i=0; i<512; i++) {
        if(g_eeprom_buf != 0xFF) {
            // IAP_ProgramByte 同样需要修复支持 unsigned long 地址
            IAP_ProgramByte(EEPROM_SECTOR0_ADDR + i, g_eeprom_buf);
        }
    }
    // ...
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:347
  • 最近打卡:2026-03-07 12:55:14

842

主题

1万

回帖

2万

积分

管理员

积分
22606
发表于 2026-2-3 15:25:35 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-02-09 20:25:58
已绑定手机

1

主题

5

回帖

19

积分

新手上路

积分
19
发表于 2026-2-3 15:37:40 | 显示全部楼层
神*** 发表于 2026-2-3 15:25
深圳国芯人工智能有限公司-实验箱

谢谢!感觉AI卡壳,已经把相关EEPROM的代码喂给AI,但是改来改去,一直就不能存储成功。
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:71
  • 最近打卡:2026-03-07 09:59:50
已绑定手机

4

主题

198

回帖

748

积分

高级会员

积分
748
发表于 2026-2-3 15:54:03 | 显示全部楼层
别管AI了,你看看手册及例程,地址不是从0开始吗,怎么会是0xFE0000,看成汇编了吗。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:243
  • 最近打卡:2026-03-06 08:17:29
已绑定手机

22

主题

622

回帖

2294

积分

金牌会员

积分
2294
发表于 2026-2-3 16:11:49 | 显示全部楼层
eeprom地址是从0开始的
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2026-03-07 07:47:09
已绑定手机

3

主题

21

回帖

269

积分

中级会员

积分
269
发表于 2026-2-3 16:35:37 | 显示全部楼层
STC8H参考手册
截图202602031634513509.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2026-03-07 07:47:09
已绑定手机

3

主题

21

回帖

269

积分

中级会员

积分
269
发表于 2026-2-3 16:42:34 | 显示全部楼层

楼主以MOVC的方式进行IAP操作,相当于在EEPROM_SECTOR0_ADDR 0xFE0000地址上又加了一个0xFE0000。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-02-09 20:25:58
已绑定手机

1

主题

5

回帖

19

积分

新手上路

积分
19
发表于 2026-2-3 19:26:23 | 显示全部楼层
lcws*** 发表于 2026-2-3 15:54
别管AI了,你看看手册及例程,地址不是从0开始吗,怎么会是0xFE0000,看成汇编了吗。 ...

我自己肯定不会写代码,只能依靠AI。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2026-02-09 20:25:58
已绑定手机

1

主题

5

回帖

19

积分

新手上路

积分
19
发表于 2026-2-3 19:29:27 | 显示全部楼层
Ros*** 发表于 2026-2-3 16:42
楼主以MOVC的方式进行IAP操作,相当于在EEPROM_SECTOR0_ADDR 0xFE0000地址上又加了一个0xFE0000。 ...

下载范例串口2发送命令读写EEPROM
烧录后,连接串口助手
关机再开机:显示
[2026-02-03 18:54:09.521]# RECV ASCII>


[2026-02-03 18:54:10.256]# RECV ASCII>
STC32G绯诲垪鍗曠墖鏈篍EPROM娴嬭瘯绋嬪簭锛屼覆鍙e懡浠よ缃涓?
W 0x000040 1234567890  --> 瀵?x000040鍦板潃鍐欏叆瀛楃1234567890.
R 0x000040 10          --> 瀵?x000040鍦板潃璇诲嚭10涓瓧鑺傚唴瀹?

输入读命令:显示
[2026-02-03 18:54:18.998]# SEND ASCII>
R 0x000040 10

[2026-02-03 18:54:19.045]# RECV ASCII>
R 0x000040 10
璇诲嚭10涓瓧鑺傚唴瀹瑰涓?
1234567890


MCU可以验证范例,交给AI按照范例加入代码,已经按照0x000000写入,还是不行。
感谢回答。
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2026-03-07 07:47:09
已绑定手机

3

主题

21

回帖

269

积分

中级会员

积分
269
发表于 2026-2-3 20:32:01 | 显示全部楼层
vccb*** 发表于 2026-2-3 19:29
下载范例串口2发送命令读写EEPROM
烧录后,连接串口助手
关机再开机:显示

楼主的擦读写函数EEPROM_SECTOR0_ADDR 也相应更改了吗?   
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-7 16:50 , Processed in 0.117769 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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