找回密码
 立即注册
查看: 452|回复: 2

从入门到放弃->STC8H1K16的12Keeprom函数操作

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2024-07-14 13:13:18

7

主题

20

回帖

128

积分

注册会员

积分
128
发表于 2024-3-16 22:50:54 | 显示全部楼层 |阅读模式
因为工作原因 {:5_270:}接手了表兄弟的公司技术 也因此入坑stc单片机
面对这大容量的eeprom空间 不由得心动 想要去掉之前的铁电存储器的方案
想要在eeprom中实现函数功能 调试了一个晚上失败了 来论坛求助
<1>512K一个扇区 地址从0x0000开始 1K16高达12K的空间
<2>扇区整页删除 也就意味着要把之前写入的数据重新读取出来
<3>看下结构体定义 我们就需要判断当前扇区的数据是否有效 每个结构体数据都用
uint8_t bcc_verify(uint8_t *buf,uint8_t len);校验 作为结构体成员的checksum 保障数据的准确性
<4>每次写完当前的扇区 判断剩余仅有的字节空间是否满足结构体的大小需求 不行就要增加0x2000字节的地址
#define SECTOR_SIZE 512
#define NUM_SECTORS 128

extern uint8_t IapReadByte(uint16_t);
extern void IapProgramByte(uint16_t, uint8_t);
extern void IapEraseSector(uint16_t);
extern void IapProgramBuffer(uint16_t addr, uint8_t* buff, uint16_t length);
extern void IapReadBuffer(uint16_t addr, uint8_t* buff, uint16_t length);

大家在使用stc单片机的时候如何布局这种大批量数据写入eeprom中的
还望论坛大佬们不吝赐教  {:5_270:}

需要存放的数据结构体

需要存放的数据结构体

校验函数

校验函数
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2024-07-14 13:13:18

7

主题

20

回帖

128

积分

注册会员

积分
128
发表于 2024-3-16 22:56:49 | 显示全部楼层
extern uint8_t IapReadByte(uint16_t);
extern void IapProgramByte(uint16_t, uint8_t);
extern void IapEraseSector(uint16_t);
extern void IapProgramBuffer(uint16_t addr, uint8_t* buff, uint16_t length);
extern void IapReadBuffer(uint16_t addr, uint8_t* buff, uint16_t length);
这些函数已经实现  是问题的函数 和 思路没有实现 调试了一个晚上 没有仿真器 只能打印 没调试通过
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:372
  • 最近打卡:2025-05-01 10:53:48

12

主题

125

回帖

1685

积分

金牌会员

积分
1685
发表于 2024-3-20 19:20:19 | 显示全部楼层
没明白想表达什么功能有问题    eeprom本来读写就慢  其他任务要等待     按照例程写就没问题   
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 15:04 , Processed in 0.117174 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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