找回密码
 立即注册
查看: 104|回复: 5

继续研究AI8051U的32位模式的EEPROM

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2026-07-05 08:36:44
已绑定手机

81

主题

318

回帖

2479

积分

金牌会员

积分
2479
发表于 2026-5-14 17:06:14 | 显示全部楼层 |阅读模式
很奇怪的现象

同样的代码,8位下是没问题的,32位就全乱了,取得变量的地址时需要-1才行,感觉对于INT型的地址8位指向高字节,32位指向低字节
为了得到连续的地址方便存储,几个数组的数据是用_at_指定绝对地址
在产生EEPROM数据的文件里面也用这个方法,结果出现一个问题,前边3个数组的数据都是对的,最后一个却不对。
琢磨半天,把这几个数组放到一个结构体里面,这样就直接获得连续地址了,在读的时候
read(0x00,(uchar*)0x10,(uchar*)&myeep-1,sizeof(myeep));

一样还是得-1,否则也一样,但是,最后那个数组的数据对了。
有点乱,看起来之前都是自学的,很多东西都是用到才研究的。基础不行啊。
另外一个请教,sizeof();的问题,无论8位还是32位模式,取得的都是字节数吗?比如sizeof(int),在8位模式是2,在32模式也是2还是1?

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2026-07-05 08:36:44
已绑定手机

81

主题

318

回帖

2479

积分

金牌会员

积分
2479
发表于 2026-5-14 17:40:15 | 显示全部楼层
尝试只用一个数组读写,发现最后一个INT的低字节读出来的是0
需要在read的最后那个size参数那里+1,才能得到正确的数据
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2026-07-05 08:36:44
已绑定手机

81

主题

318

回帖

2479

积分

金牌会员

积分
2479
发表于 2026-5-14 18:21:49 | 显示全部楼层
但是我问了百度,C51和C251都是低字节在前并且都是指向低字节的
但是在工具软件里面打开的EEPROM文件,观察内容,8位模式和32位模式下的内容是一样的
数据是这样的 QQ20260514-181443.png
生成的文件打开的内容 QQ20260514-181136.png
从210地址开始读8个字节,结果就是arr[3]就等于0x1200,需要读9个字节才会等于0x1234,
如果在传输内存地址的时候不-1,那就有一个字节的错位,得到的数据全是错误的。需要读9个字节应该就是因为地址-1的问题吧。
请教前辈,这到底为啥?
8位模式下都是正常使用的代码。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2026-07-05 08:36:44
已绑定手机

81

主题

318

回帖

2479

积分

金牌会员

积分
2479
发表于 2026-5-14 19:43:16 | 显示全部楼层
无论怎么搞都差一个字节
现在就是读的时候从0x11开始,写的时候从0x10开始
这样数组的后面数据是对的,但是第一个成员的数据就错了,截图里面,第一个成员是0000,但是读出来的数据是5680
  1. void read(uchar sq,unsigned char * eadd,unsigned char * nbadd,unsigned char size){
  2. unsigned char i = size;
  3. EA = 0;
  4. while(i--){
  5.         IAP_TPS = 33;
  6.         IAP_ADDRE = 0;
  7.         IAP_ADDRH = sq;                          //0x10=使用第9扇区
  8.         IAP_ADDRL = (char*)eadd;
  9.         IAP_CONTR = 0x80|IAP_WAIT_TIME;                        //22M
  10.         IAP_CMD   = IAP_BYTE_READ;                                        //读命令
  11.         IAP_TRIG  = 0x5A;IAP_TRIG  = 0xA5;                        //启动IAP
  12.         *nbadd = IAP_DATA;
  13.         nbadd++;eadd++;
  14.         }
  15. IAP_CONTR = 0;
  16. IAP_CMD   = 0;
  17. IAP_TRIG  = 0;
  18. IAP_ADDRH = 0xff;                                //重新指向第0扇区
  19. EA = 1;
  20. }
  21. void save(uchar sq,unsigned char *eadd,unsigned char *nbadd,unsigned char size){
  22. unsigned char i = size;
  23. EA = 0;
  24.         IAP_TPS = 33;
  25.         IAP_CONTR = 0x80;
  26.         IAP_ADDRH = sq;                                        //0x10=第9扇区
  27.         IAP_ADDRL = 0x00;
  28.         IAP_CMD   = IAP_SECTOR_ERASE;                                //擦除命令
  29.         IAP_TRIG  = 0x5A;IAP_TRIG  = 0xA5;                        //启动IAP
  30. while(i--){
  31.         IAP_ADDRE = 0;
  32.         IAP_ADDRH = sq;
  33.         IAP_ADDRL = (char*)eadd;
  34.         IAP_CONTR = 0x82;                        //11M
  35.         IAP_CMD   = IAP_BYTE_PROG;                                        //写入命令
  36.         IAP_DATA = *nbadd;
  37.         IAP_TRIG  = 0x5A;IAP_TRIG  = 0xA5;                        //启动IAP
  38.         nbadd++;eadd++;
  39.         }
  40. IAP_CONTR = 0;                                                                        //关闭IAP
  41. IAP_CMD   = 0;
  42. IAP_TRIG  = 0;
  43. IAP_ADDRH = 0xff;                                //重新指向第0扇区
  44. EA = 1;
  45. }
复制代码

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:190
  • 最近打卡:2026-07-03 17:15:08

51

主题

1365

回帖

3622

积分

超级版主

积分
3622
发表于 2026-5-16 08:39:25 | 显示全部楼层
参考AI8051U实验箱19个读写EEPROM的测试程序

AI8051U-DEMO-CODE-V1.2.zip

114.73 MB, 下载次数: 0

STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:416
  • 最近打卡:2026-07-05 08:36:44
已绑定手机

81

主题

318

回帖

2479

积分

金牌会员

积分
2479
发表于 2026-5-16 08:59:22 | 显示全部楼层
AI-32*** 发表于 2026-5-16 08:39
参考AI8051U实验箱19个读写EEPROM的测试程序

感谢,已经弄好了,启动IAP后需要等待一下,加几个NOP,就OK了
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-5 09:48 , Processed in 0.074032 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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