请教Flash模拟eeprom写入时往Flash里写入几十k数据的操作

15_片内flash模拟EEPROM_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
15_片内flash模拟EEPROM
上传于||文档简介
&&S​T​M2​ ​利​用​内​部​ ​f​l​a​s​h​ ​模​拟​ ​E​E​P​R​O​M
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩15页未读,继续阅读
你可能喜欢如何使用STM32的Flash来模拟eeprom_百度知道
如何使用STM32的Flash来模拟eeprom
(u16)*p);* 锁定 FLASH 控制块*&#47先要了解stm32内部flash的使用过程;/FLASH_ErasePage((u32)0x)。建议找些例程看看;/FLASH_ProgramHalfWord((u32)0x;* 写入数据 *&#47,写好后再上锁就可以了;* 解锁flash控制块 *&#47,再确定flash地址;/* 清除一些标志位 *&#47: /* 擦除起始地址为start_add 的 FLASH 页 */FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);FLASH_Lock();FLASH_Unlock();&#47,向这一地址写入需要保存的数据,擦除页,需要解锁, 部分代码(擦除页时要关闭中断)
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 4188|回复: 7
STM32 内部 FLASH 模拟 EEPROM的怪问题请教
主题帖子精华
初级会员, 积分 154, 距离下一级还需 46 积分
在线时间0 小时
使用的是 STM32F103C8xx &(64K FLASH) , &引用mini的FLASH读写代码 &.
写入代码 :
#define FLASH_SAVE_ADDR &0X & & //使用50K以后的地址(上限为64K)
u16 &IR_BUFFER[150]; & & & //一次读写150字节 , &而实际将会占用300个字元地址.
u8 & item,
addr=(item-1)*600+(index-1)*300+100; & &// item与index的变化顺序为 item=1,index=1 -& item=1,index=2 -& item=2,index=1 -& item=2,index=2 .......item=9,index=2
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & &// &+100是为了保留了前面50个字节储放特别参数用
STMFLASH_Read(FLASH_SAVE_ADDR+addr,&IR_BUFFER[0],150); & & & // 写入放于IR_BUFFERP[]接收到的150个字节的红外码高低电平
读取代码 :
addr=(item-1)*600+(index-1)*300+100; & &// item与index的变化顺序为 item=1,index=1 -& item=1,index=2 -& item=2,index=1 -& item=2,index=2 .......item=9,index=2
STMFLASH_Read(FLASH_SAVE_ADDR+addr,&IR_BUFFER[0],150); & //将已储存的对应组资料(150个字节)读入至IR_BUFFER[]
整个源代码使用MDK4.12编译如下, 整个代码空间使用不到15K .
Build target 'Target 1'
linking...
Program Size: Code=8650 RO-data=1682 RW-data=20 ZI-data=1948 &
FromELF: creating hex file...
"TEST.axf" - 0 Error(s), 0 Warning(s).
& & 1. & FLASH可写入启始位置(0X), 为什么设不一样时, 能成功写进再成功读出完全相同数据的机会不一样 .&
& & & & &(如果用0X800C800, 可以成功写入10组以上数据 , 以上item及index组合共18组, &如果基底地址改成0X800C000或0X800D000或其它64K范围内地址,
& & & & &大概只能 "写入及读取成功" 不到5组 , &不知道是为什么?)
& & 2. &单步仿真来看, &每一组都有做 FLASH写入的动作. & &但追踪读出的部份, &很多全是只会读到一整片0Xffff &.
目前计划是找别的flash读写函式库再套上去试看看. & 我确定读写地址一定没有超过64K, &也都是偶数地址 . & & & 但是感觉失败率很高.
特别是基底地址设不同时, &就有不同结果 . & &  请教各位不知道怎么来追查这个问题 &?? & &感谢 !!!
主题帖子精华
在线时间162 小时
我们的战舰板有个flash模拟eeprom的例程,楼主参考下试试吧.
我的淘宝小店:
主题帖子精华
初级会员, 积分 154, 距离下一级还需 46 积分
在线时间0 小时
谢谢板主提供建议!
但我的FLASH代码就是直接使用战舰版的,&&完全未改过&.
看来我得再找找其它办法&..
主题帖子精华
初级会员, 积分 154, 距离下一级还需 46 积分
在线时间0 小时
今天再测试,&当基底位置使用&"#define&FLASH_SAVE_ADDR&&0X"&时,&&可以正常记忆18个按键值&(每个按键150个字节)&.
如果使用&"#define&FLASH_SAVE_ADDR&&0X",&&最后一组按键记忆读回来永远是0XFFFF&.
又如果使用&"#define&FLASH_SAVE_ADDR&&0X"&这地址,&&则中间的按键值有好几个读回来永远是0XFFFF&.
所以,&&如果需要使用1K以上的FLASH空间当成EEPROM,&建议基地地址最好是设为&"0X"&或&"0X"&这样的地址.
原因为何?&&&&&我还没有找到&!!&&&&提供做参考&.
主题帖子精华
中级会员, 积分 498, 距离下一级还需 2 积分
在线时间3 小时
回复【4楼】liuje:
---------------------------------
你要清楚你的芯片的容量。。。
#define&FLASH_SAVE_ADDR&&0X
超容量会出问题的
主题帖子精华
初级会员, 积分 154, 距离下一级还需 46 积分
在线时间0 小时
谢谢提醒&.
C800(16)&=&51200(10)&=&50K&开始的地址&.
每个KEY占用150字节&=&300字元&.
64-50&=&14&(K)&&/&300&=&47&&,&&至少可以记忆47组数据&.&&实际我只用了18组&.&&
就是抓不到问题,&&写入不稳定.&&&只能再找时间试看看别的FLASH读写函式库来验证看看是否为战舰版函式的问题&.
主题帖子精华
新手上路, 积分 21, 距离下一级还需 29 积分
在线时间0 小时
每页前面?4?字节保留,其中前?2?字节是该页状态标志。&有没有可能是这个原因?
主题帖子精华
初级会员, 积分 154, 距离下一级还需 46 积分
在线时间0 小时
回复【7楼】luole700:
每页前面&4&字节保留,其中前&2&字节是该页状态标志。&有没有可能是这个原因?
---------------------------------
我再一次看了一遍原子关于FLASH模拟EEPROM的章节,&&似乎完全没有提到&"每页前面4字节"&&为保留字节.
事实像普通EEPROM及NAND&FLASH也没听说需要这种机制,&&不知道兄台是在哪里看到的&?&&&&可以贴出连结吗&&&&&&感谢&!
Powered by

我要回帖

更多关于 eeprom写入次数 的文章

 

随机推荐