你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于 W25X16 的用法

[复制链接]
KEY1 提问时间:2018-10-16 18:00 /
W25X16   片外Flash

W25X16是华邦公司推出的继W25X10/20/40/80(从1Mb~8Mb)后容量更大的FLASH 产品,W25X16 的容量为 16Mb,还有容量更大的W25X32/64,ALIENTEK 所选择的 W25X16 容量为 16Mb,也就是2M 字节,同AT45DB161 是一样大小的。 W25X16 将 2M 的容量分为 32 个块(Block),每个块大小为64K 字节,每个块又分为 16个扇区(Sector),每个扇区16页 4K个字节。W25X16的最少擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。这样我们需要给 W25X16 开辟一个至少 4K 的缓存区,这样对 SRAM 要求比较高


对于Ram 小的系统 开辟4K空间过于紧张,分配更小的Ram空间 如何使用这个芯片存取 一些数据呢?
主要是存一些配置信息,数据量大概几个扇区,但是每次修改只有几十个字节

有没有什么好的方法?




芯片手册上说 具备页编程指令
但是试了下不具备页擦除









赞 收藏 评论12 发布时间:2018-10-16 18:00

举报

12个回答
STM1024 回答时间:2018-10-17 09:58:41
本帖最后由 stm1024 于 2018-10-17 10:00 编辑
50031185 发表于 2018-10-16 18:15
需要能够读取或修改部分数据

我想我知道你的问题本质了。你的想法是,已经把数据写入到了W25,然后发现需要修正1个字节。但是这个时候W25已经被写入了数据,如果你想写入新数据,就要先擦除原来的数据,一擦除就是一个sector,所以必须想办法保存原来的数据,你的想法是在RAM中开辟一个缓冲区,然后先读数据,然后在RAM中修改,然后擦除W25,最后再写入。
如果我没理解错的话,给你的建议是这样的:
1.你没必要把缓冲区完全放在宝贵的RAM中,可以把W25作为一个二级缓冲区,例如W25的最后一个Sector,这个位置可以固定,然后一般的数据也不要往这里面写入。在RAM中只保留一个很小的一级缓冲区,例如一个页面,16Byte,这个大小对应该RAM来说应该毫无压力了吧?
2.现在有一级缓冲区,也有二级缓冲器了,如何使用呢?先按sector删除二级缓冲区,这样二级缓冲区就变成可用状态了。对于你需要读取并修改的数据,先按页读取到一级缓冲区中,如果不需要修改,则直接写入二级缓冲区的对应位置,如果发现需要修改,则修改后写入二级缓冲区的对应位置;循环执行页读取,直到操作完成整个sector。
3.执行完第二步以后,原Sector数据没变,新数据被写入到了二级缓冲区里面了,最后一步就是把最后一个sector的数据copy到原需要修改的sector中,这个可以采用2类似的操作。
这种方法不是太高效,有点像是用时间换空间的感觉,但本质上空间并没有省去,相反时间也增加了。只是把RAM的空间换到外部的ROM中了,唯一的优点可能是选择芯片的时候对内部flash要求每那么大了。
STM1024 回答时间:2018-10-16 18:11:13
如果只是写入,你没必要去开辟一个这么大的缓冲区。
我测试过,只写一个字节的数据都是可以的。
甚至可以跨页写都行(需要注意分页)。
只是擦除的时候最小单位是扇区而已。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

KEY1 回答时间:2018-10-16 18:15:22
stm1024 发表于 2018-10-16 18:11
如果只是写入,你没必要去开辟一个这么大的缓冲区。
我测试过,只写一个字节的数据都是可以的。
甚至可以跨 ...

需要能够读取或修改部分数据
化雨眠 回答时间:2018-10-17 07:59:33
本帖最后由 化雨眠 于 2018-10-17 08:44 编辑
50031185 发表于 2018-10-16 18:15
需要能够读取或修改部分数据

如果重复的往一个地址读写,你直接写就行,不需要擦除该地址里的数据,不过这个得是eeprom

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

废鱼 回答时间:2018-10-17 08:26:15
我用的时候,使用的macoll申请一个临时空间使用。每个地址是只能写入一次,下次写入时必须要擦除才能写。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

STM1024 回答时间:2018-10-17 09:43:42
化雨眠 发表于 2018-10-17 07:59
如果重复的往一个地址读写,你直接写就行,不需要擦除该地址里的数据,不过这个得是eeprom

...

这个好像真不行。W25X16好像是你要写数据之前都要先擦除变为FF后才能写入。直接写入会失败。
tanic 回答时间:2018-10-17 09:52:55
写入flash的数据不一定要地址连续,比如能开一个256字节的ram,那么一个扇区你就存256个字节数据,多的数据存到下个扇区,依此类推
KEY1 回答时间:2018-10-29 23:51:53
stm1024 发表于 2018-10-17 09:58
我想我知道你的问题本质了。你的想法是,已经把数据写入到了W25,然后发现需要修正1个字节。但是这个时候W ...

你说的办法很好, 确实是这样, 需要用时间换空间,目前来看, 大部分的单片机内存已经具备开辟4K缓存的条件
STM1024 回答时间:2018-10-30 08:02:36
50031185 发表于 2018-10-29 23:51
你说的办法很好, 确实是这样, 需要用时间换空间,目前来看, 大部分的单片机内存已经具备开辟4K缓存的 ...

玩单片机,很多时候就是螺蛳壳里做道场,闪转腾挪
sincomaster 回答时间:2018-10-30 08:46:26
学习了,谢谢大大们
wujique 回答时间:2018-10-30 17:33:34
用多块,轮流写,做标记,标记对的就是新的
TLLED 回答时间:2018-10-30 17:50:10
这个芯片擦除得页擦除,先要把数据读出来,页擦除后再写入要写的数据

评分

参与人数 1蝴蝶豆 +1 收起 理由
STMCU + 1

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版